點陣圖按鈕圖像包括圖像本身以及圖像的框線。框線在表示按鈕的不同狀態時很有用。例如,按鈕獲得焦點時的點陣圖與未按下(或正常)狀態的點陣圖相同,但是在框線中要么嵌入了由間斷線組成的矩形,要么嵌入了由 粗實線組成的矩形。禁止存取狀態的按鈕的點陣圖通常和正常狀態的一樣,但是顏色的對比度較小,就象變灰的選單選項一樣。
這些點陣圖的尺寸可以不同,但都當成和正常狀態下點陣圖一樣的大小處理。
不同的套用對點陣圖有不同的組合套用。如下所示:
未按下 | 按下 | 獲得焦點 | 禁止存取 | 套用 |
ⅹ | 類Bitmap | |||
ⅹ | ⅹ | 沒有設定WS_TABSTOP的按鈕 | ||
ⅹ | ⅹ | ⅹ | ⅹ | 帶有所有狀態的對話框按鈕 |
ⅹ | ⅹ | ⅹ | 設定WS_TABSTOP風格的對話框按鈕 |
在創建一個點陣圖按鈕控制項時,設定BS_OWNERDRAW則指明按鈕是自定義的(用戶自己繪製的)。這樣,Windows就會為該按鈕傳送WM_MEASUREITEM和 WM_DRAWITEM訊息,由框架處理這些訊息並維護按鈕的外觀。
在視窗的客戶區創建一個點陣圖按鈕的步驟如下:
1. | 為按鈕創建1到4個點陣圖。 |
2. | 構造CBitmapButton對象。 |
3. | 調用Create函式創建Windows按鈕控制項,並把它加到CBitmapButton對象上。 |
4. | 調用成員函式LoadBitmaps載入點陣圖資源。 |
1. | 為按鈕創建1到4個點陣圖。 |
2. | 創建一個對話框模板,其中有一個自定義的按鈕放在需要點陣圖按鈕的位置。模板中按鈕的大小無關緊要。 |
3. | 把按鈕的標題設定為“MYIMAGE”一類的字元串,並為按鈕定義一個類似於IDC_MYIMAGE的代號。 |
4. | 在套用的資源腳本中,分別為每個給該按鈕創建的圖像一個ID,ID的值為在步驟3中的標題後加上如下的一個字母——U、D、F或X,分別代表正常、按下、獲得焦點和禁止存取狀態下的按鈕。例如,標題設為“MYIMAGE”時,ID就應該是字元串("MYIMAGEU"、"MYIMAGED"、"MYIMAGEF"和"MYIMAGEX")。點陣圖的ID必須用引號括起來,否則資源編輯器就會為資源賦上一個整數值,MFC在載入圖像時就會失敗。 |
5. | 在套用的對話框類(從類CDialog繼承而來)中加上一個CBitmapButton成員對象。 |
6. | 在CDialog對象的OnInitDialog例程中調用CBitmapButton對象的AutoLoad函式,參數是按鈕的ID和CDialog對象的this指針。 |
類 CToolBar對點陣圖對象的實現有些不同。