【问题标题】:Windows 7/8 Screen overlay VC++Windows 7/8 屏幕覆盖 VC++
【发布时间】:2013-08-22 15:34:33
【问题描述】:

我正在开发一个可以在 Windows 中显示诸如 OSD 之类的东西(图形、文本等)的应用程序。问题是我是windows编程的新手,找不到合适的解决方案。

我尝试过的:

1:我尝试使用WS_EX_LAYERED 标志创建分层窗口:

CreateWindowEx(WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST | WS_EX_TOOLWINDOW, szWindowClass, NULL, WS_POPUP | WS_VISIBLE | WS_SYSMENU, 0, 0, 0, 0, hWndDesktop, NULL, hInstance, NULL);

这种方法的问题是一切正常,我可以在屏幕上绘制任何图像或文本,直到我不在其他应用程序中全屏显示。例如播放视频。

经过大量搜索,我找到了解决我问题的其他解决方案:

2:Direct3D

我在 msdn:http://msdn.microsoft.com/en-us/library/windows/desktop/dd797814(v=vs.85).aspx 找到了一个代码示例和一个很好的教程,但是有一个问题(一如既往)。在我看来,它使用了并非所有显卡都支持的硬件覆盖。例如:ATI Radeon HD 6XXXX。但这正是我所需要的。

有谁知道不需要硬件支持的适当解决方案?还是我做错了什么?

【问题讨论】:

  • 只需使用OSD sample code 并按照您想要的方式进行调整。
  • 我从没想过我应该在音频相关示例中搜索示例 :) 谢谢!我看看这个。
  • 这与我在 1 中提出的解决方案完全相同。当 windows 媒体播放器处于全屏状态时,它有时有效,有时无效。我不知道为什么。
  • 这对我来说很奇怪,因为如果你全屏玩一些游戏,它可以工作,但不能用其他一些游戏。

标签: windows visual-c++ overlay direct3d


【解决方案1】:

我解决了这个问题。我希望它对某人有所帮助:

所以唯一的问题是在我绘制窗口后我没有将它带到前台。您可以通过拨打SetWindowPos 来完成。尽管此解决方案不适用于 Windows 8 Metro Surface。

【讨论】:

    【解决方案2】:

    你试过SetWindowsRgn吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多