首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

在vc++里得到键盘按下的键值(特急 150分的题!),该怎么处理

2012-03-11 
在vc++里得到键盘按下的键值(特急150分的题!!!)我在做一个工业控制的程序。我要得到PC机按下键盘的键值,可

在vc++里得到键盘按下的键值(特急 150分的题!!!)
我在做一个工业控制的程序。
        我要得到PC机按下键盘的键值,可是在VC++里WM_KEYDOWN,和WM_CHAR消息都得不到F10,Alt等键值,那位大虾能帮我一下,
 
        现在的问题是当操作员按下F10,Alt等键时首先系统得到此消息希和了,程序就得不到此消息了。好像得下钩子,钩住系统的消息。

系统一次给不了150分,我在下个帖子里把分给补上。


[解决办法]
重载PreTranslate函数,在里面加判断:

if (WM_KEYDOWN == pMsg-> message)
{
if ((VK_F10 == pMsg-> wParam))
{
dosomething;
}
}
正解!
[解决办法]
你是要设置组合键:
首先:
RegisterHotKey(m_hWnd,0Xa002,MOD_CONTROL,VK_F1);
::SetFocus(m_hWnd);
其次:
BOOL CMySysHotKeyDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg-> message==WM_HOTKEY && pMsg-> wParam==0Xa002)
{
AfxMessageBox( "My MessageBox! ");
}
return CDialog::PreTranslateMessage(pMsg);
}
最后:
LRESULT CMySysHotKeyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_CLOSE)
{
::UnregisterHotKey(m_hWnd,0Xa002);
}
return CDialog::WindowProc(message, wParam, lParam);
}

[解决办法]
不要听那些用键盘钩子的...就会误导代人...有必要这么麻烦吗?

重载PreTranslate函数,在里面加判断:

if( pMsg-> message > = WM_KEYFIRST && pMsg-> message <= WM_KEYLAST )
{
if( pMsg-> wParam == VK_F1
&& ::GetKeyState( VK_CONTROL ) < 0/*用来判断CTRL是否按下*/ )
{
do..................
}//if
}
[解决办法]
例子代码:
BOOL CKeytestDlg::PreTranslateMessage(MSG* pMsg)
{
CString strMsg;
if (pMsg-> message == WM_SYSKEYDOWN)
{
short iii = GetKeyState(VK_MENU) & 0xff00;
strMsg.Format( "%s0x%X ", iii==(short)0xff00? "ALT+ ": " ", pMsg-> wParam);
//当F10或者ALT组合键按下时弹对话框
if ((iii == (short)0xff00 && pMsg-> wParam != VK_MENU) || pMsg-> wParam == VK_F10)
{
AfxMessageBox(strMsg);
}

}
return CDialog::PreTranslateMessage(pMsg);
}

热点排行