如何使一个对话框在模态与非模态进行切换?在线等

lc2236 2009-09-25 11:18:32
如题 :
动态创一个对话框,可否根据需要将此对话框风格在模态与非模态进行切换?
...全文
142 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
z8y8x 2010-01-08
  • 打赏
  • 举报
回复
UP
lc2236 2009-09-25
  • 打赏
  • 举报
回复
try
{
楼上
}
WuXinyang 2009-09-25
  • 打赏
  • 举报
回复
这个好办。
点模态按钮的时候,直接把非模态的ShowWindow(SW_HIDE)掉,再DoModal()出来一个;
点非模态的时候,直接调用模态的OnCancel(),之后把非模态的那个ShowWindow(SW_SHOW)出来。

祝楼主成功!
lc2236 2009-09-25
  • 打赏
  • 举报
回复
实际应用中是这样的:

最初建立对话框时是模态的,状态的切换是在对话框中由用户决定的,即此对话框对父类有进行交互和进行屏蔽交互操作的双重需要。
lc2236 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fandh 的回复:]
将带有数据的对话框,创建成非模态对话框,同时,不能自己移动、没有标题什么的
然后,创建两个对话框,一个非模态、一个模态,显示后,将数据对话框显示出来挡在这两个对话框的客户区!
这样算下来,要3个对话框了!
[/Quote]
如果显示区域不可MOve 不能满足要求,有可能对话框挡住父窗口的交互部分
lc2236 2009-09-25
  • 打赏
  • 举报
回复
希望对一个对话框类对象操作,并且是运行时刻改变其模态,本来想使用SetWindowLongEX等,未果。
试想SetWindowPos是否可行,
marrco2005 2009-09-25
  • 打赏
  • 举报
回复
单单改变风格是无法实现的
marrco2005 2009-09-25
  • 打赏
  • 举报
回复
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 也一样
}
watergear 2009-09-25
  • 打赏
  • 举报
回复
应该可以做到。就是有点麻烦。

1. 把窗口建成非模态的。然后设置一个全局状态变量,用于标记当前窗口所趋向的模态/非模态状态。
2. 改写主窗口消息循环,如果此全局状态量为表示模态,则屏蔽HWND不是此窗口的所有消息。

当程序需要时,可以随时修改全局状态变量,以达到切换模态/非模态的目的。
allenhiman 2009-09-25
  • 打赏
  • 举报
回复
改变对话框的m_pParentWnd就可以了吧,domodal的dlg只是锁定这个m_pParentWnd
soliddream66 2009-09-25
  • 打赏
  • 举报
回复
有点意思,还没考虑过

也许可以换一个思维

不是从模态、非模态角度看,而是从能否切换的角度来看,或许有什么技术手段能够使非模态对话框不能切换,或者相反
oyljerry 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lc2236 的回复:]
re2 多谢回复
但主要考虑使用同一对话框类的数据,我想知道通过是否能够通过 改变窗口风格来实现,如果不能就想别的办法了
[/Quote]
对话框可以用一个类,只不过一个DoModal方式,一个Create方式
不过对话框之间要数据交换
fishion 2009-09-25
  • 打赏
  • 举报
回复
模态窗口只能关闭了才能够继续执行,非模态的就不用,如果需要数据一样的,最好就是把数据保存起来,当调用对话框时就把数据赋值到这个对话框上
fandh 2009-09-25
  • 打赏
  • 举报
回复
将带有数据的对话框,创建成非模态对话框,同时,不能自己移动、没有标题什么的
然后,创建两个对话框,一个非模态、一个模态,显示后,将数据对话框显示出来挡在这两个对话框的客户区!
这样算下来,要3个对话框了!
lc2236 2009-09-25
  • 打赏
  • 举报
回复
re2 多谢回复
但主要考虑使用同一对话框类的数据,我想知道通过是否能够通过 改变窗口风格来实现,如果不能就想别的办法了
周成风 2009-09-25
  • 打赏
  • 举报
回复
创建的方式不一样吧,应该可以实现。切换的时候如楼上所说,切换不频繁的话,可以直接销毁一个,创建另一个。
oyljerry 2009-09-25
  • 打赏
  • 举报
回复
可以做两个对话框,一个模态,一个非模态,切换的时候隐藏一个,显示另一个
allenhiman 2009-09-25
  • 打赏
  • 举报
回复
我的方法可行,实验了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