首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

200分 请问MFC重载PreTranslateMessage的有关问题

2013-06-19 
200分 请教MFC重载PreTranslateMessage的问题我在使用RegisterWindowMessage注册了一个消息,在对话框上重

200分 请教MFC重载PreTranslateMessage的问题
我在使用RegisterWindowMessage注册了一个消息,在对话框上重载了PreTranslateMessage函数,另一个程序发送一次被消息的消息,在PreTranslateMessage能收到两次,请问题什么问题?我用WIN32的程序在WndProc中就只会收到一次. MFC PreTranslateMessage
[解决办法]
PreTranslateMessage 的机制肯定是没有问题的,应该还是你代码哪里有问题。

RegisterWindowMessage 函数偶也偶尔使用,没遇到 LZ 所描述的现象。
[解决办法]
由于用RegisterWindowMessage注册消息,所以你应该就是直接广播,那么每一个窗体都能收到这个消息。
你最好在PreTranslateMessage中判断一下窗体句柄。
比如判断主窗体句柄,然后由主窗体接收,如果需要发给子界面,由主窗体分发就行了。
[解决办法]

引用:
引用:由于用RegisterWindowMessage注册消息,所以你应该就是直接广播,那么每一个窗体都能收到这个消息。
你最好在PreTranslateMessage中判断一下窗体句柄。
比如判断主窗体句柄,然后由主窗体接收,如果需要发给子界面,由主窗体分发就行了。
我新建了一个MFC的对话框,啥事也没干,就是测试这个问题,没有……


BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == msgid && pMsg->hwnd == this->m_hWnd)
{
             //你在这里确认一下吧。
             //有必要再由他发给子窗体。
        }
        return CDialog::PreTranslateMessage(pMsg);
}
[解决办法]
我怀疑你是在CWinApp的类里面做实验的。
[解决办法]
系统的机制肯定是没有问题,所以只能找自己代码的原因。
[解决办法]
使用RegisterWindowMessage注册同名函数,然后在MFC程序中,把该函数与自定义的消息接收函数绑定,这样用是不会有你说的这种情况的。
至于你是使用PreTranslateMessage这个函数就不大清楚咯!估计是你没处理好吧,把代码贴出来大家瞧瞧
[解决办法]
对我来说pMsg->hwnd == this->m_hWnd是必须的。在3个平台的wince上,都有你说的问题。最先开始是做键盘驱动,在驱动里面就注册这样一个消息,结果按键就能收到多个消息。
win32我没测试过,我都是在wince上看到的效果。

如果你加上句柄的判断还不行我就没有办法了,我的情况我就是这样解决的。
[解决办法]
引用:
引用:使用RegisterWindowMessage注册同名函数,然后在MFC程序中,把该函数与自定义的消息接收函数绑定,这样用是不会有你说的这种情况的。
至于你是使用PreTranslateMessage这个函数就不大清楚咯!估计是你没处理好吧,把代码贴出来大家瞧瞧
我说了我在WIN32下测试也是OK的,MFC代码如下:
C/C+……


你把return那就放到if外面试试
[解决办法]
路过支持下。
[解决办法]
引用:
引用:对我来说pMsg->hwnd == this->m_hWnd是必须的。在3个平台的wince上,都有你说的问题。最先开始是做键盘驱动,在驱动里面就注册这样一个消息,结果按键就能收到多个消息。
win32我没测试过,我都是在wince上看到的效果。

如果你加上句柄的判断还不行我就没有办法了,我的情况我就是这样解决的。
我……


我以为你的win32是指直接跑pc。看来是一样,原因不明,或是是mfc的bug。mfc在wince上跟pc有好些是不太一样的。当初我窗体多,一下收到好多消息。

热点排行