所有的windows应用程序必须包含两个基本函数WinMain()、Wnnproc():
一、应用程序主函数WinMain()
WinMain()是所有应用程序的入口,类似C语言中的Main函数。它完成一系统的定义与初始化工作,并产生消息循环。
- int WINAPI WinMain(HINSTANCE hinstance,//程序本身的实例句柄
- HINSTANCE hPrevInstance,//应用程序其他实例句柄(因为多任务)
- LPSTR lpCmdLine,//指向字符串的指针,用来保存程序运行时的命令行参数
- int nCmdShow);//表示应用程序开始执行时窗口显示模式(如窗口放大、缩小)
注意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语句创建一个消息循环,负责从消息循环队列中获取消息并分发给相应的窗口函数。
- While(GetMessage(&Msg,NULL,0,0))//获取消息
- {
- TranslateMessage(&Msg);//消息转换
- DispatchMessage(&Msg);//消息分发
- }
(2)窗口处理函数Wndproc()
- LRESULT CALLBACK WndProc{ //WndProc名称可自由定义
- HWND hwnd, //接收消息的窗口句柄,即像该窗口处理函数发生邀请的窗口
- UINT message,
- WPARAM wParam,
- LPARAM lParam
- };
在窗口函数中,根据接收的消息信息(mesage,wParam和Parm)进行判断,然后使用switch语句对应用程序接收到的不同消息进行响应,执行相应的程序模块。
MFC应用程序也有一个WinMain函数,但程序员不需要编写该函数,该函数被封装在MFC的应用程序框架内,当应用程序启动时被自动调用。