C++ 直接绘制到屏幕上(如叠加)

标签 c++ windows directx gdi+ gdi

现在许多笔记本电脑都有 FN 热键来改变音量、亮度等,并且通常会在屏幕上完全显示操作系统上方的视觉提示。对于新的 Windows 8/8.1 系统,此视觉效果甚至会出现在 metro 端的桌面之外。他们不能在无边框窗口内绘图,否则它不会显示在地铁界面上。

我曾尝试研究 DirectX 是否可以直接在屏幕上绘制,但似乎不能。我什至不知道我是否应该研究 OpenGL...?

我使用 GDI 取得了一些的成功;具体是参数为NULL的GetDC函数,用于抓取屏幕设备。

#include <Windows.h>

int main() {
    const HDC dc = GetDC(NULL);
    while (1) {
        Rectangle(dc, 100, 100, 500, 500);
    }
}

但是,这需要反复重新渲染所有内容,因为我的屏幕区域可能会被背景中变化的其他窗口覆盖。即使它在循环中重新渲染,也会出现大量的屏幕闪烁。

这些笔记本电脑的 OEM 制造商如何实现这一目标?

谢谢。

最佳答案

看起来这些是无边框的窗口。 例如,查看任务切换器窗口:

Borderless Window

相关问题: Windows 8 Layered Windows Over Metro Apps

If you want a window on top of Metro, you need it to declare accessibility.

关于C++ 直接绘制到屏幕上(如叠加),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025098/

相关文章:

java - 从 Android Java 调用 ndk c++ 函数后,字符串得到一个奇怪的形式

python - 指向引用的指针使用 ctypes

c# - 如何在 winrt 中为圆形路径上的文本设置动画?

c++ - directx 上的一切都消失了

c++ - DirectX alpha 掩蔽

c++ - 内存处理(即函数 Release)究竟如何与 Direct3D 一起工作?

c++ - DirectXTK 在 "Mouse"中没有成员 "SetWindow(HWND hwnd)"

c++ - 丢失在 CUDA 设备指针中

python - 使用 distutil 将 list 嵌入 C 扩展 dll

linux - 在 Windows 上使用 Mingw 时出错