xjz199412 2023-10-13 15:42 采纳率: 50%
浏览 11

mfc主窗口强制置顶会在模态阻塞时失效

我在使用vs2008的mfc开发wince程序时候遇到使用setwindowPos为主程序强制置顶失效的情况。
打开主程序后强制置顶生效,弹出模态对话框后,主窗体强制置顶失效。关闭模态对话框后,主窗体强制置顶又生效。
我怀疑是模态对话框阻塞消息导致主窗口置顶失效,我是一定要用模态对话框的,而且也要实现主窗体一直强制置顶的效果,但不知道应该怎么办,请高人帮忙!

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-13 18:04
    关注

    【以下回答由 GPT 生成】

    解决方案: 由于模态对话框阻塞了消息,导致主窗口的置顶属性失效,可以通过以下方法来解决这个问题:

    1. 在主窗口类(CMainWnd)中添加成员变量BOOL m_bIsModalDialogActive,用于标识模态对话框是否处于激活状态。

    2. 修改CMainWnd类的OnCreate事件,通过GWL_STYLEWS_EX_TOPMOST设置主窗口为置顶窗口。添加以下代码: c++ SetWindowLong(m_hWnd, GWL_STYLE, GetWindowLong(m_hWnd, GWL_STYLE) | WS_EX_TOPMOST);

    3. CMainWnd类中,重写OnActivateApp事件,并添加以下代码,用于更新m_bIsModalDialogActive变量: c++ void CMainWnd::OnActivateApp(BOOL bActive, DWORD dwThreadID) { CWnd::OnActivateApp(bActive, dwThreadID); m_bIsModalDialogActive = !bActive; }

    4. 在模态对话框(CMyModalDlg)中添加成员变量CMainWnd* m_pMainWnd,用于保存主窗口的指针。

    5. 在模态对话框(CMyModalDlg)的构造函数中,接受主窗口指针,并保存到m_pMainWnd变量中: c++ CMyModalDlg::CMyModalDlg(CWnd* pParent, CMainWnd* pMainWnd) : CDialog(IDD_MYMODALDLG, pParent) { m_pMainWnd = pMainWnd; }

    6. 修改模态对话框的OnInitDialog事件,在对话框初始化完成后,通过SetWindowPos函数将主窗口置顶。添加以下代码: c++ m_pMainWnd->SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

    7. 修改模态对话框的OnDestroy事件,在对话框销毁前,通过SetWindowPos函数将主窗口恢复正常。添加以下代码: c++ m_pMainWnd->SetWindowPos(&CWnd::wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

    8. 修改主窗口类(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); } }

    通过以上步骤,将在模态对话框弹出时,主窗口依然保持置顶效果。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 修改了问题 10月13日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?