今天俺创建了一个对话框程序先把那2个默认按钮删了,然后开始添加代码和控件,等做完以后俺测试的时候在编辑框中输入完数据一回车结果对话框没了,当时立马就不会了,当机了2、3秒立马想到可能是那2个按钮默认接受回车的属性没有去掉,我想请教各位会的人,教教俺,最好能一步一步的,俺笨,谢谢了。

解决方案 »

  1.   

    默认按钮有个“Default Button” 属性的
      

  2.   

    是你的的编辑框的问题,要挑上编辑框的 Want Return 属性
      

  3.   

    ES_WANTRETURN
    Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiline edit control in a dialog box. If you do not specify this style, pressing the ENTER key has the same effect as pressing the dialog box's default push button. This style has no effect on a single-line edit control. 应该是编辑框和Defult Button两个一块导致的.去掉Default Button属性,或者修改Default Button的消息响应,不退出程序。
      

  4.   

    对话框与其它窗口的不同点在于系统对return ,esc,tab等键做了特殊的处理,使它们在对话框中具有特殊的功能。如果不想要这些功能,可以重写对话框的PreTranslateMessage函数,如果是这几个键,不再调用基类的函数直接返回就行了。如果只是解决编辑框不能输入多行文本的问题,只要把文本框的want return设置为true就行了。
      

  5.   

    重载对话框的OnOK函数
    只写一句UpdateData()用来响应回车更新数据
      

  6.   

    在对话框的类中重载一个函数吧。
    CYourDlgClass::OnOK()
    {
    // 什么都不要写;
    {
      

  7.   

    方法很多,我再说一个,建一个按钮,设置为 默认按钮(default button属性打钩),然后隐藏起来即可
      

  8.   

    很简单啦!这是个经验问题。你在调整IDOK/IDCANCEL控件的Tab Order顺序就够了,使它的Tab Order顺序是不最小就可以了。做法:菜单->Layout->Tab Order,用鼠标选定,依选定的先后顺序,分别为1,2,3,4,,,,,,
    如果要从中间顺号重选,按住CTL或SHIFT。
      

  9.   

    在pretranslatemessage中拦截一下。BOOL
    CCommonScriptDialog::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if( WM_KEYDOWN == pMsg->message )
    {
    if( VK_ESCAPE == pMsg->wParam )
    {
    return TRUE;
    }
    else if( VK_RETURN == pMsg->wParam )
    {
    return TRUE;
    }
    } return CDialog::PreTranslateMessage(pMsg);
    }
      

  10.   

    双击默认的两按钮,产生单击按钮的消息处理.
    然后把OnOk(),OnCancel()注释了(也有可能消息处理函数没这两,那就不用管了)
      

  11.   


    正解 如果要使用到回车,就在return ture前操作
      

  12.   

    找到Dlg那个类,然后找到OnOK那个函数,把里面调用的这个CDialog::OnOK();注释掉就可以了。
      

  13.   

    重写对话框的OnOK函数,别让它返回CDialgo::OnOK();
    把按钮的Default属性去掉,换个ID,让它映射OnButtonOK()函数,在里面CDialgo::OnOK();
      

  14.   

    PreTranslateMessage,同样你还应该屏蔽掉空格键CTestDialog::PreTranslateMessage(MSG* pMsg) 
    {
        if( WM_KEYDOWN == pMsg->message )
        {
            if( VK_ESCAPE == pMsg->wParam )
            {
                return TRUE;
            }
            else if( VK_RETURN == pMsg->wParam )
            {
                return TRUE;
            }
        }    return CDialog::PreTranslateMessage(pMsg);
    }