如题 :
动态创一个对话框,可否根据需要将此对话框风格在模态与非模态进行切换?

解决方案 »

  1.   

    对话框可以用一个类,只不过一个DoModal方式,一个Create方式
    不过对话框之间要数据交换
      

  2.   

    改变对话框的m_pParentWnd就可以了吧,domodal的dlg只是锁定这个m_pParentWnd
      

  3.   

    应该可以做到。就是有点麻烦。1. 把窗口建成非模态的。然后设置一个全局状态变量,用于标记当前窗口所趋向的模态/非模态状态。
    2. 改写主窗口消息循环,如果此全局状态量为表示模态,则屏蔽HWND不是此窗口的所有消息。当程序需要时,可以随时修改全局状态变量,以达到切换模态/非模态的目的。
      

  4.   

    CMyDlg 创建的对话框必须是new 出来的,或者是全局的
    class CMyDlg
    {
    public:
       BOOL m_bModal;public:
       int ShowMyDialog( BOOL bModal )
    {
      m_bModal = bModal;
      if ( m_bModal)
      {
          return DoModal();
       }
    else
      {
         Create( );
      }return 0;
    }
    // 在 OnOK 和 OnCancel 里面判断一下
     void OnOk()
    {
    if ( m_bModal )
     {
         CDialog::OnOK();
     }
      else
     {
       DestroyWindow();
     } 
    }OnCancel 也一样
    }
      

  5.   

    希望对一个对话框类对象操作,并且是运行时刻改变其模态,本来想使用SetWindowLongEX等,未果。
    试想SetWindowPos是否可行,
      

  6.   

    如果显示区域不可MOve 不能满足要求,有可能对话框挡住父窗口的交互部分
      

  7.   

    这个好办。
    点模态按钮的时候,直接把非模态的ShowWindow(SW_HIDE)掉,再DoModal()出来一个;
    点非模态的时候,直接调用模态的OnCancel(),之后把非模态的那个ShowWindow(SW_SHOW)出来。祝楼主成功!