我創造什麼應該是一個非常簡單的Win32 C++應用程序誰是它唯一的目的,只顯示一個半透明PNG透明窗口。該窗口不應該有任何鉻,所有的不透明度應該在PNG本身進行控制。創建在C++中的Win32
我的問題是,當窗口下的內容改變,所以PNG的透明區域是「卡住」與窗下是什麼應用程序時最初啓動的窗口不會重新繪製。
這裏就是我建立新的窗口行:
hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 - 20, 40, 102, NULL, NULL, hInstance, 0);
對於調用RegisterClassEx,我有這樣的設置背景:
wcex.hbrBackground = (HBRUSH)0;
這裏是我的WM_PAINT消息處理程序:
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
Gdiplus::Graphics graphics(hdc);
graphics.DrawImage(*m_pBitmap, 0, 0);
EndPaint(hWnd, &ps);
break;
}
有一點要注意的是,應用程序總是停靠在t他屏幕並不動。但是,當用戶打開,關閉或移動它時,應用程序下面的內容可能會發生變化。
當應用程序首次啓動時,它看起來很完美。透明(和simi透明)的PNG部分顯示完美。但是,當應用程序下方的背景發生變化時,背景不會更新,它只是在應用程序首次啓動時保持不變。實際上,WM_PAINT(或WM_ERASEBKGND在後臺更改時不會被調用)。
我一直在玩這個相當長一段時間,並已接近了獲得100%正確的,但也不能令人信服。例如,我試着將背景設置爲(HBRUSH)NULL_BRUSH,我試過處理WM_ERASEBKGND。
可以做些什麼來獲取窗口時的內容下,它改變重繪?
SetBKMode和SetBKColor是我已經用於製造透明父控制的API。 – 2010-10-19 15:43:23