2010-05-16 85 views
0

時,我會盡量解釋我的問題盡我所能,窗戶被塗使用分層窗口

我創建一個在C分層的窗口++(使用的是WindowsXP),直到我將所有工作正常,我創建窗口附近的Windows開始按鈕,然後當我按下Windows任務欄的星形按鈕,並再次關閉它時,我的分層窗口下面的所有窗口都沒有被繪製(僅在窗口彈出我窗口的區域)。

我創建的窗口是這樣的:

的CWnd :: CreateEx(WS_EX_TOOLWINDOW | WS_EX_LAYERED, AfxRegisterWndClass(0), lpstr_name,WS_POPUP,0,0,0,0, pc_parent-> GetSafeHwnd(),0);

...

當我創建這個風格問題ocurrs窗口,但如果我與擴展樣式WS_EX_TRANSPARENT創建和所有其他人不發生任何更多的問題。如果不是WS_POPUP窗口是WS_CHILD或WS_OVERLAPPED那麼這也不會發生...

任何人都可以請解釋爲什麼當我創建一個WS_EX_LAYERED樣式的WS_POPUP窗口下面的所有窗口都沒有更新,如果我添加風格WS_EX_TRANSPARENT這工作正常。

注意:爲什麼我不使用WS_EX_TRANSPARENT風格,如果它工作正常?如果我使用它,然後我的窗口不能拖動,我需要做的吧:)

更新時間: alt text http://img17.imageshack.us/img17/586/clipboard01il.jpg

上面的圖片是爲了更好地描述所發生的事情: 圖像的第一部分你可以看到我的層疊窗口,下面是vs,在第二個img中,我按下開始按鈕,然後在最後一個圖像中,我已經將分層窗口拖到右側,你可以看到vs窗口沒有更新受影響的區域。 請注意,直到現在這種情況只發生在啓動窗口?!與其他Windows它不會發生!?...

感謝

回答

0

只在彈出了我的窗口

這是預期開始窗口的區域。只有該剪輯矩形被開始菜單遮蔽,所以只有該區域將被重新繪製。你期待什麼行爲?如果有更多上層窗戶覆蓋的窗戶,那麼它們也不會被重新粉刷 - 爲什麼重新塗刷一些東西只是爲了塗抹它?

如果您使用透明,所有在窗口下面的窗口都需要重新繪製,因爲如果不知道窗口顏色下面的區域,GDI無法計算像素的最終顏色。

+0

是的,當然,但我怎麼做到這一點。我希望所有窗口下面的窗口應該被通知繪畫更新,我不希望我的應用程序是將繪製窗口下方的應用程序,我期望系統會發送某種消息,以便讓它知道下面的窗口必須重繪是自己的內容。 我覺得你不明白我的問題,我只想知道女巫風格或擴展樣式允許這種情況發生。 – Nuno 2010-05-17 14:07:23

+0

@Nuno:爲什麼基礎窗口重繪?他們之上有一個窗口!無論他們畫的是什麼,當最頂層的窗口重新繪製時,都會被吹走。 – 2010-05-17 14:17:44

+0

正確的理解,但我能做些什麼來避免這種情況? (我更新了問題並添加了一個圖像,就像你看到的那樣,底層窗口需要重繪或不重視!)注意,如果我添加了WS_EX_TRANSPARENT擴展樣式,這將不會發生......這是我需要的,但是這種風格我不能拖動我的窗口,因爲它會被點擊 – Nuno 2010-05-17 14:28:36