制作透明窗口, 使用透明圖片遇到的一個問題
?
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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态