Windows应用程序的基本运行机制与HelloWin程序详解
总的来说最基本的Windows应用程序的运行执行顺序总是以如下的基本顺序执行的。
顺序结构:
调用WinMain函数开始执行--à定义窗口类--à初始化窗口类--à窗口的实例化--à通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作
由于windows应用程序运行的逻辑结构特殊所以代码的详细解释笔者就不把程序于叙述分开了了,这样有利于阅读与分析。
分析代码如下:
//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必注明出处和作者
#include <windows.h>
#pragma comment(lib,"winmm.lib")//为了要播放声音,必须导入这个库
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
/*
HINSTANCE 类型的含义为实例句柄。
hInstance 事实上就是当前应用程序自身的标识代号,代号通常都是一个32位整数。
hPrevInstance 与过去的16位应用程序有关系,表示指向前一个实例的句柄。
PSTR 类型的含义是指向以\0结尾的字符串指针。
szCmdLine 前面的sz同样是表示指向以\0结尾的字符串指针,这个对象用于保存命令行。
最后iCmdShow是一个整型数据,标记了程序最初的显示状态。
为SW_SHOWNORAML的时候为一般大小显示方式。
为SW_SHOWMAXIMIZED的时候为最大化显示方式。
为SW_SHOWMINNOACTIVE的时候程序将显示在任务栏上。
*/
{
static char szAppName[] = TEXT("HelloWin");//预先定义一个c风格字符串,稍后用于设置窗口类名称。
WNDCLASS wndclass;//定义窗口类对象
/*
在这里不得不说一下的是,窗口类事实上是strUCt结构体,内部有10个分量,他们是用来于初始化窗口类对象而用的。
这个结构体在winuser.h头文件中定义,从方式上来说,分为ASCII版的WNDCLASSA和Unicode版的WNDCLASSW两个。
typedef struct tagWNDCLASSA {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;