VS2019 MFC動態建立按鈕和複選框,CButton類 Create成員函式應用建立複選框和按鈕[MFC動態建立控制元件一]
MicrosoftWare微軟官網說明:
CButton::Create
建立Windows按鈕控制元件並將它附加到CButton物件。
virtual BOOLCreate( LPCTSTRlpszCaption, DWORDdwStyle, constRECT&rect, CWnd*pParentWnd, UINTnID );
引數
lpszCaption
指定按鈕控制元件的文字。dwStyle
指定按鈕控制元件的樣式。 適用於按鈕樣式的任意組合按鈕。rect
指定按鈕控制元件的大小和位置。 它可以是CRect物件或RECT結構。pParentWnd
指定按鈕控制元件的父視窗,通常CDialog。 不能為NULL。nID
指定按鈕控制元件的ID.返回值
非零,如果成功;否則為0。
備註
在構造在兩個步驟的一CButton物件。 首先,呼叫建構函式然後呼叫Create,建立Windows按鈕控制元件並將它附加到CButton物件。
如果給定WS_VISIBLE樣式,Windows傳送按鈕控制元件所需的所有資訊**和顯示按鈕。
將以下視窗樣式於按鈕控制元件:
始終WS_CHILD
通常WS_VISIBLE
少見WS_DISABLED
對控制元件分組的WS_GROUP
包含按鈕的WS_TABSTOP按tab鍵順序
按鈕型別
下表列出了按鈕型別。 可以選擇下列專案之一。 如果不指定按鈕型別,則預設為 BS_PUSHBUTTON。
型別
說明
BS_3STATE
建立具有三種狀態的複選框按鈕:BST_CHECKED、BST_INDETERMINATE 和 BST_UNCHECKED。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗,但並不更改按鈕的狀態。 預設情況下,關聯的文字顯示在複選框右側。 若要在複選框左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_AUTO3STATE
建立具有三種狀態的複選框按鈕:BST_CHECKED、BST_INDETERMINATE 和 BST_UNCHECKED。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗並更改按鈕的狀態。 按鈕的狀態按 BST_CHECKED、BST_INDETERMINATE 和 BST_UNCHECKED 的順序迴圈。 預設情況下,關聯的文字顯示在複選框右側。 若要在複選框左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_AUTOCHECKBOX
建立具有兩種狀態的複選框按鈕:BST_CHECKED 和 BST_UNCHECKED。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗並更改按鈕的狀態。 預設情況下,關聯的文字顯示在複選框右側。 若要在複選框左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_AUTORADIOBUTTON
建立具有兩種狀態的單選按鈕:BST_CHECKED 和 BST_UNCHECKED。 單選按鈕通常在組中使用,每個組一次最多可以擁有一個選中項。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗,將選中的單選按鈕的狀態設定為 BST_CHECKED,然後將按鈕組中的其他所有單選按鈕的狀態設定為 BST_UNCHECKED。 預設情況下,關聯的文字顯示在單選按鈕右側。 若要在單選按鈕左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_CHECKBOX
建立具有兩種狀態的複選框按鈕:BST_CHECKED 和 BST_UNCHECKED。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗,但並不更改按鈕的狀態。 預設情況下,關聯的文字顯示在複選框右側。 若要在複選框左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_COMMANDLINK
建立一個命令連結按鈕。 命令連結按鈕是 Windows Vista 特有的命令按鈕,主文字左邊顯示有一個綠色按鈕,主文字下方顯示註釋。 可以使用CButton::SetNote設定註釋文字。
BS_DEFCOMMANDLINK
建立一個命令連結按鈕。 命令連結按鈕是 Windows Vista 特有的命令按鈕,主文字左邊顯示有一個綠色按鈕,主文字下方顯示註釋。 可以使用CButton::SetNote設定註釋文字。 如果按鈕出現在對話方塊中,則即使按鈕沒有輸入焦點,也要按 ENTER 鍵傳送一個 BN_CLICKED 通知到該對話方塊。
BS_DEFPUSHBUTTON
建立一個具有深黑色邊框的命令按鈕。 如果按鈕出現在對話方塊中,則即使按鈕沒有輸入焦點,也要按 ENTER 鍵傳送一個 BN_CLICKED 通知到該對話方塊。
BS_DEFSPLITBUTTON
建立拆分按鈕。 拆分按鈕是包含位於下拉箭頭旁的按鈕 Windows Vista 特有的命令按鈕。 單擊該按鈕時,系統會執行預設命令。 單擊下拉箭頭時,其他命令選單會顯示出來。 如果拆分按鈕出現在對話方塊中,則即使按鈕沒有輸入焦點,也要按 ENTER 鍵傳送一個 BN_CLICKED 通知到該對話方塊
BS_GROUPBOX
建立一個可在此分組其他按鈕的矩形。 該樣式的文字在矩形的左上角顯示。
BS_OWNERDRAW
建立一個所有者描述的按鈕。 當按鈕的可視方面已更改時,該框架將呼叫DrawItem方法。 當使用CBitmapButton選件類時,必須設定該樣式。
BS_PUSHBUTTON
建立一個命令按鈕,當用戶單擊按鈕時 BN_CLICKED 通知將傳送到所有者視窗。
BS_RADIOBUTTON
建立具有兩種狀態的單選按鈕:BST_CHECKED 和 BST_UNCHECKED。 單選按鈕通常在組中使用,每個組一次最多可以擁有一個選中項。 單擊按鈕將傳送 BN_CLICKED 通知到所有者視窗,但並不自動更改組中任何按鈕的狀態。 預設情況下,關聯的文字顯示在單選按鈕右側。 若要在單選按鈕左側顯示文字,請使用 BS_LEFTTEXT 或 BS_RIGHTBUTTON 樣式。
BS_SPLITBUTTON
建立拆分按鈕。 拆分按鈕是包含位於下拉箭頭旁的按鈕 Windows Vista 特有的命令按鈕。 單擊該按鈕時,系統會執行預設命令。 單擊下拉箭頭時,其他命令選單會顯示出來。
BS_USERBUTTON
已棄用,但可與 Windows 16 位版相容。 基於 Win32 的應用程式應改用 BS_OWNERDRAW。
單選按鈕和複選框樣式
下表列出了特定於單選按鈕和複選框的樣式。 其他按鈕型別都忽略這些樣式。 可以選擇以下一個或多個專案。
樣式
說明
BS_LEFTTEXT
在單選按鈕或複選框樣式中,該文字顯示在單選按鈕或複選框的左側。
BS_RIGHTBUTTON
在單選按鈕或複選框樣式中,該文字顯示在單選按鈕或複選框的左側。 此樣式與 BS_LEFTTEXT 樣式相同。
BS_PUSHLIKE
使複選框或單選按鈕的外觀和行為與命令按鈕相似。 當該按鈕顯示為 BST_CHECKED 時處於按下狀態,當顯示為 BST_INDETERMINATE 時處於按下和灰顯狀態,當顯示為 BST_UNCHECKED 時處於釋放狀態。
文字對齊樣式
下表列出了水平和垂直文字對齊選項。 可以選擇下列專案之一。
樣式
說明
BS_LEFT
將矩形按鈕內的文字左對齊。 但是,如果該按鈕是不具有 BS_RIGHTBUTTON 樣式的複選框或單選按鈕,則該文字將在複選框或單選按鈕右側進行左端對齊。
BS_RIGHT
將矩形按鈕內的文字右對齊。 但是,如果該按鈕是不具有 BS_RIGHTBUTTON 樣式的複選框或單選按鈕,則該文字將在複選框或單選按鈕右側進行右端對齊。
BS_CENTER
將按鈕內的文字水平居中對齊。
BS_TOP
將文字置於矩形按鈕的頂部。
BS_BOTTOM
將文字置於矩形按鈕的底部。
BS_VCENTER
將按鈕內的文字垂直居中對齊。
按鈕內容選項
下表列出了用於指示按鈕中顯示的內容的選項。 僅顯示文字忽略這些樣式的按鈕型別。 可以選擇下列專案之一。
樣式
說明
BS_BITMAP
將按鈕指定成以點陣圖形式顯示。
BS_ICON
指定按鈕以圖示形式顯示。
BS_TEXT
將按鈕指定成以文字形式顯示。
其他選項
下表列出了可用於任意按鈕型別的附加選項。 可以選擇以下一個或多個專案。
樣式
說明
BS_FLAT
指定按鈕是二維的且不帶預設底紋以繪製三維圖形。
BS_MULTILINE
如果文字字串太長而無法容納在該按鈕矩形的一行中,那麼就將按鈕文字折為多行。
BS_NOTIFY
啟用一個按鈕以傳送 BN_DBLCLK、BN_KILLFOCUS 和 BN_SETFOCUS 通知訊息到其父視窗。 請注意,按鈕將傳送 BN_CLICKED 通知,而無論是否指定樣式。
示例
c++
複製
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);
本文例程
建立CheckeBox型別按鈕。
CButton cHeckBok;
if (!cHeckBok.Create(_T("BUTTON"),
WS_CHILD | WS_VISIBLE | BS_CHECKBOX| BS_AUTOCHECKBOX| BS_VCENTER|BS_CENTER| BS_FLAT/*| BS_OWNERDRAW*/,
rect, this, nID))
{
TRACE("Failed to create button\n");
return FALSE;
}
建立按鈕控制元件
CButton cButton;
if (!cButton.Create(L"退出系統", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON| BS_OWNERDRAW, rect, this, nID))
{
TRACE("Failed to create combo-box\n");
return FALSE;
}
m_buttonOne.SetTextFont(m_buttonTextHeight, TRUE,TRUE, m_ButtonTextstrFaceName);