我在使用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有好些是不太一样的。当初我窗体多,一下收到好多消息。