如何让几个Dialog同时显示?

chievo1 2011-08-25 10:42:14
我的程序架构是这样的:
1、底层是一个大的对话框, DlgBase;
2、这个对话框里面包括了3个小对话框,分别占据(覆盖)这个DlgBase的左、中、右3个区域。
而且是非模态对话框,在DlgBase的OnInit中Create
m_DlgLeft.Create()
m_DlgMid.Create()
m_DlgRight.Create()

3、有个按钮的功能是:使这3个子对话框显示出来。
m_DlgLeft.showWindow()
m_DlgMid.showWindow()
m_DlgRight.showWindow()

但是我发现,点击按钮后,这3个对话框存在一个从左到右逐步显示的一个过程,并不是同时显示出来的。
我尝试过改变这3个子对话框的showwindow()顺序,但是没用,还是从左到右刷新出来。

提问,有没有什么办法能同时把这3个对话框显示出来?
...全文
697 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-10-21
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
jianuMan 2011-10-01
  • 打赏
  • 举报
回复
最好先隐藏方式创建,等都创建完了 一起设置显示
blovesmallc 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 chievo1 的回复:]
我的程序架构是这样的:
1、底层是一个大的对话框, DlgBase;
2、这个对话框里面包括了3个小对话框,分别占据(覆盖)这个DlgBase的左、中、右3个区域。
而且是非模态对话框,在DlgBase的OnInit中Create
m_DlgLeft.Create()
m_DlgMid.Create()
m_DlgRight.Create()

3、有个按钮的功能是:使这3个子对话……
[/Quote]


楼主给一下,你那3个对话框,从左到右的显示的方法给我喂,你的方法正好是我想要的。。。。

Armyjack 2011-08-29
  • 打赏
  • 举报
回复
如果是单文档的MFC应用程序的话,可以在CMainFrame类的OnCreateClient函数中添加m_wndSplitter.CreateStatic(this, 1, 2);
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CCtrlForm),
CSize(605,605), pContext);
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CDataForm),
CSize(300,300), pContext);
这样的类似语句,就可以在运行是就同时显示出来。
Ginie 2011-08-29
  • 打赏
  • 举报
回复
用线程来操作,同时开线程应该可以
lzero13199 2011-08-26
  • 打赏
  • 举报
回复
那就同时先加载 完成后 再一起显示呗。。。。。
ttktw 2011-08-26
  • 打赏
  • 举报
回复
对话框设置为为隐藏属性,开始启动,完成耗时操作后,设置为显示
猿创日记 2011-08-26
  • 打赏
  • 举报
回复
可能可以~~

[Quote=引用 10 楼 gameslq 的回复:]
引用楼主 chievo1 的回复:
我的程序架构是这样的:
1、底层是一个大的对话框, DlgBase;
2、这个对话框里面包括了3个小对话框,分别占据(覆盖)这个DlgBase的左、中、右3个区域。
而且是非模态对话框,在DlgBase的OnInit中Create
m_DlgLeft.Create()
m_DlgMid.Create()
m_DlgRight.Create()

……
[/Quote]
Casbin开源社区 2011-08-26
  • 打赏
  • 举报
回复
三个线程分别显示应该可以解决此问题

另外我想借地方问下ShowWindow显示和MoveWindow显示的效率有什么不同吗?
gibsonboy 2011-08-25
  • 打赏
  • 举报
回复
就像1楼说的三个对话框有什么耗时的操作吗?假如是简单的界面操作应该不会出现这样的问题。
建议将你的三个对话框放到主对话框的OnSize用MoveWindow的方式显示和隐藏。点击按钮发送WM_SIZE消息就是了
Eleven 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chievo1 的回复:]
耗时的操作就只有 EraseBk了,每个dlg的绘图可能有100毫秒吧


引用 2 楼 visualeleven 的回复:

这个没办法吧,代码流程是依次往下执行的

关于这个问题:
我调整了ShowWindow的顺序,把右边Dlg放最先,Mid放其次,Lefe放最后,还是一样的效果。
m_DlgRight.showWindow()
m_DlgMid.showWindow()……
[/Quote]
你可以把绘图的操作给优化一下
chievo1 2011-08-25
  • 打赏
  • 举报
回复
补充一点, 这个从左到右逐渐显示的这个效果很短,大概500毫秒不到,
但是我还是想做的更好一点。

因为我看360界面,还有其他软件,这种多个对话框,都是同一时间显示出来的。

我在想,有没有办法让他们同时刷新。
dengzikun 2011-08-25
  • 打赏
  • 举报
回复
1.用CreateWindowEx + 对话框资源在同一个消息处理线程中创建你的三个对话框。
2. 或者用MFC在三个消息处理线程中分别创建。
chievo1 2011-08-25
  • 打赏
  • 举报
回复
耗时的操作就只有 EraseBk了,每个dlg的绘图可能有100毫秒吧

[Quote=引用 2 楼 visualeleven 的回复:]

这个没办法吧,代码流程是依次往下执行的
[/Quote]
关于这个问题:
我调整了ShowWindow的顺序,把右边Dlg放最先,Mid放其次,Lefe放最后,还是一样的效果。
m_DlgRight.showWindow()
m_DlgMid.showWindow()
m_DlgLeft.showWindow()
还是从左到右,逐渐显示的。


healer_kx 2011-08-25
  • 打赏
  • 举报
回复
依次? 有动画效果的? 那就Timer了。
Eleven 2011-08-25
  • 打赏
  • 举报
回复
这个没办法吧,代码流程是依次往下执行的
  • 打赏
  • 举报
回复
你的三个对话框有什么耗时的操作吗
gameslq 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 chievo1 的回复:]
我的程序架构是这样的:
1、底层是一个大的对话框, DlgBase;
2、这个对话框里面包括了3个小对话框,分别占据(覆盖)这个DlgBase的左、中、右3个区域。
而且是非模态对话框,在DlgBase的OnInit中Create
m_DlgLeft.Create()
m_DlgMid.Create()
m_DlgRight.Create()

3、有个按钮的功能是:使这3个子对话……
[/Quote]
每个窗口启动时是隐藏的,当都启动完毕再同时显示。

15,979

社区成员

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

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