gdi+window,GDI+ 透明窗口.UpdateLayeredWindow

 2023-10-07 阅读 18 评论 0

摘要:制作透明窗口, 使用透明圖片遇到的一個問題 ? 1: 添加 PNG?資源 失敗. 答: 先添加PNG資源組, 然后導入圖片. ? 2: 顯示成功加載資源, 資源成功載入內存, 但是加載到Image類的時候, 返回空指針. 答: 可能是忘了 初始化GDI+了. GDI+ 的所有功能使用之前 必須先調用 Gdip

制作透明窗口, 使用透明圖片遇到的一個問題

?

1:

添加 PNG?資源 失敗.

答: 先添加PNG資源組, 然后導入圖片.

?

2:

顯示成功加載資源, 資源成功載入內存, 但是加載到Image類的時候, 返回空指針.

答: 可能是忘了 初始化GDI+了. GDI+ 的所有功能使用之前 必須先調用 Gdiplusstartup()函數初始化好.

?

3:

在使用內存DC時,

?? ?如果是在GDI下, 我們使用bitblt函數, 把內存緩存更新到目標緩存里

??? 如果是想制作透明窗口, 則使用UpdateLayeredWindow函數.

?

4:

?? UpdateLayerdWindow函數功能異常強大

?? UpdateLayeredWindow(
??? m_hWnd,????????????????????????????// :當前窗口的句柄
??? hdcDlgDC,???????????????????????? // :當前窗口的DC
??? &ptWinPos,?????????????????????? // :當前窗口在屏幕的左上角位置(相當于 ::SetWindowPos()函數)
????&sizeWindow,???????????????????// :當前窗口在的寬度和高度
??? m_hdcMemory,???????????????? // :內存緩存DC
??? &ptSrc,??????????????????????????????// :內存緩存的左上角坐標(可用于裁剪內存緩存)
???? 0,
???? &m_Blend,??????????????????????? // 混合樣式
???? 2);

?

5:

?? 關于混合樣式
?? ?m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
? ? m_Blend.BlendFlags=0; //nothingelseisspecial...
??? m_Blend.AlphaFormat=1; //...
?? ?m_Blend.SourceConstantAlpha= 1~255; // :該選項控制著整個窗口的透明度. 1為完全透明, 255為完全不透明(?即使窗口完全不透明, 如果里面的圖片有透明屬性, 仍能夠透明?)

6:
調用UpdateLayerdWindow之前, 要給窗口加上 0x80000樣式. 否則無效.
?DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
?if((dwExStyle&0x80000)!=0x80000)
??SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);

?

7:
Guiplus::Graphics 類提供了功能強大的 DrawImage 具體如何把一個Image類Draw到Graphics掌握的HDC上, 查看guiplus 幫助文檔

8:
GDI和GDI+ 不變的是 HDC,他們都要把東西畫到一個DC上.
所以, 初始化Guiplus::Graphics時, 要給其綁定一個DC,一般是綁定到內存dc上.
Graphics graph(m_hdcMemory);

除了加入了一些新的圖像算法之外, GDI+和GDI的差別在于
GDI: 面向句柄(HDC)編程
GDI+面向對象編程. HDC是其的一個內部變量.

VCKBASE上有例子. 可以找找看.

?

轉自:http://blog.csdn.net/zdl1016/article/details/3298744

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/128297.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息