编写一个基本的windows application需要以下几个步骤:
1.首先要设计一个窗体;
2.然后注册这个窗体;
3.创建窗体;
4.显示窗体;
5.消息循环;
6.编写消息响应函数。
下面详细说说每个步骤:
1.首先要生成一个WNDCLASS类型的结构体:WNDCLASS wndcls,然后为wndcls的各个成员变量赋值,wndcls的各个成员变量的说明可以参考msdn,以下是msdn中对WNDCLASS类型结构 体的描述:
style 是class type,可以是多种type的合体;
lpfnWndProc 是指向window procedure,我们也就是在window procedure中进行窗体的消息响应;
cbClsExtra specifies the number of extra bytes to allocate following the window-class structure. The system initializes the bytes to zero;
cbWndExtra specifies the number of extra bytes to allocate following the window instance. The system initializes the bytes to zero. If an application uses WNDCLASS to register a dialog box created by using the CLASS directive in the resource file, it must set this member to DLGWINDOWEXTRA;
hInstance 是包括这个窗体的实例,也就是由操作系统在创建这个程序时由winMain参数传进来的;
hIcon 是一个窗体图标句柄;
hCursor 是一个鼠标句柄,用于规定鼠标移至窗体上时,鼠标显示的类型;
hbrBackground handle to the class background brush;
lpszMenuName 指向的是菜单名,若没有,就赋值为NULL;
lpszClassName 指向的是这个Class的name。
2.设计好了一个窗体,接下去我们来注册这个窗体
使用RegisterClass,如我们注册上面设计好的窗体RegisterClass(wndcls);
3.完成了注册,我们要显示这个窗体,怎么做呢,可以使用系统提供的函数CreateWindow,以下是msdn中对CreateWindow的 描述:
4.创建完了窗体,但我们看不见,还需要显示这个窗体,使用ShowWindow函数,以下是msdn中的描述:
5.我们可以用while语句来实现一个消息循环,
解释下上面这段代码, 首先我们定义了一个MSG类型的结构体msg,然后在while的判断条件中用了GetMessage这个函数从当前线程的队
列中去取第一条消息,在while条件为真的情况下,执行了TranslateMessage和DispatchMessage两个函数,第一个是用来转换消息,将
virtual-key messages转化为character messages。然后用DispatchMessage分发消息给window procedure。
6.我们需要自己编写对相应窗体消息的响应函数
比如说窗体的重绘消息(WM_PAINT)的响应、按键消息(WM_CHAR)的响应,下面我们简单实现几个消息响应:
以下是完整的程序代码: