使用Layered Window遇到的一些問題及解決方案

來源:互聯網
上載者:User

標籤:style   blog   color   使用   問題   line   

1. 使用Layered Window需要設定 WS_EX_LAYERED 屬性

2.  Layered Window不能作為Child Window

3. 它也不能包含子視窗,為什麼呢,因為它收不到WM_PAINT訊息,它上邊的子視窗顯示不了

4. 使用DrawText或者Graphics::DrawString,他們畫出的字是透明的,

    這個問題我不知道原因,但是解決方案很簡單:

    先將文字畫到一個記憶體位元影像上,然後使用Bitblt的方式將此記憶體位元影像拷貝到目標dc即可

5.  SetWindowRgn 方法失效了!!!

     這個問題同樣想不明白,但是解決方案也很簡單:

     LayeredWindow有一個性質,透明的部分,滑鼠可以穿透,即接收不到滑鼠訊息

     利用這個特性我們可以很容易製作異形視窗:

      1 // 先儲存舊的Clip地區

 2 RECT rcClip = { 0 };
 3 ::GetClipBox(hDC, &rcClip);
 4 HRGN hOldRgn = ::CreateRectRgnIndirect(&rcClip);
 5 
 6 // 先擷取需要顯示的地區
 7 HRGN rgn = getShowRgn();
 8 
 9 // 選擇繪圖的地區
10 ::ExtSelectClipRgn(hDC, rgn, RGN_AND);
11 
12 // 好了,開始畫圖吧,這裡只繪製rgn表示的地區,其他沒有繪製的地區保持透明,因此可以利用這個特性來製作圓角、箭頭等效果
13 doPaint();
14 
15 // 畫完之後,恢複Clip地區
16 ::SelectClipRgn(hDC, hOldRgn);
17 
18 // 最後釋放rgn
19 ::DeleteRgn(rgn);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.