我是VC/MFC初学者,想问下各位大虾请教WindowProc和DefWindowProc两者有什么区别我在网上和MSDN上查了下,自己理解如下,不知正确与否还请各位大虾指点1. WindowProc函数处理的是经过了Window消息队列的消息,如WM_类的消息;
而DefWindowProc函数处理的是除了以上的消息之外,还有自定义的消息?2. 如果在一个Dialog中定义了这两个函数,当有一WM_LBUTTONDOWN消息传递到Dialog后,就首先调用WindowProc函数进行处理,若该消息没有得到处理那么就默认到DefWindowProc函数中进行处理;
而自定义的消息如UM_MENUBUTTONCLICK则只能由DefWindowProc来处理?
而DefWindowProc函数处理的是除了以上的消息之外,还有自定义的消息?2. 如果在一个Dialog中定义了这两个函数,当有一WM_LBUTTONDOWN消息传递到Dialog后,就首先调用WindowProc函数进行处理,若该消息没有得到处理那么就默认到DefWindowProc函数中进行处理;
而自定义的消息如UM_MENUBUTTONCLICK则只能由DefWindowProc来处理?
解决方案 »
- 按照广义表输入,绘制二叉树
- 关于CFtpFileFind的问题
- 我的老板键功能失效了,大家帮我看看原因吧。。
- vs2008 C++ SDK 程序按钮不是 windows7 风格的
- [奇怪] 为什么编译后的exe文件内部包含源文件列表???
- ATL初级问题
- win32下如何控制键盘输入的速率呢?
- 手写笔 请教
- 为什么我用TerminateProcess杀不了WIN95,WIN98的进程,是我的问题还是TerminateProcess是在WIN95,WIN98下的用法不同???
- VC中调用dynamicTwain activex 3.0
- 关于ATL+BHO,sink的问题
- mfc中 access有密码的 连接
WindowProc是你给自己的窗口定义的窗口处理函数
DefWindowProc是windows平台提供的默认窗口处理函数
如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"2.
根据1,显然,你只能定义WindowProc而不能定义DefWindowProc看看MFC的CWnd源码就一目了然了
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// OnWndMsg does most of the work, except for DefWindowProc call
LRESULT lResult = 0;
if (!OnWndMsg(message, wParam, lParam, &lResult)) // 如果消息是需要自己处理的,
//处理后就不必让windows系统进行默认处理了
lResult = DefWindowProc(message, wParam, lParam); // 自己没有处理的就交给windows去做 return lResult;
}
LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// OnWndMsg does most of the work, except for DefWindowProc call
LRESULT lResult = 0;
if (!OnWndMsg(message, wParam, lParam, &lResult)) // 如果消息是需要自己处理的,
//处理后就不必让windows系统进行默认处理了
lResult = DefWindowProc(message, wParam, lParam); // 自己没有处理的就交给windows去做 return lResult;
}