非模态对话框的问题?

sunrainy 2003-09-15 03:06:24
在主框架类里面定义了两个对话框对象
CDlg1 *p_dlg1;
CDlg2 *p_dlg2
主框架初始化时 创建了非模态对话框
p_dlg1= new CDlg1 ;
p_dlg1->Create(IDD_DLG_RECORD);
p_dlg1->ShowWindow(SW_HIDE);

p_dlg2= new CDlg2 ;
p_dlg2->Create(IDD_WATCH_DIALOG);
p_dlg2->ShowWindow(SW_HIDE);
应用程序中有两个按钮 button1 和 button2对应的函数就是将两个对话框打开
即button1 执行 p_dlg1->ShowWindow(SW_SHOW);
button2执行 p_dlg2->ShowWindow(SW_SHOW);
现在问题是:若两个对话框同时存在的话,必定是dlg2在dlg1前面,无论先打开谁!
为什么?有什么办法可以激活谁谁就在前呢?
...全文
12 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunrainy 2003-09-15
  • 打赏
  • 举报
回复
谢谢大家!
vcforever 2003-09-15
  • 打赏
  • 举报
回复
你产生的是两个非模态的对话框,这两个对话框只是在显示的时候
有先后的顺序,如果你要想让某个窗口变成当前窗口,只要用鼠标点
一下,他就是当前窗口了,或者用两个按钮分别控制显示窗口为当前窗口
按钮1
pDlg1->SetForegroundWindow();
按钮2
pDlg2->SetForegroundWindow();
这样就行了,祝你成功!
bcpl 2003-09-15
  • 打赏
  • 举报
回复
创建对话框时指定父窗口即可,把
p_dlg1->Create(IDD_DLG_RECORD);
p_dlg2->Create(IDD_WATCH_DIALOG);
改为
p_dlg1->Create(IDD_DLG_RECORD, this);
p_dlg2->Create(IDD_WATCH_DIALOG, this);

p_dlg1->Create(IDD_DLG_RECORD, GetDesktopWindow());
p_dlg2->Create(IDD_WATCH_DIALOG, GetDesktopWindow());
rockroll 2003-09-15
  • 打赏
  • 举报
回复
可以将dlg1和dlg2设置为child和none
这样就可以贴在原来的对话框上了
mfc168 2003-09-15
  • 打赏
  • 举报
回复
这就需要改变你的基类的显示方式了,CDlg1与CDlg2,根据你所说的情况,应该是CDlg2中有类似的设置always on top,你看一下两个基类的定义和设置情况然后进行改写

或者你定义两个同样的:p_dlg1= new CDlg1 ;p_dlg2= new CDlg1 ;
然后:button1 执行 p_dlg1->ShowWindow(SW_SHOW);
button2执行 p_dlg2->ShowWindow(SW_SHOW);
这样,你按哪个按钮,哪个就会显示了……
goodsong 2003-09-15
  • 打赏
  • 举报
回复
在 p_dlg->ShowWindow(SW_SHOW)之前
SetWindowPos(wndTop,...)
u2m 2003-09-15
  • 打赏
  • 举报
回复
SetWindowPos函数

15,979

社区成员

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

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