我想得到键盘按下和抬起的消息
BOOL CtempiDlg::PreTranslateMessage(MSG *pMsg)
{
//TODO : Add your specialized code here and /or call the base class if( pMsg->message == WM_KEYDOWN )
{
switch(pMsg->wParam)
{
case 81:
AfxMessageBox("q");break;
case 82:
AfxMessageBox("r");break;
case 83:
AfxMessageBox("s");break;
return TRUE;
}
}
if( pMsg->message == WM_KEYUP)
{
switch(pMsg->wParam)
{
case 81:
AfxMessageBox("q1");break;
case 82:
AfxMessageBox("r1");break;
case 83:
AfxMessageBox("s1");break;
return TRUE;
}
} return CDialog::PreTranslateMessage(pMsg);
}
编译和运行都可以通过,当我按下q的时候弹出一个对话框,但是松手的时候却没有反映,如果注释掉
pMsg->message == WM_KEYDOWN语句,pMsg->message == WM_KEYUP就有效果了,按下Q的时候没有反映,抬起的时候有对话框弹出,是不是这个两个键盘消息有什么冲突啊,不能一起反映,如果我想按下一个键盘键值的时候,运行指定程序,抬起的时候运行另外的程序,怎么处理这个消息啊!
还有我想问一下,怎么去掉按下键盘时的系统连续出现的声音,变成无声的。
BOOL CtempiDlg::PreTranslateMessage(MSG *pMsg)
{
//TODO : Add your specialized code here and /or call the base class if( pMsg->message == WM_KEYDOWN )
{
switch(pMsg->wParam)
{
case 81:
AfxMessageBox("q");break;
case 82:
AfxMessageBox("r");break;
case 83:
AfxMessageBox("s");break;
return TRUE;
}
}
if( pMsg->message == WM_KEYUP)
{
switch(pMsg->wParam)
{
case 81:
AfxMessageBox("q1");break;
case 82:
AfxMessageBox("r1");break;
case 83:
AfxMessageBox("s1");break;
return TRUE;
}
} return CDialog::PreTranslateMessage(pMsg);
}
编译和运行都可以通过,当我按下q的时候弹出一个对话框,但是松手的时候却没有反映,如果注释掉
pMsg->message == WM_KEYDOWN语句,pMsg->message == WM_KEYUP就有效果了,按下Q的时候没有反映,抬起的时候有对话框弹出,是不是这个两个键盘消息有什么冲突啊,不能一起反映,如果我想按下一个键盘键值的时候,运行指定程序,抬起的时候运行另外的程序,怎么处理这个消息啊!
还有我想问一下,怎么去掉按下键盘时的系统连续出现的声音,变成无声的。
楼主试试不要用弹出对话框,用TRACE代替在debug模式下看看,既有ouput窗口输出,也会响应KEYUP消息
焦点已经转移到MessageBox上了,当然就不响应WM_KEYUP