2010-07-12 105 views
3

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

UpdateWindow(GetDesktopWindow()); 

InvalidateRect(GetDesktopWindow(), NULL, TRUE); 

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

他们都不似乎工作,我只需要整个屏幕重绘。

+0

你为什么这样做所有这些事情到桌面窗口,而不是你自己的窗口?桌面窗口是显示你的壁纸的东西,其他窗口出现在它的顶部... – Cogwheel 2010-07-12 20:43:43

+0

因为我没有自己的窗口,我知道它做了什么。我正在使用桌面的手柄在桌面上绘画。 – Yonathan 2010-07-12 20:48:21

+1

为什么不创建一个全屏幕透明窗口? – onof 2010-07-12 20:51:53

回答

1

最好的方法可能是保存以前的像素状态/颜色并在移动像素时将其恢复。重画整个屏幕看起来太费事,浪费资源。

+1

我同意Jay ...随着全面刷新你的屏幕会闪烁疯狂! – bits 2010-07-12 20:46:04

+0

节省每一个像素的位置整个时间和变化将最有可能使一切非常慢,你不觉得吗?必须有某种方法来强制Windows重新绘制一个可以成为我所关心的前一个位置的部分。 – Yonathan 2010-07-12 20:49:18

2

如果你仍然想迫使整个桌面进行重新绘制,您可以使用

RECT rect; 
::GetClientRect(::GetDesktopWindow(), &rect); 
::RedrawWindow(::GetDesktopWindow(), &rect, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); 
+0

甚至不用'RDW_ERASENOW'而不是'RDW_ERASE'和'NULL'而不是':: GetDesktopWindow()'它正在工作! – sergiol 2017-10-10 14:50:22