分享方式:


CBitmapButton 類別

建立以點陣圖影像 (而非文字) 標記的按鈕控制項。

語法

class CBitmapButton : public CButton

成員

公用建構函式

名稱 描述
CBitmapButton::CBitmapButton 建構 CBitmapButton 物件。

公用方法

名稱 描述
CBitmapButton::AutoLoad 將對話框中的按鈕與 類別的對象 CBitmapButton 產生關聯、依名稱載入點陣圖,以及調整按鈕大小以符合點陣圖的大小。
CBitmapButton::LoadBitmaps 從應用程式的資源檔載入一或多個具名點陣圖資源,並將點陣圖附加至物件,以初始化物件。
CBitmapButton::SizeToContent 調整按鈕的大小以容納位圖。

備註

CBitmapButton 物件包含最多四個位陣圖,其中包含按鈕可以假設的不同狀態影像:向上(或正常)、向下(或選取)、焦點和停用。 只需要第一個位圖;其他則是選擇性的。

位圖按鈕影像包括影像周圍的框線,以及影像本身。 框線通常會扮演顯示按鈕狀態的一部分。 例如,焦點狀態的位圖通常就像是向上狀態的點陣圖,但框線中的虛線矩形內嵌,或框線的粗實線。 停用狀態的位圖通常類似於向上狀態的點陣圖,但有較低的對比(例如暗灰色或灰色功能表選取專案)。

這些點陣圖可以是任何大小,但所有點陣圖的大小都視為與向上狀態的點陣圖相同。

各種應用程式需要不同組合的點陣圖影像:

Up Down 焦點 已停用 申請
× 點陣圖
× × 沒有WS_TABSTOP樣式的按鈕
× × × × 具有所有狀態的對話框按鈕
× × × 具有WS_TABSTOP樣式的對話框按鈕

建立點陣圖按鈕控制項時,請設定BS_OWNERDRAW樣式,以指定按鈕為擁有者繪製。 這會導致 Windows 傳送按鈕的WM_MEASUREITEM和WM_DRAWITEM訊息;架構會處理這些訊息,併為您管理按鈕的外觀。

在視窗的工作區中建立位圖按鈕控制件

  1. 為按鈕建立一到四個位圖影像。

  2. 建構 CBitmapButton 物件。

  3. 呼叫 Create 函式來建立 Windows 按鈕控件,並將它附加至 CBitmapButton 物件。

  4. 呼叫 LoadBitmaps 成員函式,以在建構位圖按鈕之後載入點圖資源。

在對話框中加入位圖按鈕控制件

  1. 為按鈕建立一到四個位圖影像。

  2. 使用您要點陣圖按鈕的位置,建立具有擁有者繪製按鈕的對話框範本。 範本中按鈕的大小並不重要。

  3. 將按鈕的標題設定為 「MYIMAGE」 之類的值,並定義按鈕的符號,例如IDC_MYIMAGE。

  4. 在應用程式的資源腳本中,將其中一個字母 「U」、“D”、“F” 或 “X” (針對向上、向下、焦點和停用)附加至步驟 3 中按鈕標題所使用的字符串,為按鈕建立的每個影像提供一個標識符。 例如,對於按鈕標題 「MYIMAGE」,標識碼會是 「MYIMAGEU」、“MYIMAGED”、“MYIMAGEF” 和 “MYIMAGEX”。您必須在雙引號內指定點陣圖的識別碼。 否則,資源編輯器會將整數指派給資源,而且載入映射時 MFC 將會失敗。

  5. 在應用程式的對話框類別中(衍生自 CDialog),新增 CBitmapButton 成員物件。

  6. CDialog物件的 OnInitDialog 例程中,使用 作為按鈕控件識別碼和CDialog物件的this指標參數,呼叫CBitmapButton物件的 AutoLoad 函式。

如果您想要處理 Windows 通知訊息,例如BN_CLICKED,由位圖按鈕控件傳送至其父系(通常是衍生自 CDialog的類別),請將訊息對應專案和訊息處理程式成員函式新增至 CDialog衍生物件。每個訊息的訊息對應專案和訊息處理程式成員函式。 物件所CBitmapButton傳送的通知與 CButton 物件所傳送的通知相同。

CToolBar 類別會採用不同的位圖按鈕方法。

如需 的詳細資訊 CBitmapButton,請參閱 控件

