怎么屏蔽掉一个窗口的“F1”按键消息? CCautionDialog::PreTranslateMessage重载的是这个Dialog的,所以对APP类不起作用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PreTranslateMessage是在消息在被响应或者被继续向其子类传递前的处理,当然就可以让某个消息在这里提前处理,或者截断...以正因为只能控制向下传递,所以不你不控制你的上层对消息的处理.你要实现的功能应该放到OnCmdMsg重载函数中处理,让其返回TRUE,即让其上层知道这个消息我已经处理了,你不再处理.如果这里返回FALSE,则上消息上层会继续处理该消息,直到最外层 ....你在你的C~APP类中覆盖下PreTranslateMessage函数:如BOOL CTestSDI1App::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if(pMsg->wParam == VK_F1) return true; else return CWinApp::PreTranslateMessage(pMsg);}或者你打开你的程序的资源视图,找到Accelerator项,再找ID_HELP VK_F1 ,把那项删除掉 我按你讲的在C**Dialog里实现了OnCmdMsg,结果有效。但是OnCmdMsg是个什么函数?与PreTranslateMessage有什么关系?你说的里层外层的我都蒙了 重载这个函数我也试了。BOOL CTestSDI1App::PreTranslateMessage(MSG* pMsg)不过如果这样的话不就所有窗口下的F1都被屏蔽了吗。我只想屏蔽某一个窗口的F1。我尝试通过pMsg来判断该消息来自于该窗口,并且在此时返回TRUE。结果还是不好用555555为神马。 重载 void CXXXApp::WinHelp( DWORD dwData, UINT nCmd){ //CWinApp::WinHelp(dwData, nCmd);} if(pMsg->wParam == VK_F1 && (CWnd::FromHandle(pMsg->hwnd))->IsKindOf(RUNTIME_CLASS(你的dialog名))) return true; else return CWinApp::PreTranslateMessage(pMsg);我试了下 可以屏蔽的 不好意思。你的这个方法还是不管用我通过写LOG的方法试了一下。在对话框上面按f1的话,函数的调用顺序是这样的。CmfcTestApp::PreTranslateMessageCmfcTestDlg::PreTranslateMessageCmfcTestDlg::OnCmdMsgCmfcTestApp::OnCmdMsgCmfcTestDlg::OnCmdMsgCmfcTestApp::OnCmdMsgCmfcTestApp::OnHelp //(这个函数弹出HELP窗体,是通过ONCOMMAND(ID_HELP,CmfcTestApp::OnHelp)映射的在CmfcTestApp::PreTranslateMessage中捕获消息返回TRUE之后,执行的顺序是这样的CmfcTestApp::PreTranslateMessageCmfcTestDlg::OnCmdMsgCmfcTestApp::OnCmdMsgCmfcTestDlg::OnCmdMsgCmfcTestApp::OnCmdMsgCmfcTestApp::OnHelp //(这个函数弹出HELP窗体,是通过ONCOMMAND(ID_HELP,CmfcTestApp::OnHelp)映射的仅仅CmfcTestDlg::PreTranslateMessage一个函数被跳过。按理说PreTranslateMessage返回TRUE消息就不应该被处理了。但是为什么无效呢。请各位指点~感激 CXXXApp::WinHelp这个函数没有被调用啊 CXXXApp::WinHelp这个函数根本没有被调用啊。。 在你的CCautionDialog覆盖下PreTranslateMessage,如下面的:BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if((VK_F1 == pMsg->wParam && WM_KEYDOWN == pMsg->message) || (pMsg->message == 77)) return TRUE; return CDialog::PreTranslateMessage(pMsg);} 如何给指定进程发送消息,模拟键盘输入?? 求高手帮忙!!VC++图像处理 给个线程池的例子 vc 一个软件有两个功能,一个频繁运行,一个隔较长时间运行。 问一下我程序运行时,出现"0x0047f10b指令引用的“0x00000001"内存。该内存不能为”read“。是什么原因? 如何取得listctrl中右对齐栏的文本内容 一个关于属性页的问题 SDK相关知识,作一些介绍 怎么直接读取从网卡传入的数据 为什么要在创建对象之前删除对象?? socket原语中的bind/listen为什么不合成一个原子操作? VC解4元方程一般如何写代码
BOOL CTestSDI1App::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->wParam == VK_F1)
return true;
else
return CWinApp::PreTranslateMessage(pMsg);
}或者你打开你的程序的资源视图,找到Accelerator项,再找ID_HELP VK_F1 ,把那项删除掉
但是OnCmdMsg是个什么函数?与PreTranslateMessage有什么关系?
你说的里层外层的我都蒙了
BOOL CTestSDI1App::PreTranslateMessage(MSG* pMsg)
不过如果这样的话不就所有窗口下的F1都被屏蔽了吗。
我只想屏蔽某一个窗口的F1。
我尝试通过pMsg来判断该消息来自于该窗口,并且在此时返回TRUE。
结果还是不好用
555555为神马。
{
//CWinApp::WinHelp(dwData, nCmd);
}
if(pMsg->wParam == VK_F1 &&
(CWnd::FromHandle(pMsg->hwnd))->IsKindOf(RUNTIME_CLASS(你的dialog名)))
return true;
else
return CWinApp::PreTranslateMessage(pMsg);我试了下 可以屏蔽的
我通过写LOG的方法试了一下。
在对话框上面按f1的话,函数的调用顺序是这样的。CmfcTestApp::PreTranslateMessage
CmfcTestDlg::PreTranslateMessage
CmfcTestDlg::OnCmdMsg
CmfcTestApp::OnCmdMsg
CmfcTestDlg::OnCmdMsg
CmfcTestApp::OnCmdMsg
CmfcTestApp::OnHelp //(这个函数弹出HELP窗体,是通过ONCOMMAND(ID_HELP,CmfcTestApp::OnHelp)映射的在CmfcTestApp::PreTranslateMessage中捕获消息返回TRUE之后,执行的顺序是这样的CmfcTestApp::PreTranslateMessage
CmfcTestDlg::OnCmdMsg
CmfcTestApp::OnCmdMsg
CmfcTestDlg::OnCmdMsg
CmfcTestApp::OnCmdMsg
CmfcTestApp::OnHelp //(这个函数弹出HELP窗体,是通过ONCOMMAND(ID_HELP,CmfcTestApp::OnHelp)映射的仅仅CmfcTestDlg::PreTranslateMessage一个函数被跳过。
按理说PreTranslateMessage返回TRUE消息就不应该被处理了。但是为什么无效呢。
请各位指点~感激
{
// TODO: 在此添加专用代码和/或调用基类
if((VK_F1 == pMsg->wParam && WM_KEYDOWN == pMsg->message) || (pMsg->message == 77))
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}