关于几个对话框弹出,显示层次的问题
我有一个主对话框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




