我在一个dialog弹出窗口定义了几个输入,但是为什么我一按ENTER键窗口就自动执行ONOK函数,而不是等我输完所有的数才执行,如何禁用按ENTER键就执行onok()函数?

解决方案 »

  1.   

    BOOL CYourClass::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    switch(pMsg->message)
    {
    case WM_KEYDOWN:
    if(pMsg->wParam==VK_RETURN)pMsg->wParam=VK_TAB;
    break;
    default:
    break;
    }
    return CBaseClass::PreTranslateMessage(pMsg);
    //VK_RETURN表示回车键
      

  2.   

    重载CDialog::OnOK()成员函数最简单的方法如下:1、建立一个对话框,上面有“确定”和“取消”两个按钮;
    2、查看“确定”按钮的属性,发现是IDC_OK;3、双击“确定”按钮,弹出一个对话框,要求添加OnOK()函数的定义,点击确定进入源代码编辑区4、关键一步:  把定义中的 return CDialog::OnOK();删掉!   你也可以加入自己的代码,让它执行默认相关动作
      

  3.   

    void CYourDlg::OnOK() 
    {
    // CDialog::OnOK();
    }
      

  4.   

    覆盖父类OnOk即可.
    在其中作判断,必要时调用父类OnOk,否则直接return
      

  5.   

    这些问题好象有个FAQ总结过,你找找看
      

  6.   

    最简单的方法就是重载OnOk()函数并注释掉return CDialog::OnOk();这一行
      

  7.   

    BOOL CFight::PreTranslateMessage(MSG* pMsg) 
    {
    BOOL bReturn = FALSE;
        if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
        {//ESC
            bReturn = TRUE;
        }
        else if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 13)
        {//回车
            bReturn = TRUE;
        }
        else
        {
            bReturn = CDialog::PreTranslateMessage(pMsg);
        }
        return bReturn;
    }