在Windows应用程序中,窗口是通过窗口句柄HWND来标识的。我们要对某个窗口进行操作,首先要得到这个窗口句柄。
在windows程序中,消息由MSG结构体来表示的,MSG结构体定义:
>typedef struct tagMsg{
HWNDhwnd;
UINT message;
WPARAMwParam;
DWORDtime;
POINTpt;
}MSG;
WinMain函数
应用程序的实现步骤:
1、 WinMain函数的定义;
2、 创建一个窗口;
3、 进行消息循环;
4、 编写窗口过程函数;
WinMain函数的定义:
函数声明:
>int WINAPI WinMain(
HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine;
IntnCmdShow
);
窗口的注册类:
WNDCLASS
设计完成窗口类后,需要顶用RegisterClass函数对其进行注册,注册后才可以创建该类型的窗口。
ATOM RegisterClass(CONST WNDCLASS*lpWndClass);
创建窗口
使用CreateWindow函数。
显示及更新窗口
显示床后函数:Bool ShowWindow(
HWND hWnd,
Int nCmdShow
);
更新窗口函数:Bool UpdateWindow(HWND hWnd);
消息循环
在创建创库、显示窗口、更新窗口后,我们需要编写一个消息循环,不断地从消息队列中取出消息,并进行响应。
GetMessage(LPMSG lpMsg, HWND hWnd, UINTwMsgFilterMin, UINT wMsgFilterMax);
通常编写的消息代码循环如下:
MSG msg;
While(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
1、 操作系统接收到应用程序的窗口消息,将消息投递到该应用程序的消息队列中国,
2、 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,消息取出后,应用程序可以对消息进行预处理。
3、 应用程序调用DispatchMessage,将消息回传给操作系统,消息是有MSG结构体对象来表示的。其中就包含了接收消息的窗口句柄。
4、 系统利用WNDCLASS结构体lpfnWndProc成员保存的窗口过程函数指针调用窗口的过程,对消息进行处理。
从消息队列中取消息还可以用PeekMessage函数,该函数的原型:
Bool PeekMessage(LPMSG lpMsg, HWND hWnd,UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
编写窗口过程函数:
用于处理发送给窗口的消息,一个Windows应用程序主要代码就几种在创酷哦过程函数中。
LRESULT CALLBACK WindowPro(HWND hwnd, UINT,uMsg, WPARAM, wParam, LPARAM lparam);