我一直在Google上搜索幾天,我所得到的只是相同的答案,但不是我想要的(我將描述我以後不想要的東西)。MFC:如何避免在子控件更新中閃爍?
我要的是:
- 說我有了一些靜態控件的子控件父對話框。
- 父對話框在對焦時使用黑色作爲背景,而在未對焦時使用灰色。
- 孩子靜態控件只顯示文本,但它的背景需要遵循父母的背景色
問題:
- 我能得到孩子的控件始終跟蹤父的顏色但是更新顏色的過程很慢並且會導致閃爍。
- 當我將對話框放在焦點上時,我可以看到對話框的顏色從灰色變爲黑色,然後每個文本控件也從灰色變爲黑色。
- 這很慢,因爲它在嵌入式設備上。
雙緩衝將不起作用,因爲父母和孩子有自己的繪畫例程,所以我認爲不可能共享相同的緩衝區。我已經讀過WS_EX_COMPOSITE或其他一些適用於Vista的東西,但我在低端操作系統上。
我不需要什麼:
- 我已經知道如何重寫背景擦除程序(這就是爲什麼我已經得到控制,以更新)
- 我知道如何普遍使用CMemDC類,但正如所述,它不適用於我的情況。
任何想法,傢伙?我確信處理速度是其中的一部分,但我堅信這只是一種技術或設置,我沒有做到這一點。我記得我的第一臺PC是133MHz,但當他們的父母失去焦點時,我不記得Windows 95更新控制 - 他們幾乎立即更新。那時我甚至沒有一張好的視頻卡。
請幫忙。
增加: - 我試圖使控件的BkMode是透明的,甚至使用NULL_BRUSH。所有這些與ON_WM_CTLCOLOR一起。我得到的只是一個帶孔的對話框,在這些孔中是控制文本。換句話說,不是控件的背景,而是簡單地沒有繪製(如NULL_BRUSH所預期的那樣),但是該區域沒有被對話框的繪畫作業覆蓋。 - 我正在考慮刪除WS_CLIPCHILDREN,但是我相信這會導致控件無論如何被拖動,所以再次閃爍。
我不知道任何關於MFC的,所以請問如果這不是一個相關的問題,但它是不可能的只是設置子控件有一個透明的背景? –
啊,是的,我也想到了這一點。我會更新我的初始文章,以反映我曾經遇到的問題。 – Ryuu
您使用的是哪個版本的MFC和Visual Studio? – ChrisBD