200分 请问MFC重载PreTranslateMessage的有关问题
200分 请教MFC重载PreTranslateMessage的问题我在使用RegisterWindowMessage注册了一个消息,在对话框上重
200分 请教MFC重载PreTranslateMessage的问题
我在使用RegisterWindowMessage注册了一个消息,在对话框上重载了PreTranslateMessage函数,另一个程序发送一次被消息的消息,在PreTranslateMessage能收到两次,请问题什么问题?我用WIN32的程序在WndProc中就只会收到一次. MFC PreTranslateMessage
[解决办法]
PreTranslateMessage 的机制肯定是没有问题的,应该还是你代码哪里有问题。
RegisterWindowMessage 函数偶也偶尔使用,没遇到 LZ 所描述的现象。
[解决办法]
由于用RegisterWindowMessage注册消息,所以你应该就是直接广播,那么每一个窗体都能收到这个消息。
你最好在PreTranslateMessage中判断一下窗体句柄。
比如判断主窗体句柄,然后由主窗体接收,如果需要发给子界面,由主窗体分发就行了。
[解决办法]
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上看到的效果。
如果你加上句柄的判断还不行我就没有办法了,我的情况我就是这样解决的。
[解决办法]你把return那就放到if外面试试
[解决办法]路过支持下。
[解决办法]我以为你的win32是指直接跑pc。看来是一样,原因不明,或是是mfc的bug。mfc在wince上跟pc有好些是不太一样的。当初我窗体多,一下收到好多消息。