CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

关于几个对话框弹出,显示层次的问题

楼主south2000(south2000)2006-03-17 09:33:37 在 VC/MFC / 界面 提问

我有一个主对话框MailDlg,里面有个消息机制,这个消息可以弹出一个非模态子对话框SubDlg1,SubDlg1出来时候就是最大化的,当然它弹出的时候,会自动显示在最上面,这是我需要的,也很容易实现。  
   
  MainDlg还有一个按钮,点击后会弹出另个子对话框SubDlg2,SubDlg2也是非模态的,在SubDlg2上面操作,符合一定条件的时候会用消息通知MainDlg,让MainDlg弹出SubDlg1,这个也已经实现了。  
   
  问题是,SubDlg1出现的时候,会自然盖在SubDlg2上面,这不是我希望的,我希望SubDlg1显示在SubDlg2下面。该怎么办?我对SubDlg1、SubDlg2是否是模态、非模态是无所谓的,两个子对话框出现时候是否激活也无所谓的。  
   
  注:  
  即使,我在SubDlg1的OnInitDialog()函数里面写上:SetWindowPos(&wndBottom,0,0,0,0,SWP_NOSIZE   |   SWP_NOMOVE);  
  SubDlg2的OnInitDialog()函数里面写上:SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOSIZE   |   SWP_NOMOVE);  
  也不能达到我的要求。  
   
   
  谢谢大家!  
  问题点数:20、回复次数:13Top

1 楼Elysium(東鱗覀爫)回复于 2006-03-17 09:48:08 得分 0

使用SetForegroundWindowTop

2 楼south2000(south2000)回复于 2006-03-17 11:11:56 得分 0

Elysium()  
   
  我在SubDlg2的OnInitDialog()函数里面写上  
  SetForegroundWindow  
   
  还是不能达到效果。Top

3 楼yangmajituipo()回复于 2006-03-17 11:25:04 得分 0

topmostTop

4 楼south2000(south2000)回复于 2006-03-20 09:02:32 得分 0

yangmajituipo()   ,  
  老大不知道你看没有看我写的东东啊,wndTopMost是已经用了的。Top

5 楼billy145533($_$)回复于 2006-03-20 09:08:24 得分 0

BOOL   SetWindowPos(   const   CWnd*   pWndInsertAfter,   int   x,   int   y,   int   cx,   int   cy,   UINT   nFlags   );    
  下一个弹出的窗口,使用pWndInsertAfter参数,将它插入到最前的对话框的后面  
  Top

6 楼cyblueboy83(爱情白痴—电脑迷)回复于 2006-03-20 09:11:27 得分 0

关注   
  Top

7 楼south2000(south2000)回复于 2006-03-20 10:18:40 得分 0

billy145533  
   
  我看不明白,能不能说详细一点啊,结合我说的例子。  
   
  谢谢!Top

8 楼billy145533($_$)回复于 2006-03-20 22:53:30 得分 0

pWndInsertAfter   代表了你要将你的对话框按z次序,插入到pWndInsertAfter   对象指向的窗口的后面  
  比如你的SubDlg1,SubDlg2  
  当你的subdlg2调用create后  
  调用   SubDlg2.SetWindowPos(&SubDlg1,0,0,0,0,SWP_NOSIZE   |   SWP_NOMOVE);  
  这样就可以了Top

9 楼billy145533($_$)回复于 2006-03-21 09:34:25 得分 0

本来SubDlg2弹出来会在SubDlg1之前  
  经过SubDlg2.SetWindowPos(&SubDlg1,0,0,0,0,SWP_NOSIZE   |   SWP_NOMOVE);  
  后,只能出现在SubDlg1之后  
  要注意的是SubDlg2和SubDlg1都不能是主对话框,否则上述无效Top

10 楼qkhhgutg(太子)回复于 2006-03-21 18:03:40 得分 0

接分Top

11 楼south2000(south2000)回复于 2006-03-22 08:44:27 得分 0

billy145533,谢谢你。  
  "要注意的是SubDlg2和SubDlg1都不能是主对话框,否则上述无效"  
   
  1   什么叫“都不能是主对话框啊”?  
   
  2   在SubDlg2中,没有办法得到“&SubDlg1”的呀,SubDlg1、SubDlg2是两个不同的对话框,同时也是两个不同的类。Top

12 楼aceouter(outer)回复于 2006-03-22 09:15:47 得分 0

主窗体记录下这两个对话框类的指针,然后,在显示了SubDlg1之后,通过SubDlg2的指针调用SetForegroundWindow。Top

13 楼billy145533($_$)回复于 2006-03-22 09:33:45 得分 20

1   什么叫“都不能是主对话框啊”?  
  __________________  
  通俗的讲,就是系统启动时候首先打开的那个对话框,它的关闭可以引起整个程序的结束.  
  这个和你的程序没有关系,可以不用理会  
   
  2.SubDlg2,与SubDlg1是不是同一个类没有关系  
  保存subdlg1的指针或者subdlg2启动的时候搜索SubDlg1  
  找到subdlg1后,调用函数  
   
  或者在  
  SubDlg2.create,  
  SubDlg2.ShowWindow()后  
  SubDlg1.SetActiveWindow();  
   
   
  Top

相关问题

  • 弹出对话框
  • 对话框弹出
  • 弹出对话框
  • ........弹出对话框
  • 如何让WindowsXP不显示错误信息弹出对话框
  • 为什么strxml=xmlhttp.ResponseText,alert(strxml)弹出的对话框显示undefined
  • 总弹出对话框显示“系统虚拟内存不足”?
  • 如何使 window.prompt 弹出对话框居中显示?
  • 对话框里Picture控件显示的图片被弹出的对话框挡住后不能恢复
  • 弹出对话框问题

关键词

  • 函数
  • 指针
  • 消息
  • subdlg
  • 对话框
  • 弹出
  • pwndinsertafter
  • swp
  • 模态
  • maindlg

得分解答快速导航

  • 帖主:south2000
  • billy145533

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo