我在对话框中有五个按钮,分别实现不同的功能。
我想除了可以用鼠标点击这五个按钮外,还可以用键盘的上下左右键控制。现在我可以用键盘控制了,但出现一个问题,就是对话框上的所有按钮都不能用鼠标点击实现其功能了。
各位大侠们快帮帮我吧。我实现键盘控制的代码是:
BOOL CRobotControl::PreTranslateMessage(MSG* pMsg) 
{
// TODO: Add your specialized code here and/or call the base class     this->SetFocus();
 if(pMsg->message==WM_KEYDOWN) //截获上下左右键的消息   
 {   
         switch(pMsg->wParam)   
 {   
             case VK_LEFT: 
                  OnLeft();   
                  break; 
  
             case VK_RIGHT:
                  OnRight();   
                  break;   
  
             case VK_UP:
                  OnUp();   
                  break; 
  
             case VK_DOWN:
                  OnDown();   
                  break;
  
 case VK_SPACE:
  OnStop();
  break;
 
 }   
 }   
   
     
return CDialog::PreTranslateMessage(pMsg);
}
在此先谢过了!

解决方案 »

  1.   

    应该是你return的时候错了,你定义的是BOOL CRobotControl::PreTranslateMessage(MSG* pMsg) 
    ,为什么返回的确是CDialog::PreTranslateMessage(pMsg); 呢?我直接重写虚函数:我的代码如下,没问题。void CAppDemoDlg::OnLeft() 
    {
    // TODO: Add your control notification handler code here
    MessageBox("Test Good!");
    }BOOL CAppDemoDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    switch(pMsg->wParam)
    {
    case VK_LEFT:
    OnLeft();
    break;
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    没看出问题,不知道onleft等几个函数都干了什么,不过对方向键的处理是不是就不要再传递给基类了
      

  3.   

    把你感觉兴趣的按键处理完成后,return ture.不用再调用基类了。
      

  4.   

    去掉this->SetFocus(); 这句代码试试
      

  5.   


    if(pMsg->message == WM_LBUTTONDOWN )
    {
    MessageBox("你点了鼠标!");
    }
    在不同的地方加上,看这里能捕捉到鼠标消息不。如果能捉到,你 又没有return ture说明问题不在这里。
      

  6.   


    不会呀
    我测试过
    如果加this->SetFocus(); 鼠标就失效了
    去掉后键盘消息照样可以接获到的
      

  7.   

    CRobotControl是你的主对话框类么?
      

  8.   

    我感觉在这里处理不是很好吧,直接处理WM_CHAR消息不可以解决问题吗?
      

  9.   

    我在对话框中有五个按钮,分别实现不同的功能。 
    我想除了可以用鼠标点击这五个按钮外,还可以用键盘的上下左右键控制。现在我可以用键盘控制了,但出现一个问题,就是对话框上的所有按钮都不能用鼠标点击实现其功能了。 
    各位大侠们快帮帮我吧。 我实现键盘控制的代码是: 
    BOOL CRobotControl::PreTranslateMessage(MSG* pMsg) 

    // TODO: Add your specialized code here and/or call the base class //    this->SetFocus(); // 多余
    if(pMsg->message==WM_KEYDOWN) //截获上下左右键的消息  
    {  
            switch(pMsg->wParam)  
    {  
                case VK_LEFT: 
                      OnLeft();  
                      return TRUE;
                      break; 
      
                case VK_RIGHT: 
                      OnRight();  
                      return TRUE;
                      break;  
      
                case VK_UP: 
                      OnUp();  
                      return TRUE;
                      break; 
      
                case VK_DOWN: 
                      OnDown();  
                      return TRUE;
                      break; 
      
                      case VK_SPACE: 
                      OnStop(); 
                      return TRUE;
                       break;            }  
    }  
      
        
    return CDialog::PreTranslateMessage(pMsg); 

    在此先谢过了!
      

  10.   


    CRobotControl不是主对话框。
      

  11.   


    我试过了,不行。
    this->SetFocus(); 如果去掉这句话,根本获取不到键盘消息。