我在Dlg上放了一个RichEdit,用起来不错,可是为什么想换行就Dlg消失了?? 
“确定”和“取消”按钮我已经删除了。want return也加上了,还是老样子啊。

解决方案 »

  1.   

    你的对话框响应基类的OnOK()后把自己关掉了在头文件里加上 void OnOK();
    在.cpp里加上
    void CXXXDlg::OnOK()
    {
       return;
    }
      

  2.   

    或者在PreTranslateMessage(MSG* pMsg)中
    把回车键屏蔽
      

  3.   

    键入Enter回车键被直接调用,解决方法重载基类的OnOK()。参见 :VC技术内幕第四版 Page 106
      

  4.   

    直接屏蔽onok函数还不行
    要在richedit中响应回车按钮
      

  5.   

    啊,你从VC知识库开发论坛跑到这来了。
    映射下面这个函数,并加入其中的代码试试,车后会自动转到下一控件
    BOOL CUnitinputdlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message == WM_KEYDOWN )
     {
    CWnd * m_pwnd = GetFocus(); 
    int  nID = m_pwnd->GetDlgCtrlID();
    if ( pMsg->wParam==VK_RETURN && nID != IDOK && nID != IDCANCEL )
     pMsg->wParam = VK_TAB;
     }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  6.   

    to shilong(星矢の诗龙)你说的没错。不过很奇怪啊,我已经删除了IDOK,为什么还要重载啊??
    to lingfeng8888(棱枫) 
     你的这段代码我知道,但是不适合这里用,换行换不了了!TMD学VC也有1年多了,到现在还是没有完整看过一本经典书!!东学一点西学一点总是不成系统。这么点小问题都搞不定。!!唉。
      

  7.   

    IDOK就是默认调用OnOK()啊
    你删不删它与被它调用的函数可没有关系
      

  8.   

    哦,既然是这样,那就得用shilong(星矢の诗龙)说的办法了。
    默认情况下,用户按回车和按ESC键对话框自动响应IDOK()和IDCANCEL(),虽然你没有映射这两个函数或将这两个控件都删除了,但系统仍会自动执行默认的IDOK()和IDCANCEL()。
    即然系统要默认执行它,你就映射它,把其中的CDialog::OnOK();这句屏蔽掉就可以不执行系统的默认动作了。