2011-05-19 235 views
7

我想要做的事很簡單,但似乎並沒有很多關於它的信息。基本上我有一個正常的非透明父窗口,我想要在該父窗口內放置一個子窗口(它有自己的非透明控件)。所以我唯一要做的就是將子窗口的背景畫筆設置爲透明,但仍然繪製白色背景。嘗試使用WS_EX_LAYERED風格和SetLayeredWindowAttributes,但它使子窗口不可見。設置透明背景Win32

+0

可能重複:http://stackoverflow.com/questions/3970066/creating-a-transparent-window-in-c-win32 – 2011-05-19 11:23:23

+0

沒有。 Windows上的透明子窗口和透明頂層窗口的技術完全不同。 – 2011-05-19 11:56:18

回答

5

有兩種基本方式來實現在Windows「透明」的子控件:在父窗口

  • 手柄WM_CTLCOLORXXX消息。 這是使現有控件支持透明度的一種便捷方式。每個控件都會發送一個適合於控件類型的WM_CTLCOLORxxx消息。如果您創建了代表對話框背景皮膚的畫筆,並從每條消息中返回該畫筆,則淨效果就好像每個控件都塗有透明的外部區域。 但是,如果您想使用Alpha效果或使控件在物理上彼此重疊,則會失敗。

  • 在父窗口上使用WS_EX_COMPOSITED。 沒有這種風格,窗口管理器畫的子窗口的順序是不確定的,實際上是從上到下。當嘗試alpha混合重疊控件時,結果將是......不愉快的。 WS_EX_COMPOSITED將確保子窗口從下到上繪製。確保您不使用WS_CLIPCHILDREN或WS_CLIPSIBLINGS樣式,因爲這樣可以防止重疊區域被繪製。

你仍然需要做一些事情通過WM_CTLCOLORXXX消息巧妙的標準控件仍然會試着和對話框的背景灰色填充他們的整個矩形。