1. 是谁产生的lParam和wParam传给windowproc? 这两个值通常都是什么?
2. 什么过程触发了windowproc的调用? DispatchMessage()? 还有什么函数会触发windowproc?
3. 在函数的结尾,为什么最后还要DefWindowProc? 不调用不行么?
请简单举例
谢谢!!!!!
2. 什么过程触发了windowproc的调用? DispatchMessage()? 还有什么函数会触发windowproc?
3. 在函数的结尾,为什么最后还要DefWindowProc? 不调用不行么?
请简单举例
谢谢!!!!!
谢谢
1 这两个值通常都和相应的消息相关, 不同的消息值的意义通常都不一样, 详情查MSDN
3 末尾调用DefWindowProc是使用默认的消息处理函数
对于WM_COMMAND消息类型,MSDN解说如下
WM_COMMAND
The WM_COMMAND message is sent when the user selects a command item from a menu, when a control sends a notification message to its parent window, or when an accelerator keystroke is translated. WM_COMMAND
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam); // item, control, or accelerator identifier
hwndCtl = (HWND) lParam; // handle of control
Parameters
wNotifyCode
Value of the high-order word of wParam. Specifies the notification code if the message is from a control. If the message is from an accelerator, this parameter is 1. If the message is from a menu, this parameter is 0.
wID
Value of the low-order word of wParam. Specifies the identifier of the menu item, control, or accelerator.
hwndCtl
Value of lParam. Handle to the control sending the message if the message is from a control. Otherwise, this parameter is NULL.
系统自动产生的,系统为每个窗口维护一个消息对列.lParam和wParam 因系统消息的不同而不用,比较直观的列子: 在窗口上移动鼠标会产生WM_MOUSEMOVE消息,lParam参数的高字是光标的y坐标值,低字是光标的x坐标值.
2. 什么过程触发了windowproc的调用? DispatchMessage()? 还有什么函数会触发windowproc?
从程序的角度看,是DispatchMessage()函数,当然也有其它函数也能间接触发.
消息处理基本过程:
系统为窗口维护一个消息对列,当有消息时,程序调用GetMessage()获取消息,并作适当处理(一般不处理),再DispatchMessage()传递给系统,
系统把属于本窗口的消息交给windowpro(),假设有自己不想处理的消息怎么办,直接交给DefWindowProc函数(多文档窗口里面叫DefFrameProc),
消息处理基本结束.
3. 在函数的结尾,为什么最后还要DefWindowProc? 不调用不行么?
2 已回答,不调用不行,再说了,那么多消息自己用程序也处理不完
其实windowpro()函数只是系统给的一个接口,得按它的要求办事.
4.什么情况下,msg类型是WM_COMMAND的时候,lParam!=0呢?
是控件产生WM_COMMAND 消息时,比如 button.有问题,多看MSDN.