一个对话框程序,一个button正处于焦点。如何我一按回车就执行这个按钮的功能?相当于鼠标点击它,该怎么做?默认情况下,一按回车就要关闭对话框,但现在我改写了PreTranslateMessage()函数,使之不退出,但应如何进一步写,以便执行处于焦点状态的按钮程序呢?
if(pMsg->message == WM_KEYDOWN)
{
    if(pMsg->wParam==VK_RETURN)
    //???
}

解决方案 »

  1.   

    对于button来说,只要双击button,添加事件就好了。回车和鼠标单击效果是一样的。不需要pretranslatemessage。你如果使用默认的ok,cancel按钮,当然是会关闭的,你可以删掉他们,自己添加button。需要关闭的时候,添加OnOK();或者OnCancel();即可。
      

  2.   

    通过ModifyStyle为你的按钮加上BS_DEFPUSHBUTTON属性就可以了
      

  3.   

    通过ModifyStyle为你的按钮加上BS_DEFPUSHBUTTON属性就可以了,这样按回车也不会退出,就不用处理PreTranslateMessage()的
      

  4.   

    在ONOK的函数当中调用,GetFocus可以获得当前的焦点窗口的句柄,执行相应的函数不调用积基类的ONOK就可以了
      

  5.   

    正常情况下,windows应该就是触发获得交点的按钮的。
    如果没有获得焦点的按钮这个时候才会使用default button呢。
      

  6.   

    因为在对话框程序中,
    默认,回车按下就执行 CDialog::OnOK(),ESC按下就执行 CDialog::OnCancel(),
    你可以自己添加 
    CMyDialog::OnOK()
    {
    CDialog::OnOK();   然后把这行注释掉  即 //CDialog::OnOK();
    }
    这样再按回车就不会关闭对话框了,也会执行响应的按纽程序!
      

  7.   

    我说明一下:我用的那个按钮不是直接添加的,而是引用的别人的类,我不知道下面的代码是不是导致我的按钮一按就退出对话框的原因。??应如何修改?
    void CXPButton::PreSubclassWindow() 
    {
    // TODO: Add your specialized code here and/or call the base class

    CButton::PreSubclassWindow();
    ModifyStyle(0, BS_OWNERDRAW);
    }
      

  8.   

    那会是哪里的问题呀???我现在对话框上的按钮全是我后来加的(原来的那两个确定和取消都让我删除了),我也查了,在我的工程中根本找不到CDialog::ONOK()这样的语句来。那为什么即使某按钮处于焦点状态,一按回车,还是会关闭对话框呢?我新建了一个工程,把确定和取消钮删除后,再添加一个,当这个按钮处于焦点时,按回车就不退出,可我的那个????。