CDialog上有其他控件check后,CDialog就不能再接受键盘消息了,也就是说,CDialog的OnKeyDown事件都不起作用了。那么我在这个控件响应函数oncheck()中用HWND hWnd = AfxGetMainWnd()->m_hWnd;得到窗口句柄,然后用::SetFocus(hWnd);得到窗口焦点,但是调试结果OnkeyUp()缺没有效果?
请教why?

解决方案 »

  1.   

    如果是对话框的就应该是:
    CDialog::PreTranslateMessage(MSG* pMsg)
    {
        if(pMsg->message==WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
               case VK_LEFT:
                 MessageBox("你按了左方向键");
               case VK_RETURN:
                 MessageBox("你按了回车键");
                 ...//你的处理代码
               ...
            }
         }
         .....
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    谢谢,不过我明白你所说的这些,指的是对键盘按下的响应处理,这个我已有函数处理。我问的是怎样在对话框窗口的某个控件上处理后,比如选择check,然后让键盘消息响应。一般而言,在有控件的对话框窗口上键盘消息是不能响应的吧。请问我上面的处理,先得到窗口句柄,然后得到窗口焦点,为何不行?谢谢
      

  3.   


    这是我的一段OnOK的重载,如果focus在哪一个CheCK或Button上时按回车时就作相应的操作!
    void CV0Dlg::OnOK()
    {
    CWnd * currentwin=GetFocus();
    if (currentwin==GetDlgItem(IDC_CHECK1))OnCheck1();
    else if (currentwin==GetDlgItem(IDC_CHECK2))OnCheck2();
    else if (currentwin==GetDlgItem(IDC_CHECK3))OnCheck3();
    else if (currentwin==GetDlgItem(IDC_BUTTON1))OnButton1();
    }