1. 程式人生 > 其它 >VS2019 MFC動態建立按鈕和複選框,CButton類 Create成員函式應用建立複選框和按鈕[MFC動態建立控制元件一]

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);