首先建立一个基于对话框的程序重载PreTranslateMessage函数
在这个函数中检测是否按下回车按钮,当按下回车按钮后用MessageBox
弹出一个对话框A现在出现的问题是,如果用鼠标点击对话框A的确定,则没有问题
如果用回车按钮来确定这个对话框,则程序会再一次检测到回车键按下的消息
重而又弹出对话框A,形成一个死循环。这种情况应该怎么处理3x

解决方案 »

  1.   

    我这里没问题,你是这样做的吗?
    BOOL CDlgScrDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_KEYDOWN)
    {
    if(pMsg->wParam==VK_RETURN)
    {
    AfxMessageBox("test");
    return TRUE;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  2.   

    计算机只能忠实地执行代码,它不了解你的意思。
    从函数的字面上理解,它就是预先翻译(转换)消息,当你对回车键做了判断,而它又确实收到了这个消息,就弹出了A;
    其实用不着这个函数,在对话框的属性页选中STYLE的DEFAULT即可,当你回车时,相当于单击“确定”按钮。
    从你的叙述,我无法知道你到底想不想弹出A
      

  3.   

    其实默认情况下按下回车就是执行确定过程是调用OnOK()你把OnOK()重载掉,让他指向你的确定按钮对应的函数不就行了
      

  4.   

    BOOL CDlgScrDlg::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_KEYDOWN)
    {
    if(pMsg->wParam==VK_RETURN)
    {
    AfxMessageBox("test");
    return TRUE;
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }我是这样做的
    我的意图是,第一次按回车的时候,弹出对话框A.这时用回车来确定这个对话框。这个时候
    程序就不应该再次错误的弹出对话框A了。因此这个时候我是用回车来确定这个对话框,而不是要求程序重新弹出对话框A。重载OnOK函数是可以的。不过这里的消息处理机制好像有些奇怪了。是乎有一部份消息
    程序是不能在pretranslatemessage里面检测到的
      

  5.   

    return true是结束了本次的消息处理机制,但是用回车来确定弹出的对话框的时候又引发了下一次的消息处理过程
      

  6.   

    我试过了,不会产生死循环啊!,你重新建立一个Project,再写上我这些代码试一下
      

  7.   

    晕,你们试试检测WM_KEYUP呢,检测WM_KEYDOWN的时候好像不会
    WM_KEYUP就会的了
      

  8.   

    而且在OnOK函数里面也加入一个MessageBox弹出一个对话框检测WM_KEYDONW和WM_KEYUP的时候结果完全不一样。WM_KEYDOWN的时候
    就是正常的。先是在pretranslatemessage函数里面弹出一个对话框,按回车确定后程序就不会弹出对话框了如果检测WM_KEYUP的话,则会先调用OnOK里面的函数然后在pretranslatemessage里面又弹出一个对话框,这个时候如果用回车确定pretranslatemessage里面弹出的对话框的话就会死循环的
    怪事了
      

  9.   

    晕,那当然了,KEYDOWN把弹出对话框关闭了,KEYUP消息当然就发给了主对话框,楼主用错消息了
      

  10.   

    但是如果是检测wm_keyup的话。为什么OnOk会被调用呢。
    而且这里是相当于一个按键消息一个down一个up发给了两个窗口,太奇怪了
      

  11.   

    我明白了是wm_keydown调用了OnOK我又检测了up消息,明白了。不过对于一个键盘消息一个down一个up发给了两个窗口还是不太明白
      

  12.   

    应该不会啊,AfxMessage和MessageBox弹出的消息框都是模式的,所以你后来的回车键不会被原来的对话框捕捉到了啊