热情软件屋

 

WM_KEYDOWN消息中如何判断多个按键


编号:QA002779
建立日期: 2000年3月30日 最后修改日期:2003年7月27日
所属类别:

Old:
    操作系统:Win95OSR2
    编程工具:VC6
    问题:用ClassWizard生成的WM_KEYDOWN消息响应函数只能响应单个方向键按下的情况。但无法实现按下上、左就实现左45度的功能。请问怎样解决?

回答:

    在接受到WM_KEYDOWN消息的同时,调用GetAsyncKeyState(int vKey)来判断其他方向键的状态,vKey可以为VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT等等。
    
    袁波的意见:
    BOOL CMonDlg::PreTranslateMessage(MSG* pMsg)
    
{
    
if(pMsg->message== WM_KEYDOWN)
    
{
    
switch(pMsg->wParam)
    
{
    
case KEY_UP_PRESSED:
    
keystatus&= UP;
    
breake;
    
case KEY_DOWN_PRESSED:
    
keystatus&= DOWN;
    
breake;
    
case KEY_LEFT_PRESSED:
    
keystatus&= LEFT;
    
breake;
    
case KEY_RIGHT_PRESSED:
    
keystatus&= RIGHT;
    
breake;
    
default:
    
break;
    
}
    
}
    
else if(pMsg->message== WM_KEYUP)
    
{
    
case KEY_UP_PRESSED:
    
keystatus&= UP_RELEASED ;
    
breake;
    
case KEY_DOWN_PRESSED:
    
keystatus&= DOWN_RELEASED ;
    
breake;
    
case KEY_LEFT_PRESSED:
    
keystatus&= LEFT_RELEASED ;
    
breake;
    
case KEY_RIGHT_PRESSED:
    
keystatus&= RIGHT_RELEASED ;
    
breake;
    
default:
    
break;
    
}
    
................
    
    
switch(keystatus )
    
{
    
case DIR_UP:
    
UP_PROCESS;
    
breake;
    
case DIR_LEFT:
    
LEFT_PROCESS;
    
breake;
    
case DIR_UP_LEFT:
    
UP_LEFT_PROCESS;
    
breake;
    
.
    
.
    
.
    
.
    
.
    
.
    
default:
    
break;
    
}
    
    
.............................
    
}
    

此问题由wulin回答。

附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 键盘与鼠标, mouse, keyboard, hid

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio