我在使用vs2008的mfc开发wince程序时候遇到使用setwindowPos为主程序强制置顶失效的情况。
打开主程序后强制置顶生效,弹出模态对话框后,主窗体强制置顶失效。关闭模态对话框后,主窗体强制置顶又生效。
我怀疑是模态对话框阻塞消息导致主窗口置顶失效,我是一定要用模态对话框的,而且也要实现主窗体一直强制置顶的效果,但不知道应该怎么办,请高人帮忙!
mfc主窗口强制置顶会在模态阻塞时失效
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
解决方案: 由于模态对话框阻塞了消息,导致主窗口的置顶属性失效,可以通过以下方法来解决这个问题:
-
在主窗口类(CMainWnd)中添加成员变量
BOOL m_bIsModalDialogActive
,用于标识模态对话框是否处于激活状态。 -
修改
CMainWnd
类的OnCreate
事件,通过GWL_STYLE
和WS_EX_TOPMOST
设置主窗口为置顶窗口。添加以下代码:c++ SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE) | WS_EX_TOPMOST);
-
在
CMainWnd
类中,重写OnActivateApp
事件,并添加以下代码,用于更新m_bIsModalDialogActive
变量:c++ void CMainWnd::OnActivateApp(BOOL bActive, DWORD dwThreadID) { CWnd::OnActivateApp(bActive, dwThreadID); m_bIsModalDialogActive = !bActive; }
-
在模态对话框(CMyModalDlg)中添加成员变量
CMainWnd* m_pMainWnd
,用于保存主窗口的指针。 -
在模态对话框(CMyModalDlg)的构造函数中,接受主窗口指针,并保存到
m_pMainWnd
变量中:c++ CMyModalDlg::CMyModalDlg(CWnd* pParent, CMainWnd* pMainWnd) : CDialog(IDD_MYMODALDLG, pParent) { m_pMainWnd = pMainWnd; }
-
修改模态对话框的
OnInitDialog
事件,在对话框初始化完成后,通过SetWindowPos
函数将主窗口置顶。添加以下代码:c++ m_pMainWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
-
修改模态对话框的
OnDestroy
事件,在对话框销毁前,通过SetWindowPos
函数将主窗口恢复正常。添加以下代码:c++ m_pMainWnd->SetWindowPos(&CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
-
修改主窗口类(CMainWnd)的
OnShowWindow
事件,在窗口显示和隐藏时根据m_bIsModalDialogActive
变量决定是否将主窗口置顶。添加以下代码:c++ if (!m_bIsModalDialogActive) { if (bShow && !IsWindowVisible()) { SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); } else if (!bShow && IsWindowVisible()) { SetWindowPos(&CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_HIDEWINDOW); } }
通过以上步骤,将在模态对话框弹出时,主窗口依然保持置顶效果。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决评论 打赏 举报无用 1-
悬赏问题
- ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
- ¥15 电脑蓝屏logfilessrtsrttrail问题
- ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
- ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
- ¥15 Java+vue部署版本反编译
- ¥100 对反编译和ai熟悉的开发者。
- ¥15 带序列特征的多输出预测模型
- ¥15 Python 如何安装 distutils模块
- ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
- ¥15 资源泄露软件闪退怎么解决?