不行的OnChar是字符而enter和ctrl键都不是
在KeyDown中不成

解决方案 »

  1.   

    只判断回车我到知道if( nChar == VK_RETURN )但是怎么判断同时按下ctrl?
      

  2.   

    有两个办法:
    1,GetKeyState(UINT key);
     比如:
       if((nChar==VK_RETURN)&&GetKeyState(VK_CTRL))  //我不知道是否是VK_CTRL
       {
        }
    2,我认为最好的办法是 标志法( Flag)在OnKeyDown中 if(nChar==VK_CTRL) { bCtrlFlag=TRUE;}
     在OnChar中  if((nChar==VK_RETURN)&&bCtrlFlag==TRUE){ .....}
    在OnKeyUp中  if(nChar==VK_CTRL){ bCtrlFlag=FALSE;}这个方法对多个键同时按下都适用,思想也简单
      

  3.   

    要判断你得到WM_CHAR时的状态用GetAsynKeyState()
      

  4.   

    To: phoenix96_2000(Jack Of All Trades)  我是过了,这个方法不行!To: DoItFreely(Freely)   GetAsynKeyState和GetKeyState也不能判断同时按下ctrl和enter.
    我想要的效果就像QQ聊天时那样,按住ctrl再按enter。当这两个键都同时被按下时,执行一定的操作!
      

  5.   

    注意:在调试状态下总是假!
    我需要Ctrl+A全部选定,就是在得到A的WM_KEYDOWN时取的,你试一下在OnKeyDown里处理
      

  6.   

    phoenix96_2000(Jack Of All Trades)的方法行不通是因为他有一个错误:响应Return 键按下的消息函数应该是OnKeyDown()而不是OnChar(),因为按下control 的同时按return 会使OnChar()中return的字符码改变,不再是vk_return
    所以应为:有两个办法:
    1,GetKeyState(UINT key);
    比如:
    OnKeyDown()
    {
      if((nChar==VK_RETURN)&&GetKeyState(VK_CONTROL)<0)  
      {
        }
    }
    2,我认为最好的办法是 标志法( Flag)
    把bCtrlFlag初值赋FALSE
    在OnKeyDown中 if(nChar==VK_CONTROL) { bCtrlFlag=TRUE;}
    在OnKeyDown中  if((nChar==VK_RETURN)&&bCtrlFlag==TRUE){ .....}
    在OnKeyUp中  if(nChar==VK_CONTROL){ bCtrlFlag=FALSE;}这个方法对多个键同时按下都适用,思想也简单
      

  7.   

    BYTE key[255];
    GetKeyboardState(key);
    if(key[VK_SHIFT]&128)
     //got Shift pressed
      

  8.   

    ctrl+enter就是ANSI C控制符'\n',十六进制值0X0A