我程序中一个主对话框中包含一大堆不动子对话框,用于显示一些信息,但这些子对话框都接收回车、esc、ALT+F4等等可以直接关闭的消息,请问是否有一些简单的方法将这些东东去掉?

解决方案 »

  1.   

    可以用定时器,如果你的子对话框是模态,超时后给该对话框发IDOK或IDCANCEL消息,非模态就ShowWindow(SW_HIDE)。
      

  2.   

    重载OnOK,OnCancel,可以解决回车和esc的问题
      

  3.   

    如果当前活动窗口是主窗口,可以在PreTranslateMessage中过滤消息。子对话框也可以在PreTranslateMessage中过滤回车、esc、ALT+F4等等消息
      

  4.   

    同志们,我是想在主窗口中拦截主窗口中子窗口的回车、esc、ALT+F4消息,这样可以在子窗口类中不用对回车、esc、ALT+F4进行一一重复处理
      

  5.   

    BOOL CMyAAADlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    if( pMsg->wParam == VK_RETURN )
    return TRUE;
    if( pMsg->wParam == VK_ESCAPE )
    return TRUE;
    CString sss;
    sss.Format("%d",pMsg->wParam);
    MessageBox(sss);
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    但我觉得这样就可以使子窗口有响应VK_RETURN 和VK_ESCAPE 呀可是不可以请大家帮忙呀
      

  6.   

    我想自定义一个由CDialog继承来的类,以后的子对话框类都由这个类继承,但用向导建立的新的子对话框只能由CDialog继承,不能由定义对话框继承,如果由手工改动就会出现很多无法解释的错误请高手帮帮我呀
      

  7.   

    试试这个:
    if(pMsg->message==WM_KEYDOWN)
    {//hWndChildDlg1为你要过滤消息的子窗口句柄
      if( pMsg->hWnd == hWndChildDlg1)
      {
       if( pMsg->wParam == VK_RETURN )
    return TRUE;
       if( pMsg->wParam == VK_ESCAPE )
    return TRUE;
       CString sss;
       sss.Format("%d",pMsg->wParam);
       MessageBox(sss);
      }
    }
      

  8.   

    就是把你那些需要显示的子窗体都重载OnClose和OnOK
      

  9.   

    建意还是使让对话框由CDialog继承,如果共同的风格比较多且有组合的余地,则可以使用同一个对话框,其处理内容在对话框类里实现,这样作的代价会相对小一些,也是可行的。相信你可以轻面易举的把二十多个对话框变成五六个功能化的对话框,或者会更少