如何设置键盘响应函数?诸如同时按下 Ctrl 加 <-(左移)
  或同时按下  Alt +  -> (右移) 这样的复合系统消息键消息?以Ctrl加 <-(左移键)为例吧。怎么设置呢?
(在VC.net中添加消息函数)具体说一下步骤。谢谢。
我只会添加OnKeyDown()一类的单键消息。

解决方案 »

  1.   

    BOOL  CMydilog::PreTranslateMessage(MSG*  pMsg)    
    {  
     //  TODO:  Add  your  specialized  code  here  and/or  call  the  base  class  
       
     if  (pMsg->message  ==  WM_KEYDOWN)  
     {  
       switch  (pMsg->wParam)  
       {      
       case  VK_LEFT: 
         if(::GetKeyState(VK_CONTROL)  <  0)
           MessageBox("hello");  
         return  TRUE;  
           
       }  
     }  
     return  CDialog::PreTranslateMessage(pMsg);  
    }  
      

  2.   

    具体在哪操作添加这个函数呢?
    就像添加WM_KEYDOWN是在某个类的“属性”里面点击“消息”的小图标可以出现添加WM_KEYDOWN 函数一样,
    是不是直接在WM_KEYDOWN() 函数里面的case  VK_LEFT: 后面直接添加
    if(::GetKeyState(VK_CONTROL)  <  0)来判断VK_CONTROL的状态就行了呢?
      

  3.   


    不是在WM_KEYDOWN.
    对话框重载PreTranslateMessage(vc2003消息傍边不是有个"重写"小图标吗)
      

  4.   

    也可以加在WM_KEYDOWN处理函数中:
    void CMydilog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
             if(nChar==VK_LEFT&&::GetKeyState(VK_CONTROL))
    {
    MessageBox("left","test",MB_OK);
    }
             …………
    }
      

  5.   

    也可以加在WM_KEYDOWN处理函数中:
    void CMydilog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
             if(nChar==VK_LEFT&&::GetKeyState(VK_CONTROL))
    {
    MessageBox("left","test",MB_OK);
    }
             …………
    }
    这样也可以。不过却有个BUG
    就是在不按下Ctrl 键的情况下也会响应Ctrl+ ->键组合
    因为必须要再按一次Ctrl 键,if(GetKeyState(VK_CONTROL))才会失效