【按鈕添加圖標(biāo)】
方法一:
1.添加圖標(biāo)資源IDI_ICON1;
2 使用函數(shù) LoadIcon() 載入圖標(biāo)。因?yàn)長oadIcon() 是類 CWinApp 的成員函數(shù),同時(shí)函數(shù) LoadIcon() 返回所載入圖標(biāo)的句柄。所以我們采用以下方法來調(diào)用函數(shù) LoadIcon():
HICON m_hicn1=AfxGetApp()->LoadIcon(IDI_ICON1);
3 為按鈕設(shè)置圖標(biāo)了,這通過調(diào)用函數(shù) SetIcon() 來實(shí)現(xiàn):
m_button1.SetIcon(m_hicn1); // m_button1是按鈕變量
方法二:
前兩步和上方法一樣;
3 先由函數(shù) GetDlgItem() 獲得一個(gè)指向 CWnd 對(duì)象的指針,再通過強(qiáng)制類型轉(zhuǎn)換將該指針轉(zhuǎn)換為一個(gè)指向 CButton 類對(duì)象的指針。進(jìn)而通過該指針來調(diào)用函數(shù) SetIcon()。具體實(shí)現(xiàn)代碼如下:
CWnd *pWnd = GetDlgItem(IDC_BUTTON1);
CButton *Button= (CButton *) pWnd;
Button-> SetIcon(m_hicn1);
【按鈕添加位圖】
1 添加位圖資源BMP1;
2 利用函數(shù) LoadBitmap() 從資源中載入位圖.
HBITMAP LoadBitmap(
HINSTANCE hInstance, // handle of application instance
LPCTSTR lpBitmapName // address of bitmap resource name
);
所以,為達(dá)到載入位圖的目的,不僅要定義一個(gè)位圖句柄 hBitmap,而且還要定義一個(gè)應(yīng)用程序?qū)嵗浔?hInstance,
并調(diào)用函數(shù) AfxGetInstanceHandle() 以獲得當(dāng)前的應(yīng)用程序?qū)嵗浔a如下:
HBITMAP hBitmap;
HINSTANCE hInstance = ::AfxGetInstanceHandle();
只有在聲明并獲得了當(dāng)前的應(yīng)用程序句柄后,才能使用以下語句載入位圖:
hBitmap = ::LoadBitmap(hInstance,"BMP1"); //BMP1是資源文件名
3 用SetBitmap()添加位圖;
m_button1.SetBitmap(hBitmap);
或
pWnd = GetDlgItem(IDC_BUTTON1);
Button= (CButton *) pWnd;
Button-> SetBitmap(hBitmap);
___________________________________________________
位圖按鈕的實(shí)現(xiàn)方法:
首先,我們創(chuàng)建一個(gè)基于對(duì)話框的應(yīng)用程序CmyDialog ;
Ι.MFC的CBitmapButton類,這也是最簡單的功能最強(qiáng)的位圖按鈕。我們可以采取如下的步驟:
1. 為按鈕指定唯一的按鈕標(biāo)題(此例子為OK按鈕,這里設(shè)置按鈕標(biāo)題為OK)并選中Ownerdraw屬性,然后在項(xiàng)目中加一些位圖資源,并用名字標(biāo)示這些資源而不要用數(shù)字ID,其ID分別為”OKU”、”OKD”、”OKF”、”OKX”(一定要加雙引號(hào)),分別對(duì)應(yīng)于按鈕的“松開(Up)”、“按下(Down)”、“獲得輸入焦點(diǎn)(focused)”和“禁止(Disable)”狀態(tài)。
2. 我們還要在對(duì)話框類中加入CBitmapButton m_aBmpBtn;數(shù)據(jù)成員。
3. 在初始化中為這個(gè)成員調(diào)用:
…
m_aBmpBtn. AutoLoad(IDOK,this);
…
點(diǎn)擊編譯按鈕,成功后運(yùn)行程序,我們的位圖按鈕已經(jīng)建立了。
改變CANCLE按鈕的標(biāo)題,可以設(shè)置其標(biāo)題為ICON或者BITMAP :(這里我們演示了bitmap的用法,Icon按鈕讀者可以按照下面的代碼處理)
CBitmapButton的使用
CBitmapButton作為MFC的控件類,并不為很多人所使用,因?yàn)楝F(xiàn)在網(wǎng)上遍布著從CButton派生的各種各樣的按鈕類,其中最為著名的就是CButtonST類了。但是最近在CSDN上看到幾個(gè)問題都是使用CBitmapButton類,但是由于使用錯(cuò)誤、不當(dāng)而造成程序崩潰或者錯(cuò)誤的。所以總結(jié)一下CBitmapButton類的使用,希望能幫助一些初學(xué)者。
可以參考MSDN自帶的例子“CTRLTEST”學(xué)習(xí)CBitmapButton的用法。個(gè)人總結(jié)如下:
1、在資源編輯的時(shí)候選中按鈕的Owner draw即可,不需要選擇Bitmap屬性!
2、在程序中定義一個(gè)CBitmapButton成員變量。不能使用ClassWizard為按鈕映射一個(gè)CButton變量,然后改為CBitmapButton,這么做并不能將按鈕直接映射為CBitmapButton類的對(duì)象,反而會(huì)出現(xiàn)初始化錯(cuò)誤。也不能兩種變量同時(shí)存在,會(huì)造成程序崩潰。
3-1、使用CBitmapButton::LoadBitmaps裝載各種狀態(tài)的圖片,使用SubclassDlgItem關(guān)聯(lián)到想要的按鈕,使用CBitmapButton::SizeToContent函數(shù)使按鈕適合圖片大小。。注意Loadbitmaps一定要在關(guān)聯(lián)到按鈕之前進(jìn)行!
3-2、或者是使用CBitmapButton::AutoLoad函數(shù)關(guān)聯(lián)到想要的按鈕。需要注意:
A、之前不能使用CBitmapButton::LoadBitmaps裝載各種狀態(tài)的圖片,否則會(huì)出錯(cuò)。
B、AutoLoad函數(shù)完成的關(guān)聯(lián)和改變按鈕大小的CBitmapButton::SizeToContent函數(shù)的功能。
C、CBitmapButton::AutoLoad使用的位圖是默認(rèn)資源ID的,即它會(huì)自動(dòng)裝載相關(guān)資源位圖。位圖的資源ID格式為:"按鈕Caption+U"、"按鈕Caption+D"、"按鈕Caption+F"、"按鈕Caption+X",分別代表Up、Down、Focus、Disable狀態(tài)。如資源編輯時(shí),希望關(guān)聯(lián)的按鈕的Caption為Test,那么其默認(rèn)裝載的位圖資源的ID為:"TestU"/"TestD"/"TestF"/"TestX",注意分號(hào)""也是其ID的一部分。
Ⅱ.使用圖標(biāo)制作按鈕
1. 打開ICON按鈕的屬性頁,在Style中選中Icon
2. 在對(duì)話框類的頭文件中定義成員變量(使用ClassWizard加入這個(gè)成員變量)
CButton m_IconBtn;//對(duì)應(yīng)于圖標(biāo)按鈕
3. 創(chuàng)建相應(yīng)的圖標(biāo)或者位圖資源:
圖標(biāo)資源:IDI_ICONBUTTON
4.在初始化中加入如下代碼:
…
//對(duì)應(yīng)于圖標(biāo)按鈕
HICON hIcon=AfxGetApp()->LoadIcon(IDI_ICONBUTTON);
m_IconBtn.SetIcon(hIcon);
…
重新編譯運(yùn)行我們的程序,奇妙的圖像按鈕呈現(xiàn)在我們的眼前了。
Ⅲ.使用位圖制作按鈕
1. 打開BITMAP按鈕的屬性頁,在Style中選中Bitmap。
2. 對(duì)話框類的頭文件中定義成員變量(使用ClassWizard加入這個(gè)成員變量)
CButton m_IconBtn;
3.創(chuàng)建位圖資源:
位圖資源:IDB_BITMAPBUTTON
4.在初始化中加入如下代碼:
//對(duì)應(yīng)于位圖按鈕
…
HBITMAP hBmp=::LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_ BITMAPBUTTON));
m_BmpBtn.SetBitmap(hBmp);
本文轉(zhuǎn)自:http://hi.baidu.com/lechie/item/dcbca9f4ee98a3d742c36ad4
posted on 2012-06-18 17:32
王海光 閱讀(1780)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
MFC