最近在搞一个项目,
有一个对话框使用Create()方法创建的,
但当选中对话框后,
点击“Enter”键,
对话框竟无缘无故的消失了,
想问一下这时怎么回事?
怎样修改代码,使得点击Enter键时,
对话框不会消失。

解决方案 »

  1.   

    重载该函数
    PreTranslateMessageBOOL CAFZBDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    char szName[128];
    long lStyle;
    memset(szName, '\0', sizeof(szName));

    GetClassName(pMsg->hwnd, szName, sizeof(szName));
    lStyle = ::GetWindowLong(pMsg->hwnd, GWL_STYLE);
        if(pMsg->message==WM_KEYDOWN)
        {
    if (strcmp(szName, "Button") == 0 || lStyle&ES_MULTILINE)
    {
    return CDialog::PreTranslateMessage(pMsg);
    }
            switch(pMsg->wParam)
            {
            case 0x0d: // CR
                pMsg->wParam=VK_TAB;
                break;
            case VK_DOWN:
                pMsg->wParam=VK_TAB;
                break;
            case VK_UP:
                keybd_event(VK_SHIFT,0,0,0);
                keybd_event(VK_TAB,0,0,0);
                keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
                keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
                break;
            }
        } return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    焦点在对话框上吗?用domodal看看
      

  3.   

    重载对话框的OnOK()函数,里面什么也不写
    CMyDlg::OnOK()
    {
    //什么也不写
    }对话框的默认焦点在OK按钮上
      

  4.   

    重载对话框的PreTranslateMessage函数,在其中
    BOOL C***Dlg::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_RETURN:
                         return TRUE;
                    }
                  }
              return CDialog::PreTranslateMessage(pMsg);
    }
    即可
      

  5.   

    gufengduyu(聪明的呆呆龙) ( ) 
    说得对
      

  6.   

    //CDialog::OnOk()注释掉这句就可以了