CButton 類別
提供 Windows 按鈕控制項的功能。
語法
class CButton : public CWnd
成員
公用建構函式
名稱 | 描述 |
---|---|
CButton::CButton | 建構 CButton 物件。 |
公用方法
備註
按鈕控制件是可按兩下和關閉的小型矩形子視窗。 按鈕可以單獨使用或在群組中使用,而且可以標示或顯示沒有文字。 當使用者按鍵時,按鈕通常會變更外觀。
一般按鈕是複選框、單選按鈕和按鈕。 CButton
對象可以根據 Create 成員函式在初始化時指定的按鈕樣式,成為其中任何一個物件。
此外,衍生自 CButton
的 CBitmapButton 類別支援建立以點陣圖影像標示的按鈕控件,而不是文字。 CBitmapButton
可以針對按鈕的向上、向下、焦點和停用狀態,有個別的位圖。
您可以從對話框範本或直接在程式碼中建立按鈕控制件。 在這兩種情況下,請先呼叫建構函式 CButton
來建構 CButton
物件;然後呼叫 Create
成員函式來建立 Windows 按鈕控件,並將它附加至 CButton
物件。
建構可以是衍生自 CButton
的類別中的一個步驟程式。 撰寫衍生類別的建構函式,並從建構函式內呼叫 Create
。
如果您想要處理按鈕控制項傳送至其父系的 Windows 通知訊息(通常是衍生自 CDialog 的類別),請將訊息對應專案和訊息處理程式成員函式新增至每個訊息的父類別。
每個訊息對應項目採用下列格式:
ON_Notification (id, memberFxn )
其中 id 會指定傳送通知之控件的子視窗識別碼,而 memberFxn 是您用來處理通知的父成員函式名稱。
父系的函式原型如下所示:
afx_msg void memberFxn();
潛在的訊息對應專案如下所示:
對應項目 | 傳送至父系時... |
---|---|
ON_BN_CLICKED | 用戶按下按鈕。 |
ON_BN_DOUBLECLICKED | 用戶按兩下按鈕。 |
如果您從對話資源建立 CButton
物件,當使用者關閉對話框時, CButton
就會自動終結物件。
如果您在視窗中建立 CButton
物件,您可能需要終結它。 如果您使用函式在堆積new
上建立 CButton
物件,則必須在使用者關閉 Windows 按鈕控制件時呼叫 delete
物件來終結它。 如果您在堆疊上建立 CButton
物件,或它內嵌在父對話物件中,它會自動終結。
繼承階層架構
CButton
需求
標題: afxwin.h
CButton::CButton
建構 CButton
物件。
CButton();
範例
// Declare a button object.
CButton myButton;
CButton::Create
建立 Windows 按鈕控制件,並將它附加至 CButton
物件。
virtual BOOL Create(
LPCTSTR lpszCaption,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
參數
lpszCaption
指定按鈕控制件的文字。
dwStyle
指定按鈕控制件的樣式。 將按鈕樣式的任何組合套用至按鈕。
rect
指定按鈕控制件的大小和位置。 它可以是 CRect
對象或 RECT
結構。
pParentWnd
指定按鈕控制件的父視窗,通常是 CDialog
。 它不得為 NULL。
nID
指定按鈕控制件的識別碼。
傳回值
如果成功則為非零;否則為 0。
備註
您會在兩個步驟中建構 CButton
物件。 首先,呼叫 建構函式,然後呼叫 Create
,這會建立 Windows 按鈕控件並將它附加至 CButton
物件。
如果指定WS_VISIBLE樣式,Windows 會傳送按鈕控件,以啟動並顯示按鈕所需的所有訊息。
將下列 視窗樣式 套用至按鈕控制項:
WS_CHILD Always
通常WS_VISIBLE
很少WS_DISABLED
WS_GROUP群組控件
WS_TABSTOP 在索引標籤順序中包含按鈕
範例
CButton myButton1, myButton2, myButton3, myButton4;
// Create a push button.
myButton1.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Create a radio button.
myButton2.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
CRect(10, 40, 100, 70), pParentWnd, 2);
// Create an auto 3-state button.
myButton3.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,
CRect(10, 70, 100, 100), pParentWnd, 3);
// Create an auto check box.
myButton4.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
CRect(10, 100, 100, 130), pParentWnd, 4);
CButton::D rawItem
當擁有者繪製按鈕的視覺層面已變更時,由架構呼叫。
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
參數
lpDrawItemStruct
DRAWITEMSTRUCT 結構的長指標。 結構包含要繪製之專案的相關信息,以及所需的繪圖類型。
備註
擁有者繪製的按鈕具有BS_OWNERDRAW樣式集。 覆寫這個成員函式,以實作擁有者繪製對象的繪圖 CButton
。 應用程式應該在成員函式終止之前,還原針對 lpDrawItemStruct 中提供的顯示內容選取的所有圖形裝置介面 (GDI) 物件。
另請參閱 BS_ 樣式值。
範例
// NOTE: CMyButton is a class derived from CButton. The CMyButton
// object was created as follows:
//
// CMyButton myButton;
// myButton.Create(_T("My button"),
// WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,
// CRect(10,10,100,30), pParentWnd, 1);
//
// This example implements the DrawItem method for a CButton-derived
// class that draws the button's text using the color red.
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
UINT uStyle = DFCS_BUTTONPUSH;
// This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle);
// Get the button's text.
CString strText;
GetWindowText(strText);
// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255, 0, 0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}
CButton::GetBitmap
呼叫這個成員函式,以取得先前使用 SetBitmap 設定的點陣圖句柄,該點陣圖與按鈕相關聯。
HBITMAP GetBitmap() const;
傳回值
點陣圖的句柄。 如果先前未指定位圖,則為 NULL。
範例
CButton myBitmapButton;
// Create a bitmap button.
myBitmapButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_BITMAP,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no bitmap is defined for the button, define the bitmap to the
// system close bitmap.
if (myBitmapButton.GetBitmap() == NULL)
myBitmapButton.SetBitmap(::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CLOSE)));
CButton::GetButtonStyle
擷取按鈕控件樣式的相關信息。
UINT GetButtonStyle() const;
傳回值
傳回這個 CButton
物件的按鈕樣式。 此函式只會 傳回BS_ 樣式值,而不是任何其他窗口樣式。
範例
CButton myRadioButton;
// Create a radio button.
myRadioButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Change the button style to use one of the "auto" styles; for
// push button, change to def push button.
UINT uStyle = myRadioButton.GetButtonStyle();
if (uStyle == BS_PUSHBUTTON)
uStyle = BS_DEFPUSHBUTTON;
else if (uStyle == BS_RADIOBUTTON)
uStyle = BS_AUTORADIOBUTTON;
else if (uStyle == BS_CHECKBOX)
uStyle = BS_AUTOCHECKBOX;
else if (uStyle == BS_3STATE)
uStyle = BS_AUTO3STATE;
// Change the button style to the one wanted.
myRadioButton.SetButtonStyle(uStyle);
CButton::GetCheck
擷取單選按鈕或複選框的核取狀態。
int GetCheck() const;
傳回值
使用BS_AUTOCHECKBOX、BS_AUTORADIOBUTTON、BS_AUTO3STATE、BS_CHECKBOX、BS_RADIOBUTTON或BS_3STATE樣式建立之按鈕控件的傳回值是下列其中一個值:
值 | 意義 |
---|---|
BST_UNCHECKED | 未核取按鈕狀態。 |
BST_CHECKED | 已核取按鈕狀態。 |
BST_INDETERMINATE | 按鈕狀態不確定(只有在按鈕具有BS_3STATE或BS_AUTO3STATE樣式時才適用)。 |
如果按鈕具有任何其他樣式,則傳回值會BST_UNCHECKED。
範例
CButton myA3Button;
// Create an auto 3-state button.
myA3Button.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Set the check state to the next state
// (i.e. BST_UNCHECKED changes to BST_CHECKED
// BST_CHECKED changes to BST_INDETERMINATE
// BST_INDETERMINATE changes to BST_UNCHECKED).
myA3Button.SetCheck(((myA3Button.GetCheck() + 1) % 3));
CButton::GetCursor
呼叫這個成員函式,以取得先前以 SetCursor 設定的游標句柄,該句柄與按鈕相關聯。
HCURSOR GetCursor();
傳回值
游標影像的句柄。 如果先前未指定任何數據指標,則為 NULL。
範例
CButton myIconButton;
// Create an icon button.
myIconButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_ICON,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no image is defined for the button, define the image to the
// system arrow and question mark cursor.
if (myIconButton.GetCursor() == NULL)
myIconButton.SetCursor(::LoadCursor(NULL, IDC_HELP));
CButton::GetIcon
呼叫這個成員函式以取得先前以 SetIcon 設定的圖示句柄,該圖示與按鈕相關聯。
HICON GetIcon() const;
傳回值
圖示的句柄。 如果未指定任何圖示,則為 NULL。
範例
CButton myIconButton2;
// Create an icon button.
myIconButton2.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_ICON,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no icon is defined for the button, define the icon to the
// system error icon.
if (myIconButton2.GetIcon() == NULL)
myIconButton2.SetIcon(::LoadIcon(NULL, IDI_ERROR));
CButton::GetIdealSize
擷取按鈕控件的理想大小。
BOOL GetIdealSize(SIZE* psize);
參數
psize
按鈕目前大小的指標。
傳回值
如果成功則為非零;否則為 0。
備註
此成員函式會模擬BCM_GETIDEALSIZE訊息的功能,如 Windows SDK 的 Buttons 區段所述。
CButton::GetImageList
呼叫此方法以從按鈕控制項取得影像清單。
BOOL GetImageList(PBUTTON_IMAGELIST pbuttonImagelist);
參數
pbuttonImagelist
物件的影像清單 CButton
指標。
傳回值
如果成功則為非零;否則為 0。
備註
此成員函式會模擬BCM_GETIMAGELIST訊息的功能,如 Windows SDK 的 Buttons 區段所述。
CButton::GetNote
擷取與目前命令連結控件相關聯的記事文字。
CString GetNote() const;
BOOL GetNote(
LPTSTR lpszNote,
UINT* cchNote) const;
參數
lpszNote
[out]緩衝區的指標,呼叫端負責配置和解除分配。 如果傳回值為TRUE,緩衝區會包含與目前命令連結控件相關聯的記事文字;否則,緩衝區不會變更。
cchNote
[in, out]不帶正負號整數變數的指標。 呼叫此方法時,變數會包含 lpszNote 參數所指定的緩衝區大小。 當這個方法傳回時,如果傳回值為TRUE,變數會包含與目前命令連結控件相關聯的附註大小。 如果傳回值為 FALSE,變數會包含包含附注所需的緩衝區大小。
傳回值
在第一個 多載中,CString 物件,其中包含與目前命令連結控件相關聯的記事文字。
-或-
在第二個多載中,如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_COMMANDLINK或BS_DEFCOMMANDLINK的控件使用此方法。
這個方法會 傳送 windows SDK 中所述的BCM_GETNOTE 訊息。
CButton::GetNoteLength
擷取目前命令連結控制的記事文字長度。
UINT GetNoteLength() const;
傳回值
目前命令連結控制件的附註文字長度,以16位Unicode字元為單位。
備註
只搭配按鈕樣式為BS_COMMANDLINK或BS_DEFCOMMANDLINK的控件使用此方法。
此方法會 傳送 windows SDK 中所述的 BCM_GETNOTELENGTH訊息。
CButton::GetSplitGlyph
擷取與目前分割按鈕控件相關聯的圖像。
TCHAR GetSplitGlyph() const;
傳回值
與目前分割按鈕控件相關聯的字元字元。
備註
字元是特定字型中字元的實體表示法。 例如,分割按鈕控件可能會以 Unicode 複選標記字元 (U+2713) 的字元裝飾。
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
這個方法會使用 BCSIF_GLYPH 旗標初始化mask
BUTTON_SPLITINFO結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。 當訊息函式傳回時,這個方法會從 himlGlyph
結構的成員擷取圖像。
CButton::GetSplitImageList
CImageList* GetSplitImageList() const;
傳回值
CImageList 物件的指標。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
這個方法會使用 BCSIF_IMAGE 旗標初始化 mask
BUTTON_SPLITINFO 結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。 當訊息函式傳回時,這個方法會從 himlGlyph
結構的成員擷取影像清單。
CButton::GetSplitInfo
擷取參數,判斷 Windows 如何繪製目前的分割按鈕控件。
BOOL GetSplitInfo(PBUTTON_SPLITINFO pInfo) const;
參數
pInfo
[out] BUTTON_SPLITINFO 結構的指標,這個結構會接收目前分割按鈕控件的相關信息。 呼叫端負責配置 結構。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
此方法會 傳送 windows SDK 中所述的 BCM_GETSPLITINFO訊息。
CButton::GetSplitSize
擷取目前分割按鈕控制項下拉式元件的周框。
BOOL GetSplitSize(LPSIZE pSize) const;
參數
pSize
[out] 接收矩形描述之 SIZE 結構的指標。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
展開分割按鈕控制項時,它可以顯示下拉式元件,例如清單控制件或呼叫器控制件。 這個方法會擷取包含下拉式元件的周框。
這個方法會使用 BCSIF_SIZE 旗標初始化 mask
BUTTON_SPLITINFO 結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。 當訊息函式傳回時,這個方法會從 size
結構的成員擷取周框。
CButton::GetSplitStyle
擷取定義目前分割按鈕控制件的分割按鈕樣式。
UINT GetSplitStyle() const;
傳回值
分割按鈕樣式的位元組合。 如需詳細資訊,請參閱 uSplitStyle
BUTTON_SPLITINFO 結構的成員。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
分割按鈕樣式會指定 Windows 繪製分割按鈕圖示的對齊、外觀比例和圖形化格式。
這個方法會使用 BCSIF_STYLE 旗標初始化mask
BUTTON_SPLITINFO結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。 當訊息函式傳回時,這個方法會從 uSplitStyle
結構的成員擷取分割按鈕樣式。
CButton::GetState
擷取按鈕控件的狀態。
UINT GetState() const;
傳回值
位欄位欄位,包含值的組合,表示按鈕控制件的目前狀態。 下表列出可能的值。
按鈕狀態 | 值 | Description |
---|---|---|
BST_UNCHECKED | 0x0000 | 初始狀態。 |
BST_CHECKED | 0x0001 | 已檢查按鈕控制件。 |
BST_INDETERMINATE | 0x0002 | 狀態不確定(只有在按鈕控件有三種狀態時才可能)。 |
BST_PUSHED | 0x0004 | 按下按鈕控制件。 |
BST_FOCUS | 0x0008 | 按鈕控制件具有焦點。 |
備註
具有BS_3STATE或BS_AUTO3STATE按鈕樣式的按鈕控件會建立具有第三個狀態為不確定狀態的複選框。 不確定狀態表示複選框不會核取或未核取。
範例
CButton myPushButton;
// Create a push button.
myPushButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Invert the highlight state of the button.
myPushButton.SetState(!(myPushButton.GetState() & 0x0004));
CButton::GetTextMargin
呼叫這個方法以取得 物件的文字邊界 CButton
。
BOOL GetTextMargin(RECT* pmargin);
參數
pmargin
物件的文字邊界 CButton
指標。
傳回值
傳回文字邊界。 如果成功則為非零;否則為 0。
備註
此成員函式會模擬BCM_GETTEXTMARGIN訊息的功能,如 Windows SDK 的 Buttons 區段所述。
CButton::SetBitmap
呼叫這個成員函式,以將新的點陣圖與按鈕產生關聯。
HBITMAP SetBitmap(HBITMAP hBitmap);
參數
hBitmap
點陣圖的句柄。
傳回值
先前與按鈕相關聯的點陣圖句柄。
備註
根據預設,位圖會自動放在按鈕的臉上。 如果點圖對按鈕太大,則會在任一端裁剪。 您可以選擇其他對齊選項,包括下列專案:
BS_TOP
BS_LEFT
BS_RIGHT
BS_CENTER
BS_BOTTOM
BS_VCENTER
不同於 每個按鈕使用四個點陣圖的 CBitmapButton, SetBitmap
每個按鈕只會使用一個點陣圖。 按下按鈕時,點陣陣圖會顯示向下和向右移位。
當您完成點陣圖時,您必須負責釋放位圖。
範例
CButton myBitmapButton;
// Create a bitmap button.
myBitmapButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_BITMAP,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no bitmap is defined for the button, define the bitmap to the
// system close bitmap.
if (myBitmapButton.GetBitmap() == NULL)
myBitmapButton.SetBitmap(::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CLOSE)));
CButton::SetButtonStyle
變更按鈕的樣式。
void SetButtonStyle(
UINT nStyle,
BOOL bRedraw = TRUE);
參數
nStyle
指定 按鈕樣式。
bRedraw
指定是否要重新繪製按鈕。 非零值會重新繪製按鈕。 0 值不會重新繪製按鈕。 按鈕預設會重新繪製。
備註
GetButtonStyle
使用成員函式來擷取按鈕樣式。 完整按鈕樣式的低序單字是按鈕特定樣式。
範例
CButton myRadioButton;
// Create a radio button.
myRadioButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_RADIOBUTTON,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Change the button style to use one of the "auto" styles; for
// push button, change to def push button.
UINT uStyle = myRadioButton.GetButtonStyle();
if (uStyle == BS_PUSHBUTTON)
uStyle = BS_DEFPUSHBUTTON;
else if (uStyle == BS_RADIOBUTTON)
uStyle = BS_AUTORADIOBUTTON;
else if (uStyle == BS_CHECKBOX)
uStyle = BS_AUTOCHECKBOX;
else if (uStyle == BS_3STATE)
uStyle = BS_AUTO3STATE;
// Change the button style to the one wanted.
myRadioButton.SetButtonStyle(uStyle);
CButton::SetCheck
設定或重設單選按鈕或複選框的核取狀態。
void SetCheck(int nCheck);
參數
nCheck
指定檢查狀態。 此參數可以是下列其中一項:
值 | 意義 |
---|---|
BST_UNCHECKED | 將按鈕狀態設定為未核取。 |
BST_CHECKED | 將按鈕狀態設定為已核取。 |
BST_INDETERMINATE | 將按鈕狀態設定為不確定。 只有當按鈕具有BS_3STATE或BS_AUTO3STATE樣式時,才能使用此值。 |
備註
此成員函式對按鈕沒有任何作用。
範例
CButton myA3Button;
// Create an auto 3-state button.
myA3Button.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_AUTO3STATE,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Set the check state to the next state
// (i.e. BST_UNCHECKED changes to BST_CHECKED
// BST_CHECKED changes to BST_INDETERMINATE
// BST_INDETERMINATE changes to BST_UNCHECKED).
myA3Button.SetCheck(((myA3Button.GetCheck() + 1) % 3));
CButton::SetCursor
呼叫這個成員函式,以將新的游標與按鈕產生關聯。
HCURSOR SetCursor(HCURSOR hCursor);
參數
hCursor
數據指標的句柄。
傳回值
先前與按鈕相關聯的游標句柄。
備註
根據預設,游標會自動放在按鈕的臉部上。 如果游標對按鈕太大,則會在任一端剪下。 您可以選擇其他對齊選項,包括下列專案:
BS_TOP
BS_LEFT
BS_RIGHT
BS_CENTER
BS_BOTTOM
BS_VCENTER
不同於 每個按鈕使用四個點陣圖的 CBitmapButton, SetCursor
每個按鈕只會使用一個游標。 按下按鈕時,游標會顯示為向下和向右移位。
範例
CButton myIconButton;
// Create an icon button.
myIconButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_ICON,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no image is defined for the button, define the image to the
// system arrow and question mark cursor.
if (myIconButton.GetCursor() == NULL)
myIconButton.SetCursor(::LoadCursor(NULL, IDC_HELP));
CButton::SetDropDownState
設定目前分割按鈕控制件的下拉式清單狀態。
BOOL SetDropDownState(BOOL fDropDown);
參數
fDropDown
[in]TRUE 可設定BST_DROPDOWNPUSHED狀態;否則為 FALSE。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
分割按鈕控制項具有BS_SPLITBUTTON或BS_DEFSPLITBUTTON樣式,由按鈕和向右下拉箭號組成。 如需詳細資訊,請參閱 按鈕樣式。 當使用者按兩下拉式箭號時,通常會設定下拉式清單狀態。 使用此方法以程式設計方式設定控制件的下拉式清單狀態。 下拉箭號會繪製陰影來表示狀態。
這個方法會 傳送 windows SDK 中所述的BCM_SETDROPDOWNSTATE 訊息。
範例
第一個程式代碼範例會定義變數 ,該變數 m_splitButton
用來以程式設計方式存取分割按鈕控制件。 下列範例會使用此變數。
public:
// Variable to access programatically defined command link control.
CButton m_cmdLink;
// Variable to access programatically defined split button control.
CButton m_splitButton;
下一個程式代碼範例會設定分割按鈕控制項的狀態,以指出下拉箭號已推送。
/* Set the state of the split button control to indicate that
the drop-down arrow is pushed. The arrow is drawn shaded to
indicate the state.
*/
m_splitButton.SetDropDownState(TRUE);
CButton::SetElevationRequired
將目前按鈕控制件的狀態設定為 elevation required
,這是控件顯示提高安全性圖示的必要狀態。
BOOL SetElevationRequired(BOOL fElevationRequired);
參數
fElevationRequired
[in]TRUE 表示設定 elevation required
狀態,否則為 FALSE。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
如果按鈕或命令連結控制項需要提高的安全性許可權來執行動作,請將控件設定為 elevation required
狀態。 接著,Windows 會在控件上顯示用戶帳戶控制 (UAC) 盾牌圖示。 如需詳細資訊,請參閱使用者帳戶控制。
這個方法會 傳送 windows SDK 中所述的BCM_SETSHIELD 訊息。
CButton::SetIcon
呼叫此成員函式,以將新圖示與按鈕產生關聯。
HICON SetIcon(HICON hIcon);
參數
hIcon
圖示的句柄。
傳回值
先前與按鈕相關聯的圖示句柄。
備註
根據預設,圖示會自動放在按鈕的臉上。 如果圖示對按鈕太大,則會在任一端裁剪。 您可以選擇其他對齊選項,包括下列專案:
BS_TOP
BS_LEFT
BS_RIGHT
BS_CENTER
BS_BOTTOM
BS_VCENTER
不同於 每個按鈕使用四個點陣圖的 CBitmapButton, SetIcon
每個按鈕只會使用一個圖示。 按下按鈕時,圖示會顯示向下和向右移位。
範例
CButton myIconButton2;
// Create an icon button.
myIconButton2.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_ICON,
CRect(10, 10, 60, 50), pParentWnd, 1);
// If no icon is defined for the button, define the icon to the
// system error icon.
if (myIconButton2.GetIcon() == NULL)
myIconButton2.SetIcon(::LoadIcon(NULL, IDI_ERROR));
CButton::SetImageList
呼叫此方法以設定 物件的影像清單 CButton
。
BOOL SetImageList(PBUTTON_IMAGELIST pbuttonImagelist);
參數
pbuttonImagelist
新影像清單的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
此成員函式會模擬BCM_SETIMAGELIST訊息的功能,如 Windows SDK 的 Buttons 區段所述。
CButton::SetNote
設定目前命令連結控制件的記事文字。
BOOL SetNote(LPCTSTR lpszNote);
參數
lpszNote
[in]Unicode 字串的指標,該字串設定為命令連結控制的記事文字。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_COMMANDLINK或BS_DEFCOMMANDLINK的控件使用此方法。
這個方法會傳送 windows SDK 中所述的BCM_SETNOTE 訊息。
範例
第一個程式代碼範例會定義 用來以程式設計方式存取命令連結控件的變數 m_cmdLink
。 下列範例會使用此變數。
public:
// Variable to access programatically defined command link control.
CButton m_cmdLink;
// Variable to access programatically defined split button control.
CButton m_splitButton;
下一個程式代碼範例會設定命令連結控制件的記事文字。
// Set the command link text.
m_cmdLink.SetNote(_T("This is the command link note."));
CButton::SetSplitGlyph
將指定的圖像與目前的分割按鈕控制件產生關聯。
BOOL SetSplitGlyph(TCHAR chGlyph);
參數
chGlyph
[in]字元,指定要作為分割按鈕下拉式箭號使用的字元。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
字元是特定字型中字元的實體表示法。 chGlyph 參數不會當做圖像使用,而是用來從一組系統定義的字元中選取圖像。 默認下拉式箭號圖像是由字元 『6』 指定,類似於 Unicode 字元黑色向下指向三角形 (U+25BC)。
這個方法會mask
使用 BCSIF_GLYPH 旗標和 himlGlyph
chGlyph 參數,初始化 BUTTON_SPLITINFO 結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。
CButton::SetSplitImageList
將 影像清單 與目前的分割按鈕控制件產生關聯。
BOOL SetSplitImageList(CImageList* pSplitImageList);
參數
pSplitImageList
[in] 要指派給目前分割按鈕控件之 CImageList 物件的指標。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
這個方法會使用 BCSIF_IMAGE 旗標和具有 pSplitImageList 參數的成員,初始化 mask
BUTTON_SPLITINFO 結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。himlGlyph
CButton::SetSplitInfo
指定參數,決定 Windows 繪製目前分割按鈕控件的方式。
BOOL SetSplitInfo(PBUTTON_SPLITINFO pInfo);
參數
pInfo
[in] 定義目前分割按鈕控件之BUTTON_SPLITINFO 結構的指標。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
此方法會 傳送 windows SDK 中所述的 BCM_SETSPLITINFO訊息。
範例
第一個程式代碼範例會定義變數 ,該變數 m_splitButton
用來以程式設計方式存取分割按鈕控制件。
public:
// Variable to access programatically defined command link control.
CButton m_cmdLink;
// Variable to access programatically defined split button control.
CButton m_splitButton;
下一個程式代碼範例會變更用於分割按鈕下拉式箭號的字元。 此範例會取代預設下指三角形圖像的上指三角形圖像。 顯示的字元取決於您在 結構成員BUTTON_SPLITINFO
中指定的himlGlyph
字元。 下指三角形圖像是由字元 『6』 指定,而上指的三角形圖像是由字元 『5』 指定。 如需比較,請參閱便利方法 CButton::SetSplitGlyph。
/*
The drop-down arrow glyph is a function of the specified character.
The default "down" drop-down arrow glyph is specified by a
character '6'. Set the "up" arrow glyph, which is a character '5'.
See the convenience method, SetSplitGlyph(), for comparison.
*/
BUTTON_SPLITINFO bsInfo = {0};
bsInfo.mask = BCSIF_GLYPH;
TCHAR chGlyph = _T('5'); // "up" arrow glyph
bsInfo.himlGlyph = (HIMAGELIST)chGlyph;
bRC = m_splitButton.SetSplitInfo(&bsInfo);
CButton::SetSplitSize
設定目前分割按鈕控制件下拉式元件的周框。
BOOL SetSplitSize(LPSIZE pSize);
參數
pSize
[in] 描述周框之 SIZE 結構的指標。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
展開分割按鈕控制項時,它可以顯示下拉式元件,例如清單控制件或呼叫器控制件。 這個方法會指定包含下拉式元件的周框大小。
這個方法會使用 BCSIF_SIZE 旗標和size
具有 pSize 參數的成員,初始化 mask
BUTTON_SPLITINFO 結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。
範例
第一個程式代碼範例會定義變數 ,該變數 m_splitButton
用來以程式設計方式存取分割按鈕控制件。 下列範例會使用此變數。
public:
// Variable to access programatically defined command link control.
CButton m_cmdLink;
// Variable to access programatically defined split button control.
CButton m_splitButton;
下一個程式代碼範例會將分割按鈕下拉式箭號的大小加倍。
// Double the size of the split button drop-down arrow.
SIZE sz;
bRC = m_splitButton.GetSplitSize(&sz); // current size
sz.cx = sz.cx * 2;
sz.cy = sz.cy * 2;
bRC = m_splitButton.SetSplitSize(&sz);
CButton::SetSplitStyle
設定目前分割按鈕控制件的樣式。
BOOL SetSplitStyle(UINT uSplitStyle);
參數
uSplitStyle
[in]分割按鈕樣式的位元組合。 如需詳細資訊,請參閱 uSplitStyle
BUTTON_SPLITINFO 結構的成員。
傳回值
如果此方法成功,則為TRUE;否則為 FALSE。
備註
只搭配按鈕樣式為BS_SPLITBUTTON或BS_DEFSPLITBUTTON的控件使用此方法。
分割按鈕樣式會指定 Windows 繪製分割按鈕圖示的對齊、外觀比例和圖形化格式。 如需詳細資訊,請參閱 uSplitStyle
BUTTON_SPLITINFO 結構的成員。
這個方法會使用 BCSIF_STYLE 旗標和具有 uSplitStyle 參數的成員,初始化mask
BUTTON_SPLITINFO結構的成員,然後在 Windows SDK 中所述的BCM_GETSPLITINFO訊息中傳送該結構。uSplitStyle
範例
第一個程式代碼範例會定義變數 ,該變數 m_splitButton
用來以程式設計方式存取分割按鈕控制件。
public:
// Variable to access programatically defined command link control.
CButton m_cmdLink;
// Variable to access programatically defined split button control.
CButton m_splitButton;
下一個程式代碼範例會設定分割按鈕下拉式箭號的樣式。 BCSS_ALIGNLEFT樣式會顯示按鈕左側的箭號,而當您調整按鈕大小時,BCSS_STRETCH樣式會保留下拉箭號的比例。
/*
Set the style of the split button drop-down arrow: Display the
arrow on the left and retain the arrow's proportions when resizing
the control.
*/
bRC = m_splitButton.SetSplitStyle(BCSS_ALIGNLEFT | BCSS_STRETCH);
CButton::SetState
設定是否反白顯示按鈕控制件。
void SetState(BOOL bHighlight);
參數
bHighlight
指定是否要反白顯示按鈕。 非零值會反白顯示按鈕;0 值會移除任何反白顯示。
備註
醒目提示會影響按鈕控件的外部。 它不會影響單選按鈕或複選框的核取狀態。
當使用者按住滑鼠左鍵時,會自動反白顯示按鈕控制件。 當使用者放開滑鼠按鈕時,會移除醒目提示。
範例
CButton myPushButton;
// Create a push button.
myPushButton.Create(_T("My button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect(10, 10, 100, 30), pParentWnd, 1);
// Invert the highlight state of the button.
myPushButton.SetState(!(myPushButton.GetState() & 0x0004));
CButton::SetTextMargin
呼叫這個方法以設定 物件的文字邊界 CButton
。
BOOL SetTextMargin(RECT* pmargin);
參數
pmargin
新文字邊界的指標。
傳回值
在成功時傳回 TRUE,失敗時傳回 FALSE。
備註
此成員函式會模擬BCM_SETTEXTMARGIN訊息的功能,如 Windows SDK 的 Buttons 區段所述。
另請參閱
CWnd 類別
階層架構圖表
CWnd 類別
CComboBox 類別
CEdit 類別
CListBox 類別
CScrollBar 類別
CStatic 類別
CBitmapButton 類別
CDialog 類別