全部博文(1293)
分类: C/C++
2012-12-19 21:21:37
所有的windows应用程序必须包含两个基本函数WinMain()、Wnnproc():
一、应用程序主函数WinMain()
WinMain()是所有应用程序的入口,类似C语言中的Main函数。它完成一系统的定义与初始化工作,并产生消息循环。
注意1因为windows是多任务的系统,所以同一应用程序的多个窗口可能会同时存在,windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识。
在WinMain()函数中实现以下三个功能:注册窗口类、创建并初始化窗口、创建消息循环。
1、注册窗口类:
每个窗口都有一些基本属性,如窗口的大小、标题栏文字、背景色等。windows应用程序使用WNDCLASS结构体来定义窗口的各个属性。
- typedef struct tagWNDCLASS {
- DWORD style; /* 窗口风格 */
- WNDPROC *lpfnWndProc; /* 窗口函数 */
- int cbCl***tra; /* 类变量占用的存储空间 */
- int cbWndExtra; /* 实例变量占用的存储空间 */
- HINSTANCE hinstance; /* 定义该类的应用程序实例的句柄 */
- HICON hicon; /* 图标对象的句柄 */
- HCURSOR hCursor; /* 光标对象的句柄 */
- HBRUSH hbrBackground; /* 窗口背景颜色的句柄 */
- LPCSTR lpszMenuName; /* 标识选单对象的字符串 */
- LPCSTR lpszClassName; /* 标识该类的名字的字符串 */
- } WNDCLASS;
定义完窗口类后,再使用Windows的API函数RegisterClass(&wndclass)注册窗口类。注册成功后,就能创建窗口了。
2、创建并初始化窗口:
用CreateWindow()函数用于创建该窗口,调用ShowWindow()和UpdateWindow两个函数来显示窗口。
3、创建消息循环:
WinMain()函数最后使用while语句创建一个消息循环,负责从消息循环队列中获取消息并分发给相应的窗口函数。
(2)窗口处理函数Wndproc()
- LRESULT CALLBACK WndProc{ //WndProc名称可自由定义
- HWND hwnd, //接收消息的窗口句柄,即像该窗口处理函数发生邀请的窗口
- UINT message,
- WPARAM wParam,
- LPARAM lParam
- };
在窗口函数中,根据接收的消息信息(mesage,wParam和Parm)进行判断,然后使用switch语句对应用程序接收到的不同消息进行响应,执行相应的程序模块。
MFC应用程序也有一个WinMain函数,但程序员不需要编写该函数,该函数被封装在MFC的应用程序框架内,当应用程序启动时被自动调用。