我的视图中有一些自绘的图表,还有一些BS_AUTOCHECKBOX风格的button
如果不对这些button做任何操作时,我使用Ctrl+A,或者DEL键,
均能对这些图表进行选择或删除操作,
但是,如果我点击这些复选框后,就无法响应到键盘事件了,这是为什么?

解决方案 »

  1.   

    因为输入焦点切换到按钮上去了,需要切换回来。用SetFocus。
      

  2.   

    我觉得不是FOCUS的原因,因为,我对BUTTON进行操作后又用鼠标点击视图及视图中的图表,这时焦点已经回到视图上了,但是仍然无法响应键盘事件当我点击其他视图后,这个视图又能重新响应键盘事件了,请问这是为什么?
      

  3.   

    键盘响应的地方也没问题,
    我直接在OnKeyDown中加入MessageBox("OK");都没有任何反映
      

  4.   

    兄台,在哪个地方ReleaseCapture ???请指点迷津
      

  5.   

    我在复选框的WM_KILLFOCUS消息里添加了ReleaseCapture,但是视图仍然得不到键盘消息,只有当我在其他视图中进行鼠标点击,或者移动一下wndSplitter以后,该视图才能再次接收键盘消息
      

  6.   

    你可以到PreTranslateMessage()里面去截获消息,并处理
      

  7.   

    用这个接收键盘消息
    BOOL C***View::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(PMSG->message = WM_CHAR)
             {
                ..............
             }
             return CView::PreTranslateMessage(pMsg);
    }
      

  8.   

    用byry的方法可以响应键盘消息,但是,我怎么才能知道是按下了Ctrl+A还是DEL或者是其他按键得消息呢?请问byry和ymbymb!
      

  9.   

    BOOL C***View::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_DELETE:
    ...
                              break;
                      case 'A':
                               ...
                              break;
                      default:
                              break;
             }
        }
    }
      

  10.   

    判断是否有Ctrl+A:
    BOOL C***View::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
        if(pMsg->message == WM_KEYDOWN)
        {
    short state;
             state = GetKeyState(VK_LCONTROL | VK_RCONTROL);
             switch(pMsg->wParam)
    {
    case VK_DELETE:
    ...
                              break;
                      case 'A':
                              if(state & 0x8000) 
                              {
                                   //CTRL+A is pressed
                               }
                              break;
                      default:
                              break;
             }
        }
    }