靜態控制項也是比較常用的控制項,在vs開發環境中用的應該挺頻繁的吧。
其實mfc中實現對視窗美化,主要依賴於重繪。static控制項也是個視窗,windows為其留有自繪的權利,可以設定其樣式為ss_ownerdraw,windows就會把其繪製權利交給我們的**,怎麼繪製就看我們的**了。mfc中更好的一種方式就是訊息反射,省的自己來做這一步操作了,我們過載cstatic中的drawitem方法,進行自繪,基本就可以了。其實如果自己在onpaint裡畫也是可以的(對於任何控制項視窗都可以的,只是麻煩或者有其他的問題)。
我們可以給cstatic中加入背景,畫成按鈕樣式,等等,可以模擬出其他的控制項(像cbutton),如果cstatic要響應事件我們可以加上ss_notify樣式,這樣父視窗就會把訊息傳遞到cstatic裡面來,要怎麼處理就看我們了。
下面看下具體怎麼做:
第一要設定繼承cstatic類,我們自己寫乙個static類,我給他起了cskinstatic的名字。
第二,設定其樣式為ss_ownerdraw,設定樣式可以在static控制項建立前後都可以,但要在其顯示前,我這裡在cskinstatic::presubclasswindow()中進行設定
presubclasswindow
void cskinstatic::presubclasswindow()
第三,就是過載drawitem,然後在裡面想怎麼畫就怎麼畫了。
drawitem
void cskinstatic::drawitem(lpdrawitemstruct /*lpdrawitemstruct*/)
這個繪圖稍有點麻煩,大致是這樣的 先建立記憶體兩個記憶體dc乙個作為畫布,另乙個負責引入,再拉伸拷貝到畫布dc上,最後畫布dc全部拷貝到視窗dc上。這主要是防止貼圖和寫文字不同步,造成有圖無字,也避免了乙個記憶體dc造成的字型拉伸。運用了網上盛傳的雙緩衝。
經過我們自己的**處理後,可以看看static成什麼樣了
當然可以自己畫個漸變色出來。不過個人覺得還是貼圖方便。
static控制項的美化比較簡單,沒有什麼多的訊息要進行處理。不過要想設定個性的,也得需要幾個狀態變數,多個吧。
基本的東西都很好做,如果想做好點細膩點,總會有點麻煩的。
CStatic控制項的基本使用
cstatic 繼承於 cwnd,是一種特殊的窗體。他可以顯示文字字串 這也是最常用的用法 圖示 指標 cursor 點陣圖和增強 元件.通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設定為 ss notify,他可以通知其父視窗的擊滑鼠事件。一。cstatic 用於顯示文字 如果文字不變,可以...
CStatic控制項的基本使用
cstatic 繼承於 cwnd,是一種特殊的窗體。他可以顯示文字字串 這也是最常用的用法 圖示 指標 cursor 點陣圖和增強 元件.通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設定為 ss notify,他可以通知其父視窗的擊滑鼠事件。一。cstatic 用於顯示文字 如果文字不變,可以...
CStatic控制項的基本使用
cstatic 繼承於 cwnd,是一種特殊的窗體。他可以顯示文字字串 這也是最常用的用法 圖示 指標 cursor 點陣圖和增強 元件.通常靜態控制項不提供輸入和輸出。但是如果把他的屬性設定為 ss notify,他可以通知其父視窗的擊滑鼠事件。一。cstatic 用於顯示文字 如果文字不變,可以...