我有一个 MDI 应用程序。它已经发展了多年。在 Windows-7 上,一切看起来都是原生的。当我在 windows-10 上启动应用程序时,普通对话框将具有 windows-10 的外观。但是所有 subview 仍然具有 Windows-7 的外观和感觉。
我尝试将 CMDIChildWnd 更改为 CMDIChildWndEx,但这对窗口的外观和感觉没有任何影响(客户端矩形周围的另一种边框样式除外)。我不想将所有 subview 更改为停靠 Pane ,因为它会极大地改变用户体验。我只想让 subview 具有原生的外观和感觉。
这可能吗?我能否轻松迁移到 docker 窗口并将它们配置为像普通窗口一样运行(根本没有停靠功能,最小/最大/恢复按钮)?
最佳答案
默认情况下不会这样做。 MDI 子窗口的默认实现只是以旧样式绘制窗口。
在查看 MFC Next 东西的源代码时,应该可以通过 OnNcPaint 实现它。
CMDIChildWndEx 已经实现了 OnNcPaint。当您使用在 CMFCVisualManager::GetInstance()->IsOwnerDrawCaption() 上返回 TRUE 的样式时,标题和框架已经由视觉管理器绘制。
所有组件都在那里。也许强制始终调用 m_Impl.OnNcPaint 就足够了。所以创建自己的 MDI 子窗口类并强制 MDI 系统使用它。 (请参阅您的文档模板类)。
如果这还不够,您可以调用可视化工具的所有组件自行绘制框架。
PS:我刚刚在 BCG 实现中重新检查了它,我可以用不同的样式显示 MDI 子窗口。
关于c++ - Windows-10 上的 CMDIChildWnd 外观和感觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33297775/