初学者在单纯使用SDK方式写win32程序时,由于缺乏许多封装好的类和函数,对控件的消息处理不是那么方便。这两天遇到了这个问题查了许多资料,大多数都是使用MFC中的PreTranslateMessage()来截获和重载消息,SDK方式需要用到控件子类化,我的解决方式如下
最初我是在父窗口的回调函数中对WM_KEYDOWN消息做判断处理的,很疑惑为什么不起作用,后来在CSDN中还提问了,原问题,感谢被采纳的大佬给的提示。仔细想想消息的过程,焦点在Edit控件中,按下回车键产生的消息应该由Edit子窗口来处理。按下图的代码主窗口并不会收到WM_KEYDOWN的消息,也就无法实现。
下面是错误示范哦!
...
case WM_KEYDOWN:
switch(wParam)
{
case VK_RETURN:
SendMessage(hBtnOk,WM_LBUTTONDOWN,0,lParam);
SendMessage(hBtnOk,WM_LBUTTONUP,0,lParam);
break;
}
...
最后的解决方法是把WM_KEYDOWN放到Edit控件的子窗口过程中处理,使用到了SetWindowLong()详细看下方代码