繼承階層架構

CObject

CCmdTarget

CWnd

CButton

CBitmapButton

需求

標頭: afxext.h

CBitmapButton::AutoLoad

將對話框中的按鈕與 類別的對象 CBitmapButton 產生關聯、依名稱載入點陣圖,以及調整按鈕大小以符合點陣圖的大小。

BOOL AutoLoad(
    UINT nID,
    CWnd* pParent);

參數

nID
按鈕的控件識別碼。

pParent
擁有按鈕的物件指標。

傳回值

如果成功則為非零;否則為 0。

備註

使用 函 AutoLoad 式,將對話框中的擁有者繪製按鈕初始化為位圖按鈕。 使用此函式的指示位於 類別的 CBitmapButton 備註中。

範例

CBitmapButton myButton;

// Initialize the owner-drawn button with the id IDC_MYBUTTON as a bitmap
// button. This code is used in the OnInitDialog handler of my dialog.
myButton.AutoLoad(IDC_MYBUTTON, this);

CBitmapButton::CBitmapButton

建立 CBitmapButton 物件。

CBitmapButton();

備註

建立C++ CBitmapButton 對象之後,請呼叫 CButton::Create 來建立 Windows 按鈕控件,並將它附加至 CBitmapButton 物件。

範例

// Declare a bitmap button object on the stack.
CBitmapButton myButton;

// Declare a bitmap button object on the heap.
CBitmapButton *pmyButton = new CBitmapButton;

CBitmapButton::LoadBitmaps

當您要載入其資源名稱或識別碼所識別的點陣圖影像,或當您無法使用 AutoLoad 函式時,請使用此函式,例如,您正在建立不屬於對話框一部分的點陣圖按鈕。

BOOL LoadBitmaps(
    LPCTSTR lpszBitmapResource,
    LPCTSTR lpszBitmapResourceSel = NULL,
    LPCTSTR lpszBitmapResourceFocus = NULL,
    LPCTSTR lpszBitmapResourceDisabled = NULL);

BOOL LoadBitmaps(
    UINT nIDBitmapResource,
    UINT nIDBitmapResourceSel = 0,
    UINT nIDBitmapResourceFocus = 0,
    UINT nIDBitmapResourceDisabled = 0);

參數

lpszBitmapResource
指向 Null 終止的字串,其中包含位圖按鈕正常或「向上」狀態的點陣圖名稱。 必要。

lpszBitmapResourceSel
指向 Null 終止的字串,其中包含位圖按鈕選取或「向下」狀態的點陣圖名稱。 可能是 NULL。

lpszBitmapResourceFocus
指向 Null 終止的字串,其中包含位圖按鈕焦點狀態的點陣圖名稱。 可能是 NULL。

lpszBitmapResourceDisabled
指向 Null 終止的字串,其中包含位圖按鈕停用狀態的點陣圖名稱。 可能是 NULL。

nIDBitmapResource
指定點圖按鈕正常或「向上」狀態的點陣圖資源資源資源標識碼。 必要。

nIDBitmapResourceSel
指定點圖按鈕所選取或「向下」狀態的點陣圖資源資源資源標識碼。 可能是 0。

nIDBitmapResourceFocus
指定點陣圖按鈕焦點狀態的點陣圖資源資源標識碼。 可能是 0。

nIDBitmapResourceDisabled
指定點陣圖按鈕已停用狀態的點陣圖資源資源資源識別碼。 可能是 0。

傳回值

如果成功則為非零;否則為 0。

範例


// Create the bitmap button (must include the BS_OWNERDRAW style).
pmyButton->Create(NULL, WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
                  CRect(10, 10, 100, 100), pParentWnd, 1);

// Load the bitmaps for this button.
pmyButton->LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);

CBitmapButton::SizeToContent

呼叫此函式,將點陣圖按鈕的大小調整為點陣圖的大小。

void SizeToContent();

範例

CBitmapButton *pmyButton = new CBitmapButton();

// Create the bitmap button (must include the BS_OWNERDRAW style).
pmyButton->Create(NULL, WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
                  CRect(10, 10, 100, 100), pParentWnd, 1);

// Load the bitmaps for this button.
pmyButton->LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);

// Resize the button to be the size of the bitmaps.
pmyButton->SizeToContent();

另請參閱

MFC 範例 CTRLTEST
CButton 類別
階層架構圖表