为啥我的应用程序的窗口边框在 Windows 8 中是灰色的,而不是像其他窗口一样基于桌面?

Posted

技术标签:

【中文标题】为啥我的应用程序的窗口边框在 Windows 8 中是灰色的,而不是像其他窗口一样基于桌面?【英文标题】:Why is my application's window border grey in Windows 8, rather than being based off the desktop like other windows?为什么我的应用程序的窗口边框在 Windows 8 中是灰色的,而不是像其他窗口一样基于桌面? 【发布时间】:2012-12-01 00:47:18 【问题描述】:

我有一个大型遗留应用程序,它在我们运行它的每台 Windows 8 机器上显示为永久灰色边框,而其他应用程序的其他窗口准确地使用源自桌面背景的颜色。对于我的一生,我无法找出原因。

我已经尝试了我最好的 google-fu 来抓取 MSDN 以获取 API 来控制这一点,但结果是空的。该应用程序看起来与 Windows XP、Vista 和 7 中的所有其他应用程序一样......只是 Windows 8 是灰色的。我们绝对没有添加 Win8 特定代码来处理这个问题。

它在外面只是一个 MFC 窗口,但在里面嵌入了一个 .NET/WPF 组件和一个支持 Direct3D 9 的可视区域。

我最好的猜测是它可能与在窗口中有一个 Direct3D 表面有关,但我无法在任何地方验证。

任何帮助将不胜感激!

谢谢

编辑:灰色与没有焦点的效果相匹配,我们肯定会玩带有窗口焦点的游戏......所以可能就是这样。

【问题讨论】:

我没有解决方案。这是一段时间以来的已知问题:***.com/questions/12946642/… 我们可能有不同的问题。我没有从 CDialogEx 继承,当我最小化/恢复时,颜色对我来说仍然是灰色的。 【参考方案1】:

问题是开发人员重载了 OnNcActivate() 并在最后返回 TRUE。他们需要调用基类的 (CWnd) OnNcActivate。

如果您看得足够近,这在 Windows 7 上也是可见的。

【讨论】:

【参考方案2】:

Windows 8 中的桌面不像 Windows 7 和 Vista 使用 Aero 主题那样在窗口边框中使用透明度。如果您将焦点移动到应用程序中的另一个顶部窗口,这可以解释为什么您会看到灰色边框。尝试将没有焦点的窗口的颜色更改为可识别的灰色,以验证您所看到的是什么。

【讨论】:

以上是关于为啥我的应用程序的窗口边框在 Windows 8 中是灰色的,而不是像其他窗口一样基于桌面?的主要内容,如果未能解决你的问题,请参考以下文章

为啥无边框的 Kivy Window 会将内容向下和向右移动?

使用 for Qt 制作无边框窗口

为啥我的 NSWindow 第一次只接收 mouseOver 事件?

我的电脑在运行中总会出现“数据执行保护-Microsoft Windows”窗口,请问这是为啥?

为啥我的边框半径只出现在浏览器的边缘?

无框窗口出现边框