在 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 并在其上进行绘制来实现。为什么这里不合适?
我尝试使用 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 并在其上进行绘制来实现。为什么这里不合适?