SetWindowText()函數(shù)會使靜態(tài)控件重繪,導(dǎo)致OnDrawItem()函數(shù)的調(diào)用。OnDrawItem()函數(shù)中的代碼與前面框架窗口例子中的類似,在此不再贅述.
在毛玻璃效果上繪制圖形
先前已提到,在毛玻璃區(qū)域中進行繪圖需要用到可識別alpha的API,如GDI+函數(shù)。下面的例子用到GDI+中的Image類在對話框的左上角繪制了一個Logo,這個Logo是從與exe文件在同一目錄的mylogo.png文件中讀取的,請注意,因為使用了GDI+繪制Logo,所以Logo周圍的透明度已被保留,并且看上去顯示得很正確。
使整個窗口毛玻璃化
我們還可以讓整個窗口看上去都像塊毛玻璃,以下有一段簡短代碼,只需把MARGINS結(jié)構(gòu)的第一個成員設(shè)為 -1就行了:
MARGINS mar = {-1};
DwmExtendFrameIntoClientArea ( m_hWnd, &mar );
如果在我們的對話框程序中加入這段代碼,留意觀察,4個按鈕上的文本顏色顯示不正確,并且每個按鈕外圍都有一個不透明的矩形。通常來說,透明性與子窗口不會配合得非常好,如果想要一個全為毛玻璃效果的對話框,那么控件部分就需要以一個不透明的背景來繪制,如"Windows Mobility Center"程序:
結(jié)論
在程序中添加毛玻璃效果可使程序在視覺上顯得非常與眾不同,而且能提供一個比通用控件中狀態(tài)欄更好的狀態(tài)顯示區(qū)域,本文主要是起到一個拋磚引玉的作用,也有助于大家在使用本地C++添加毛玻璃效果時,對DWM API有一個初步的了解。
在毛玻璃效果上繪制圖形
先前已提到,在毛玻璃區(qū)域中進行繪圖需要用到可識別alpha的API,如GDI+函數(shù)。下面的例子用到GDI+中的Image類在對話框的左上角繪制了一個Logo,這個Logo是從與exe文件在同一目錄的mylogo.png文件中讀取的,請注意,因為使用了GDI+繪制Logo,所以Logo周圍的透明度已被保留,并且看上去顯示得很正確。
使整個窗口毛玻璃化
我們還可以讓整個窗口看上去都像塊毛玻璃,以下有一段簡短代碼,只需把MARGINS結(jié)構(gòu)的第一個成員設(shè)為 -1就行了:
MARGINS mar = {-1};
DwmExtendFrameIntoClientArea ( m_hWnd, &mar );
如果在我們的對話框程序中加入這段代碼,留意觀察,4個按鈕上的文本顏色顯示不正確,并且每個按鈕外圍都有一個不透明的矩形。通常來說,透明性與子窗口不會配合得非常好,如果想要一個全為毛玻璃效果的對話框,那么控件部分就需要以一個不透明的背景來繪制,如"Windows Mobility Center"程序:
結(jié)論
在程序中添加毛玻璃效果可使程序在視覺上顯得非常與眾不同,而且能提供一個比通用控件中狀態(tài)欄更好的狀態(tài)顯示區(qū)域,本文主要是起到一個拋磚引玉的作用,也有助于大家在使用本地C++添加毛玻璃效果時,對DWM API有一個初步的了解。