2012-02-18 105 views
1

我試圖在屏幕上繪製(整個屏幕上,每個其他窗口的頂部)。
我通過NULL來的GetDC獲得HDC到屏幕上,然後用,爲了創造一個圖形對象,並使用的DrawRectangle到在屏幕上繪製矩形。
一切正常..除...矩形的內部不會更新。在屏幕上繪製與GDI +(或GDI)類似使用GDI +來檢查

一樣,如果我繪製了一個命令提示符,然後移動命令提示符下,矩形的內部保持黑色。 我期望看到矩形下面有什麼。

下面是正在做的繪圖代碼..

Pen BluePen(Color(255, 0, 255, 0), 2); 
Graphics graphics(screenDC); 
graphics.DrawRectangle(&BluePen, myRect); 

很簡單,所以是不是我有做的就是矩形的內部時,屏幕不更新?或者讓它真正透明。

=================編輯=================

好吧,我已經放棄了在此之前,並認爲這是不可能的,直到......我意識到Windows SDK附帶的Inspect工具完美地實現了這一點。

我想重建類似於亮點長方形的東西,如果我選擇一個窗口(如Firefox),然後將檢查成爲關注的焦點,我可以一切都完美地更新自由走動了。 甚至沒有任何閃爍。

所以......沒有人知道如何檢查管理做到這一點?

還回答在GDI而不是GDI +是細...

+0

矩形使用當前筆和當前畫筆。 – BitBank 2012-02-18 16:27:05

+2

您只能在窗口上畫畫。您需要一個分層窗口(WS_EX_LAYERED),透明鍵與窗口背景相同,請參閱UpdateLayeredWindow()。 – 2012-02-18 16:51:04

+0

@HansPassant謝謝,這正是我所需要的。 – Josh 2012-02-24 18:11:32

回答

3

在窗口屏幕上(和窗口...)表面(S)是...揮發性的,像沙箱。窗戶的「重疊」和未覆蓋的表面的重新繪製是適當的事件管理造成的錯覺。

一切都畫一直保留,直到別的東西上繪製它。 「揭開」表面使得表示該表面的窗口能夠接收WM_PAINT消息。這是由窗口程序來對這個信息作出反應,重新繪製一切應該在它之下。

現在,除非您以某種方式攔截髮送到桌面窗口的WM_PAINT消息,否則您幾乎沒有機會知道桌面需要重繪,因此您的繪製代碼將不會被調用,也不會重繪。或者更好的情況發生在桌面窗口更新代碼之後,它不知道你的畫圖。