windows窗口过程函数名词解析
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
1. LRRESULT
lresult:
MSDN:
32-bit value returned from a windows procedure or callback function
在winbnt.h中定义为 long long
在windef.h中定义为 long result
LRESULT中L表示它是一个长整型,RESULT表示返回的某个结果
2. CALLBACK
callback:
存在定义如下
#define CALLBACK _stdcall
#define WINAPI _stdcall
1. CALLBACK与WINAPI完全等价
2. _stdcall是一种调用约定,它让编译器知道了应当以windows兼容的方式来产生机器指令。如果去掉虽然可以通过编译,但会产生一条警告。
3. WndProc
wndproc:
窗口过程函数,主要用于处理发送给窗口的消息
4. HWND
H表示handle,指句柄
WND表示指向对象window,指窗口对象
因此hwnd指窗口句柄,如果将窗口比作人,那么窗口句柄就是其身份证
5. UINT
表示待处理消息的ID,即消息的类型
6. WPARAM,LPARAM
消息的附加信息
消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)构成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。
因为一个程序可以有多个窗口,窗口的第一个参数就用来指定接收消息的那个特定窗口,即窗口句柄。
同时我们用switch (unit)判断消息类型并进行不同的处理
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch(message)
{
case WM_PAINT:
ValidateRect((hwnd,NULL); //更新客户区显示
break;
case WM_KEYDOWN:
if(wParam==VK_ESCAPE) DestroyWindow(hwnd); //按照命令销毁窗口
break;
case WM_DESTROY:
PostQuitMessage(0); //提示操作系统有一个线程请求终止
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam); //返回默认处理函数处理结果
}
return 0;
}