2010-07-12 103 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