2009-09-25 117 views
1

我有一個項目,該項目有三個對話框,假設A,B,C 和A所含的B & C,B包含C. 他們都是從DialogBase類 繼承並有setBitmap函數來設置背景圖片。爲什麼UI保持閃爍?

而且我添加了每次拖動C,B時都會拖動的關係。 和B是一個透明的對話框!

當onLbuttonDown被觸發時,我會設置這個 m_pParent-> ModifyStyleEx(0,WS_EX_TRANSPARENT);這使得B對話框是透明的。

問題是:如果我設置這個,對話框B是透明的,但是當我移動B時,它將保持閃爍。

但是,如果我評論 m_pParent-> ModifyStyleEx(0,WS_EX_TRANSPARENT); 然後對話框B將不會透明,但不會閃爍。

有人可以給我一個解決方案嗎?

回答

2

WS_EX_TRANSPARENT是一種難以理解的風格。這可能不符合你的想法。

當你爲一個窗口設置WS_EX_TRANSPARENT時,你並沒有告訴Windows使它透明 - 你告訴Windows你不會繪製整個窗口,所以它必須在繪製之前繪製窗口你的窗戶。你真正要做的就是將WM_PAINT消息的順序改變到各個窗口。

每當重新繪製對話框時都會看到閃爍。

如果您確實需要通過對話框B的背景來查看對話框A的部分,則可以在OnLButtonDown中執行一些特殊處理。首先將對話框B的可見性設置爲關閉,然後創建一個位圖,將其分配給DC,並將對話框A繪製到該DC。現在,您可以將對話框B設置爲可見,並且每次繪製它時,都會先將保存的位圖的相應部分複製到背景。