BOOL CAaaDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class int a=0; CString str; switch(pMsg->message) { case WM_MOUSEMOVE: m_tooltip.RelayEvent(pMsg); break; case WM_KEYDOWN: a=pMsg->wParam; str.Format("%d",a); MessageBox(str); } return CDialog::PreTranslateMessage(pMsg); }
只要你继承PreTranslateMessage就可以了,
如
BOOL CHTTwoSoftDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN))
{
// OnKeyDown((UINT)pMsg->wParam,(UINT)pMsg->lParam,(UINT)pMsg->lParam);
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
视图当中当中的回车键,也是需要使用PreTranslateMessage来截获
这些按键消息都被系统截获了,不放到子窗口的消息队列当中,因此要获得他们的响应只有在系统处理他们之前先处理,方法就是楼上的。
{
// TODO: Add your specialized code here and/or call the base class int a=0;
CString str;
switch(pMsg->message)
{
case WM_MOUSEMOVE:
m_tooltip.RelayEvent(pMsg);
break;
case WM_KEYDOWN:
a=pMsg->wParam;
str.Format("%d",a);
MessageBox(str); }
return CDialog::PreTranslateMessage(pMsg);
}
详细情况如下:
我学VC时间不长,现在正练习用采集卡提供的DLL开发包作二次开发,修改了厂家提供的一个例子程序,主要就是把PREVIEW的视图实时旋转90度,然后可以抓图。功能以经完成,就是抓图的快捷键加不进去。源程序是一个多文档的框架结构。运行时,点新建文档后,预览窗口出现,显示正常的采集视图。点击旋转按钮后,我在这里把正常的视图隐藏了,利用DLL中提供的一个回调函数得到图象数据,处理后显示在一个新建的对话框类窗口中。此时如果用鼠标点击主FRAME窗口上的工具档或菜单都有效,而键盘快捷键却无效,无论在新建的对话框窗口类中还是原来的子窗口类甚至主框架中,用OnChar去捕获键盘消息时,程序根本不运行到那去。用
PreTranslateMessage(pMsg),程序可以运行进去,但到下面这步时条件始终不为真。
if(pMsg->message==VK_SPACE||pMsg->message==VK_F8)
{......}
我想是不是到这步之前键盘消息已经被滤过一道了,我试了很久,还在对话框类中加入DIRECTINPUT对象去捕捉键盘消息但到
HRESULT hr=m_pKeyboard->GetDeviceState(sizeof(DIKey),DIKey);
时始终不OK,没招了,请大家支援。
另又试了一下,主框架中菜单的热键可以执行,不过要先激活主框架才行。这个热键和普通的键盘消息有何不同。
2.设置断点条件为接收到VK_F8消息,查查看。