BOOL CVendDlg::PreTranslateMessage(MSG* pMsg) 
{
if(pMsg->message == WM_KEYDOWN && pMsg->hwnd != NULL){
switch(pMsg->wParam){
case VK_UP:
IFB_SWON(pIFB, IDC_STATIC_CoffeMade01);
break;
case 0x32:
IFB_SWON(pIFB, IDC_STATIC_CoffeMade02);
break;
case 0x33:
IFB_SWON(pIFB, IDC_STATIC_CoffeMade03);
break;
case 0x34:
IFB_SWON(pIFB, IDC_STATIC_CoffeMade04);
break;
default:
break;
}
}
if(pMsg->message == WM_KEYUP && pMsg->hwnd != NULL){
switch(pMsg->wParam){
case VK_DOUP:
IFB_SWOFF(pIFB, IDC_STATIC_CoffeMade01);
break;
case 0x32:
IFB_SWOFF(pIFB, IDC_STATIC_CoffeMade02);
break;
case 0x33:
IFB_SWOFF(pIFB, IDC_STATIC_CoffeMade03);
break;
case 0x34:
IFB_SWOFF(pIFB, IDC_STATIC_CoffeMade04);
break;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}上面这段代码的功能是通过响应键盘的“up,2,3,4”分别代替对话框里的“IDC_STATIC_CoffeMade01,2,3,4”,这个时候这段代码是正常的,但是当我把“up”改成“1”的时候,一切就乱了,整体就都错了,原来正常的“2,3,4”的响应也都错了,我是百思不得其解啊,望有高手赐教!

解决方案 »

  1.   

    VK_UP改成0x31 ?没问题的。
      

  2.   

    我单步跟踪进去发现,用“up”的时候,如果先按“2(或者3,4)”,就只会响应到“KEY_UP",而"KEY_DOWN"的时候,接收到的“wParam”是错误的,但是如果先按下“up”的话,就是正常的,再按下“2,3,4”的时候,也都能响应到了。
    如果改成“1(0x31)”那就都是只能响应到“KEY_UP”了。
      

  3.   

    很奇怪!!
    如果不需要后面的CDialog::PreTranslateMessage(pMsg); 就在每块后面return true
    看得清楚一点
      

  4.   

    没人能帮我解答吗 
    也就是如果按数字键,KEY_DOWN时,接收不到正确的“wParam”,而KEY_UP时是可以的
      

  5.   

    我自己找到原因了,应该把“WM_KEYDOWN”改成“WM_CHAR”,貌似系统先产生的是WM_KEYDOWN     然后就是WM_CHAR   最后是WM_DEYUP   还有就是好像他们处理函数可以接收的键值类型不同。
    昨天晚上睡觉的时候想到的,今天一试还真行,嘿嘿。
    不过多谢“我是菜鸟”的关注,就把分给你了!