C++ C++;直接绘制到屏幕(如覆盖图)

C++ C++;直接绘制到屏幕(如覆盖图),c++,windows,directx,gdi+,gdi,C++,Windows,Directx,Gdi+,Gdi,如今,许多笔记本电脑都有FN热键来改变音量、亮度等,通常会显示一个视觉提示,并在操作系统上方的屏幕上呈现。对于新的Windows 8/8.1系统,这种视觉效果甚至出现在metro端的桌面之外。它们不能在无边界窗口内绘制,否则它不会显示在metro界面上 我曾尝试研究DirectX是否可以直接绘制到屏幕上,但它似乎不能。我甚至不知道我是否应该研究OpenGL 我使用GDI取得了一些成功;特别是带有参数NULL的GetDC函数,用于抓取屏幕设备 #include <Windows.h>

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

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

我使用GDI取得了一些成功;特别是带有参数NULL的GetDC函数,用于抓取屏幕设备

#include <Windows.h>

int main() {
    const HDC dc = GetDC(NULL);
    while (1) {
        Rectangle(dc, 100, 100, 500, 500);
    }
}
#包括
int main(){
const HDC dc=GetDC(NULL);
而(1){
矩形(dc,100100500500);
}
}
但是,这需要重复重新渲染所有内容,因为我的屏幕区域可能会被其他在后台更改的窗口覆盖。即使在循环中重新渲染,也会出现大量屏幕闪烁

这些笔记本电脑的OEM制造商是如何做到这一点的


谢谢。

看起来这些是无边界窗口。 例如,查看任务切换程序窗口:

相关问题:

如果您希望在Metro顶部有一个窗口,则需要它来声明可访问性


我会检查shell功能。请注意,直接呈现到屏幕上会产生大量的视觉伪影(由于一些破坏的假设)。它可以用来绘制悬停在桌面或任何背景上的二维/三维图形。Metro界面的核心当然也使用窗口管理器?如果你能抓住正确的窗口站/桌面手柄,我相信也可以在那里显示窗口。供应商的覆盖过程在哪个用户帐户下运行(系统帐户还是您自己的帐户)?DirectX和OpenGL没有帮助,因为在窗口模式下,它们基本上使用GDI。使用GDI,您可以在创建窗口时使用WS_EX_TOPMOST标志,使其位于所有其他窗口之上,但我不知道这是否适用于windows 8在Metro界面上绘制内容。CamStudio如何记录桌面?也许是你的机械装置?