强制Windows重新绘制整个屏幕

3

我目前正在使用GDI绘制图形,但我需要能够重新绘制整个桌面/屏幕。我的图形是在屏幕上绘制的,但当我移动一个绘制的像素时,它会变成一条线,因为我没有重新绘制屏幕(好吧,Windows没有)。我需要一些东西来强制重新绘制整个屏幕,我已经尝试了以下方法:

UpdateWindow(GetDesktopWindow() );

InvalidateRect( GetDesktopWindow(), NULL, TRUE );

SendMessage( GetDesktopWindow(), WM_PAINT, NULL, NULL );

这些方法似乎都不起作用,我只需要整个屏幕重新绘制。


你为什么要对桌面窗口进行所有这些操作,而不是你自己的窗口?桌面窗口是显示你的壁纸和其他所有窗口都出现在其上方的东西... - Cogwheel
因为我没有自己的窗口,而且我知道它的作用。我正在使用桌面句柄在桌面本身上绘图。 - Yonathan
1
为什么不创建一个全屏透明窗口? - onof
我会看一下,但是我希望它没有表单/窗口。 - Yonathan
请告诉我你正在开发的应用程序,这样我以后可以避免使用。在不拥有窗口的情况下进行绘图只会引来麻烦。 - Mark Ransom
3个回答

2
如果您仍想强制整个桌面重新绘制,您可以使用:
RECT rect;
::GetClientRect(::GetDesktopWindow(), &rect);
::RedrawWindow(::GetDesktopWindow(), &rect, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);

即使使用RDW_ERASENOW替换RDW_ERASE,并使用NULL替换::GetDesktopWindow()也无法解决问题! - sergiol

1

您可以将 hWnd 设置为 NULL,然后使用 RedrawWindow


1
可能最好的方法是保存先前的像素状态/颜色,并在移动像素时恢复它。重新绘制整个屏幕似乎太费力了,也是资源的极大浪费。

1
我同意Jay的观点...全屏刷新会让你的屏幕疯狂闪烁! - bits
保存每个像素的位置始终保持变化,很可能会使一切变得非常缓慢,你不觉得吗?肯定有一些方法可以强制Windows仅重新绘制一个部分,这可以是我关心的先前位置。 - Yonathan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接