我定义了一个对话框CBtndlg,我想用对话框捕捉OnChar 消息,我就编写了下面的函数void CBtndlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
/*if(nChar==0X41)
{
  GetDlgItem(IDC_EDIT1)->GetNextWindow()->SetFocus();
  }*/
if(nChar==0X0D)
{
MessageBox("wo kao!!!");
}
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
发现我按下键盘Enter键没有调用OnChar函数,我设置断点发现按下Enter键没进入OnChar函数    请大虾们指点一下小弟,小弟在此谢过!!!!!

解决方案 »

  1.   

    按键后,系统调用的是自带的OnChar 函数吧,不是你这个对话框里自定义的OnChar 函数,除非,你的输入,是在你这个弹出的对话框里输入的
      

  2.   

    一般情况下对话框不处理WM_CHAR消息,你可以处理虚函数:PreTranslateMessage,在里面处理WM_LBUTTONDOWN消息
      

  3.   

    上面打快了,有点错,给个例子吧:
    BOOL MyDialog::PreTranslateMessage(MSG* pMsg)
    {
        if(pMsg->message == WM_KEYDOWN)
        {
           if( pMsg->wParam == VK_RETURN )
            {  
                //如果按下了回车键,则....
            }                }
            else if( pMsg->wParam == VK_TAB )
            {
                 //如果按下了TAB键,则
            }
             else if( pMsg->wParam == VK_ESCAPE )
            {
                //按Esc键时,相当于按窗口上有的EXIT按钮.
             }
            //other events        
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    OnKeyDown是所有键盘按下去都会触发,OnChar紧紧是可见字符的按键