HWND_TOPMOST的弹出式窗口始终在最前面

fendouzhe 2011-12-07 03:16:32
做了一个测试:
在一个基于对话框的程序里通过两个按钮显示两个弹出对话框,将其中一个子对话框设置为HWND_TOPMOST, 发现当切换到其他程序时,该子对话框仍然显示在最前,不知这是否正常?在网上看到一片帖子说,只要在创建对话框时指定其父窗口,就可以避免这种情况,试了一下,不可以,代码如下:
m_dlg1.Create(CDialog1::IDD,this);
m_dlg1.SetWindowText(_T("Diaogl1"));

m_dlg2.Create(CDialog1::IDD,this);
m_dlg2.SetWindowText(_T("Diaogl2"));

m_dlg1.SetWindowPos(&wndTopMost, 100, 100, 0, 0, SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOOWNERZORDER);
m_dlg2.SetWindowPos(this, 300, 300, 0, 0, SWP_NOSIZE|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOOWNERZORDER);

如果要实现在当前程序中始终在最前,但当切换到其他窗口时要隐藏,该怎么作?
还有一个问题就是,我发现弹出式子窗口总是显示在父窗口的前面,即使父窗口被激活,我想通过SetWindowPos函数将第一个参数设为父窗口的指针来避免这种情况(及当父窗口被激活时显示到前面),如对m_dlg2的调用,但是没成功,为什么?
...全文
652 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
csz429180 2012-01-11
  • 打赏
  • 举报
回复
SetWindowPos (&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
SetWindowPos (&CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
向立天 2012-01-06
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
fendouzhe 2011-12-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lgstudyvc 的回复:]

1正常

2到其它窗口后先修改他的属性,进入需要的置前的地方再修改属性TOPMOST
[/Quote]
这个属性的修改应该在什么地方呢?也就是说怎样判断是否切换到了其他程序呢?
lgstudyvc 2011-12-07
  • 打赏
  • 举报
回复
1正常

2到其它窗口后先修改他的属性,进入需要的置前的地方再修改属性TOPMOST

15,980

社区成员

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

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