【问题标题】:CMDIChildWnd look & feel on Windows-10Windows-10 上的 CMDIChildWnd 外观
【发布时间】:2016-01-22 17:17:40
【问题描述】:

我有一个 MDI 应用程序。它已经发展了多年。在 Windows-7 上,一切看起来都是原生的。当我在 windows-10 上启动应用程序时,普通对话框将具有 windows-10 的外观和感觉。但所有子视图仍然具有 Windows-7 的外观和感觉。

我尝试从 CMDIChildWnd 更改为 CMDIChildWndEx,但它对窗口的外观和感觉没有任何影响(除了客户端矩形周围的另一种边框样式)。我不想将所有子视图都更改为停靠窗格,因为它会极大地改变用户体验。我只想让子视图具有原生外观。

这甚至可能吗?我可以轻松迁移到 docker 窗口并将它们配置为像普通窗口一样运行(根本没有停靠功能,最小/最大/恢复按钮)?

【问题讨论】:

    标签: c++ mfc windows-10 mfc-feature-pack


    【解决方案1】:

    默认情况下不这样做。 MDI 子窗口的默认实现只是以旧样式绘制窗口。

    查看 MFC Next 的源代码时,应该可以通过 OnNcPaint 实现它。

    CMDIChildWndEx 已经实现了 OnNcPaint。当您使用在 CMFCVisualManager::GetInstance()->IsOwnerDrawCaption() 上返回 TRUE 的样式时,标题和框架已由视觉管理器绘制。

    所有组件都在那里。也许强制 m_Impl.OnNcPaint 总是被调用就足够了。所以创建自己的 MDI 子窗口类并强制 MDI 系统使用它。 (请参阅您的文档模板类)。

    如果这还不够,您可以调用可视化工具的所有组件来自己绘制框架。

    PS:我刚刚在 BCG 实现中重新检查了它,我可以以不同的样式显示 MDI 子窗口。

    【讨论】:

    • 抱歉,您提到的 BCG 实现是什么?我可以在那里看一个例子吗?感谢您到目前为止的回答,我会试试的
    • BCG 只是微软购买并用于实现新的 MFC-Next 东西的产品,它是随 VS-2010 引入的。这只是一个评论,我如何检查解决方案。您可以在 void CMDIChildWndEx::OnNcPaint() 中找到当前的实现。你有源代码!
    • @xMRi 我没有找到任何按照您的建议绘制框架和标题的 CMFCVisualManager 派生类。如果没有这样的类,是否有任何 API 或 Windows-Style 可以创建 Windows 10 风格的 MDI 子窗口?
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多