我发现类似于WM_KEYDOWN这一类的信息是直接发给有焦点的控件的。
在VB中可以让这些信息在窗体进行一次过滤。可是在VC中没有这种方法。
还有就是在MFC生成的对话框(CDialog为基类)当用户按下回车键时就会以IDOK结束窗体,这个回车键的处理过程要怎么样才能屏蔽啊。
我的程序中要用回车键作为输入结整标记,如果不屏蔽窗体对回车键的处理就实理不了我要的功能了。
在VB中可以让这些信息在窗体进行一次过滤。可是在VC中没有这种方法。
还有就是在MFC生成的对话框(CDialog为基类)当用户按下回车键时就会以IDOK结束窗体,这个回车键的处理过程要怎么样才能屏蔽啊。
我的程序中要用回车键作为输入结整标记,如果不屏蔽窗体对回车键的处理就实理不了我要的功能了。
然后:
if(pMsg->message==WM_KEYDOWN)
{
if(pMsg->wParam==VK_RETURN)
{
//Do Something
//如果是想屏蔽掉,就直接return好了
}
}
用上面的方法会同时把多行文本框回车换行事件也去掉的,因为在PreTranslateMessage中你就将回车事件屏蔽了,所在多行文本框得不到回车事件了。
还有就是CXxxDlg::OnKeydown事件无法激发,因为消息总是发给他的子控件,而对话框本身得不到消息。
至于在PreTranslateMessage中过滤的话,可以获取当前焦点下的窗口句柄并判断其类型是否是多行文本框进行区别处理即可以。可参阅下面这个例子
http://blog.csdn.net/ghgk/archive/2004/10/20/144795.aspx