在 DesktopWindow 上绘制失败

Failed to draw on DesktopWindow

我尝试使用 GetDC(GetDesktopWindow) 在桌面 window 上绘制任何东西,例如以下简单程序:

#include <windows.h>

int main()
{
    TextOut(GetDC(GetDesktopWindow()), 10, 10, TEXT("Test TextOut Tester!!"), 21);
    return 0;
}

我当前的用户权限似乎影响了绘图行为,我在我的 PC 上不是管理员,是这个原因吗?这个问题有任何文件吗? 提前致谢

这是你应该做的:

HDC hdc = ::GetDC(NULL);

//draw on the desktop using the hdc

::ReleaseDC(NULL, hdc);

您无法像这样在桌面上绘图 window 的简单原因是您实际上看不到桌面 window。自 Windows 95 以来,桌面 window 已完全被 explorer 拥有的 windows 集群所遮挡。

调用GetDC(GetDesktopWindow())时获得的DC将因此被完全剪切。

如果你想直接在显示器上绘图GetDC(NULL)会给你一个DC,你可以用它在整个桌面上绘图并且可见windows。但是,正如已经提到的那样,它将完全在 Windows' 重绘逻辑之外运行,结果将非常丑陋并且不适合任何实际目的(除了从window您正在开发的应用程序较少)。

大多数想要 "display something on the desktop" 的应用程序通过创建 window 并在其上进行绘制来实现。为什么这里不合适?