无法在桌面窗口上绘制



我尝试使用GetDC(GetDesktopWindow)在桌面窗口上绘制任何内容,就像以下简单程序一样:

#include <windows.h>
int main()
{
    TextOut(GetDC(GetDesktopWindow()), 10, 10, TEXT("Test TextOut Tester!!"), 21);
    return 0;
}

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

您不能像这样在桌面窗口上绘制的简单原因是您实际上看不到桌面窗口。自Windows 95以来,桌面窗口已被资源管理器拥有的窗口集群完全遮盖。

因此,当您呼叫GetDC(GetDesktopWindow())时获得的 DC 将被完全剪辑。

如果要直接在显示器上绘制,GetDC(NULL)将为您提供一个 DC,可用于在整个桌面和可见窗口中绘制。但是,如前所述,这将完全在Windows的重绘逻辑之外运行,结果将是丑陋的,不适合任何真正的目的(除了,比如说,从你正在开发的无窗口应用程序获得某种调试反馈)。

大多数想要"在桌面上显示某些内容"的应用程序都是通过创建一个窗口并在其上绘制来实现的。为什么这里不合适?

这是你应该做的:

HDC hdc = ::GetDC(NULL);
//draw on the desktop using the hdc
::ReleaseDC(NULL, hdc);

最新更新