在PreTranslateMessage中如果拦截ALT+p按键,应该如何表达.....
在PreTranslateMessage中如果拦截ALT+p按键,应该如何表达..... 问题点数:100、回复次数:8Top
1 楼ouyh12345(五岭散人)回复于 2006-03-02 14:08:57 得分 0
组合键好象是先按ALT,再按p吧。
如果是这样的话,分别捕捉这两个键盘信息,然后判断时间差Top
2 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 14:20:34 得分 0
二)组合键的用法:(本例响应Ctrl+X键)
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
SetFocus ();
return TRUE;
case ´P´:
if(::GetKeyState(VK_ALT) < 0)//
MessageBox("hello");
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Top
3 楼kelinwang19(kelin)回复于 2006-03-02 14:37:32 得分 0
楼上正解Top
4 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 14:44:09 得分 0
BOOL CMydilog::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
SetFocus ();
return TRUE;
case 'P' //这里应该是这样.刚才那个拷错了.
if(::GetKeyState(VK_ALT) < 0)//
MessageBox("hello");
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}Top
5 楼Atomictry(天影)回复于 2006-03-02 14:53:07 得分 0
不是正解,ALT虚拟键是VK_MENU,同时即使用的是VK_MENU,也不能正常工作。Top
6 楼Atomictry(天影)回复于 2006-03-02 15:03:20 得分 0
楼上都忽略了WM_SYSKEYDOWN消息,正解是下面的,MSDN中有篇文章对此有说明。
if ((WM_KEYDOWN == pMsg->message) || (WM_SYSKEYDOWN == pMsg->message))
{
switch (pMsg->wParam)
{
case 'P':
if(::GetKeyState(VK_LMENU) < 0)
MessageBox("hello");
return TRUE;
default:
break;
}
}Top
7 楼Atomictry(天影)回复于 2006-03-02 15:04:42 得分 0
ALT键虚拟码有:VK_MENU,VK_LMENU,VK_RMENUTop
8 楼ydfivy(我就是一送外卖的)回复于 2006-03-02 15:16:20 得分 0
Atomictry说的对.
只记得有VK_CONTROL,忘了没有VK_ALT的定义.
这个是靠FLAG中的位来确定的.误导楼主.抱歉.Top




