CMFCButton
類別
類別 CMFCButton
會將功能新增至 類別, CButton
例如對齊按鈕文字、結合按鈕文字和影像、選取游標,以及指定工具提示。
語法
class CMFCButton : public CButton
成員
公用建構函式
名稱 | 描述 |
---|---|
CMFCButton::CMFCButton |
預設建構函式。 |
CMFCButton::~CMFCButton |
解構函式。 |
公用方法
受保護的方法
名稱 | 描述 |
---|---|
CMFCButton::OnDraw |
由架構呼叫以繪製按鈕。 |
CMFCButton::OnDrawBorder |
由架構呼叫以繪製按鈕的框線。 |
CMFCButton::OnDrawFocusRect |
由架構呼叫以繪製按鈕的焦點矩形。 |
CMFCButton::OnDrawText |
由架構呼叫以繪製按鈕文字。 |
CMFCButton::OnFillBackground |
由架構呼叫以繪製按鈕文字的背景。 |
CMFCButton::SelectFont |
擷取與指定裝置內容相關聯的字型。 |
資料成員
名稱 | 描述 |
---|---|
CMFCButton::m_nAlignStyle |
指定按鈕文字的對齊方式。 |
CMFCButton::m_bDontUseWinXPTheme |
指定是否要使用 Windows XP 主題。 |
CMFCButton::m_bDrawFocus |
指出是否要在按鈕周圍繪製焦點矩形。 |
CMFCButton::m_nFlatStyle |
指定按鈕的樣式,例如無框線、平面、半平面或 3D。 |
CMFCButton::m_bGrayDisabled |
當為 TRUE 時,可讓停用的按鈕繪製為灰色。 |
CMFCButton::m_bHighlightChecked |
指出游標停留在上方時,是否要反白顯示BS_CHECKBOX樣式按鈕。 |
CMFCButton::m_bResponseOnButtonDown |
指出是否要回應按鈕向下事件。 |
CMFCButton::m_bRightImage |
指出是否要在按鈕右側顯示影像。 |
CMFCButton::m_bTopImage |
指出影像是否位於按鈕頂端。 |
CMFCButton::m_bTransparent |
指出按鈕是否透明。 |
CMFCButton::m_bWasDblClk |
指出最後一次按兩下事件是否為按兩下。 |
備註
其他類型的按鈕衍生自 CMFCButton
類別,例如 CMFCURLLinkButton
支援超連結的 類別,以及支援色彩選擇器對話框的 CMFCColorButton
類別。
物件的樣式CMFCButton
可以是3D
、 flat
semi-flat
或 no border
。 按鈕文字可以對齊按鈕的左邊、頂端或中央。 在運行時間,您可以控制按鈕是否顯示文字、影像或文字和影像。 您也可以指定當游標停留在按鈕上時,會顯示特定的游標影像。
直接在程式代碼中建立按鈕控件,或使用 MFC 類別精靈 工具和對話框範本。 如果您直接建立按鈕控件,請將變數新增 CMFCButton
至您的應用程式,然後呼叫 物件的建構函式和 Create
方法 CMFCButton
。 如果您使用 MFC 類別精靈,請將變數新增 CButton
至您的應用程式,然後將變數的類型從 CButton
變更為 CMFCButton
。
若要處理對話框應用程式中的通知訊息,請為每個通知新增訊息對應專案和事件處理程式。 物件所 CMFCButton
傳送的通知與 物件所傳送的 CButton
通知相同。
範例
下列範例示範如何使用 類別中的 CMFCButton
各種方法設定按鈕的屬性。 此範例是 New Controls 範例的一部分。
CMFCButton m_Button;
// int m_iImage
// IDB_BTN1_32, IDB_BTN1_HOT_32, IDB_BTN1, IDB_BTN1_HOT are int macros that are #define.
if (m_iImage == 1)
{
m_Button.SetImage((HBITMAP)NULL);
}
else
{
m_Button.SetImage(IDB_BTN1_32, IDB_BTN1_HOT_32);
}
// int m_iImage
if (m_iImage == 0)
{
m_Button.SetWindowText(_T(""));
}
else
{
m_Button.SetWindowText(_T("Button"));
}
// Resize the button.
m_Button.SizeToContent();
m_Button.EnableFullTextTooltip(true);
// Use the application menu font at the button text font.
m_Button.EnableMenuFont();
// Use the current Windows theme to draw the button borders.
m_Button.EnableWindowsTheming(true);
// Set the button to auto-repeat mode.
m_Button.SetAutorepeatMode();
// Set the background color for the button text.
m_Button.SetFaceColor(RGB(255,0,0),true);
m_Button.SetTextColor(RGB(0,0,255));
// Set the tooltip of the button.
m_Button.SetTooltip(_T("this is a button!"));
繼承階層架構
需求
標頭: afxbutton.h
CMFCButton::CleanUp
重設內部變數,並釋放配置的資源,例如影像、點陣圖和圖示。
virtual void CleanUp();
CMFCButton::EnableFullTextTooltip
指定是要在大型工具提示視窗中顯示工具提示的全文,還是要在小型工具提示視窗中截斷的文字版本。
void EnableFullTextTooltip(BOOL bOn=TRUE);
參數
bOn
[in] TRUE
顯示所有文字; FALSE
顯示截斷的文字。
備註
CMFCButton::EnableMenuFont
指定按鈕文字字型是否與應用程式功能表字型相同。
void EnableMenuFont(
BOOL bOn=TRUE,
BOOL bRedraw=TRUE);
參數
bOn
[in] TRUE
表示使用應用程式功能表字型做為按鈕文字字型; FALSE
使用系統字型。 預設值為 TRUE
。
bRedraw
[in] TRUE
表示立即重新繪製螢幕;否則為 FALSE
。 預設值為 TRUE
。
備註
如果您未使用此方法來指定按鈕文字字型,您可以使用 方法指定字型 CWnd::SetFont
。 如果您完全未指定字型,架構會設定預設字型。
CMFCButton::EnableWindowsTheming
指定按鈕框線的樣式是否對應至目前的 Windows 主題。
static void EnableWindowsTheming(BOOL bEnable = TRUE);
參數
bEnable
[in] TRUE
表示使用目前的 Windows 主題來繪製按鈕框線; FALSE
不使用 Windows 主題。 預設值為 TRUE
。
備註
此方法會影響您應用程式中衍生自 CMFCButton
類別的所有按鈕。
CMFCButton::GetToolTipCtrl
傳回基礎工具提示控件的參考。
CToolTipCtrl& GetToolTipCtrl();
傳回值
基礎工具提示控件的參考。
備註
CMFCButton::IsAutoCheck
指出複選框或單選按鈕是否為自動按鈕。
BOOL IsAutoCheck() const;
傳回值
TRUE
如果按鈕具有樣式 BS_AUTOCHECKBOX
或 BS_AUTORADIOBUTTON
,則為 ,否則為 FALSE
。
備註
CMFCButton::IsAutorepeatCommandMode
指出按鈕是否設定為自動重複模式。
BOOL IsAutorepeatCommandMode() const;
傳回值
TRUE
如果按鈕設定為自動重複模式,則為 ;否則為 FALSE
。
備註
使用方法將 CMFCButton::SetAutorepeatMode
按鈕設定為自動重複模式。
CMFCButton::IsCheckBox
指出按鈕是否為複選框按鈕。
BOOL IsCheckBox() const;
傳回值
TRUE
如果按鈕具有 BS_CHECKBOX
或 BS_AUTOCHECKBOX
樣式,則為 ,否則為 FALSE
。
備註
CMFCButton::IsChecked
指出是否已檢查目前的按鈕。
BOOL IsChecked() const;
傳回值
TRUE
如果已核取目前按鈕,則為 ;否則為 FALSE
。
備註
架構會使用不同的方式來指出已檢查不同類型的按鈕。 例如,當單選按鈕包含點時,會加以檢查;包含 時 X
會核取複選框。
CMFCButton::IsHighlighted
指出是否反白顯示按鈕。
BOOL IsHighlighted() const;
傳回值
TRUE
如果反白顯示按鈕,則為 ;否則為 FALSE
。
備註
當滑鼠停留在按鈕上方時,按鈕會變成醒目提示。
CMFCButton::IsPressed
指出按鈕是否已按下並反白顯示。
BOOL IsPressed() const;
傳回值
TRUE
如果按下按鈕,則為 ;否則為 FALSE
。
備註
CMFCButton::IsPushed
指出是否按下按鈕。
BOOL IsPushed() const;
傳回值
TRUE
如果按下按鈕,則為 ;否則為 FALSE
。
備註
CMFCButton::IsRadioButton
指出按鈕是否為單選按鈕。
BOOL IsRadioButton() const;
傳回值
TRUE
如果按鈕樣式為 或 BS_AUTORADIOBUTTON
,則為 BS_RADIOBUTTON
,否則為 FALSE
。
備註
CMFCButton::IsWindowsThemingEnabled
指出按鈕框線的樣式是否對應至目前的 Windows 主題。
static BOOL IsWindowsThemingEnabled();
傳回值
TRUE
如果按鈕框線的樣式對應至目前的 Windows 主題,則為 ;否則為 FALSE
。
CMFCButton::m_bDontUseWinXPTheme
指定在繪製按鈕時是否要使用 Windows XP 主題。
BOOL m_bDontUseWinXPTheme;
CMFCButton::m_bDrawFocus
指出是否要在按鈕周圍繪製焦點矩形。
BOOL m_bDrawFocus;
備註
將 m_bDrawFocus
成員設定為 TRUE
,以指定如果按鈕收到焦點,架構會在按鈕的文字和影像周圍繪製焦點矩形。
建構函式會將 CMFCButton
這個成員初始化為 TRUE
。
CMFCButton::m_bGrayDisabled
當 時 TRUE
,可讓停用的按鈕繪製為灰色。
BOOL m_bGrayDisabled;
CMFCButton::m_bHighlightChecked
指出游標停留在上方時,是否要反白顯示 BS_CHECKBOX
樣式按鈕。
BOOL m_bHighlightChecked;
備註
將 m_bHighlightChecked
成員設定為 TRUE
,以指定當滑鼠停留在架構上方時,架構會反白顯示 BS_CHECKBOX
樣式按鈕。
CMFCButton::m_bResponseOnButtonDown
指出是否要回應按鈕向下事件。
BOOL m_bResponseOnButtonDown;
CMFCButton::m_bRightImage
指出是否要在按鈕右側顯示影像。
BOOL m_bRightImage;
CMFCButton::m_bTopImage](#m_bTopImage)
指出影像是否位於按鈕頂端。
BOOL m_bTopImage;
備註
將 m_bRightImage
成員設定為 TRUE
,以指定架構會在按鈕文字標籤顯示按鈕的影像。
CMFCButton::m_bTransparent
指出按鈕是否透明。
BOOL m_bTransparent;
備註
將 m_bTransparent
成員設定為 TRUE
,以指定架構會將按鈕設為透明。 建構函式會將 CMFCButton
這個成員初始化為 FALSE
。
CMFCButton::m_nAlignStyle
指定按鈕文字的對齊方式。
AlignStyle m_nAlignStyle;
備註
使用下列 CMFCButton::AlignStyle
其中一個列舉值來指定按鈕文字的對齊方式:
值 | Description |
---|---|
ALIGN_CENTER |
(預設值)將按鈕文字對齊按鈕中央。 |
ALIGN_LEFT |
將按鈕文字對齊按鈕左側。 |
ALIGN_RIGHT |
將按鈕文字對齊按鈕右側。 |
建構函式會將 CMFCButton
這個成員初始化為 ALIGN_CENTER
。
CMFCButton::m_bWasDblClk
](#m_bWasDblClk)|
指出最後一次按兩下事件是否為按兩下。|
BOOL m_bWasDblClk;
CMFCButton::m_nFlatStyle
指定按鈕的樣式,例如無框線、平面、半平面或 3D。
FlatStyle m_nFlatStyle;
備註
下表列出 CMFCButton::m_nFlatStyle
指定按鈕外觀的列舉值。
值 | Description |
---|---|
BUTTONSTYLE_3D |
(預設值)按鈕似乎具有高、立體的側邊。 按鍵時,按鈕會顯示為按下深度縮排。 |
BUTTONSTYLE_FLAT |
當滑鼠未暫停按鈕上方時,按鈕會顯示為二維,而且沒有引發的側邊。 當滑鼠暫停在按鈕上方時,按鈕看起來會有低、立體的兩側。 按兩下按鈕時,按鈕會顯示為淺縮排。 |
BUTTONSTYLE_SEMIFLAT |
按鈕似乎有低維度的三維側邊。 按鍵時,按鈕會顯示為按下深度縮排。 |
BUTTONSTYLE_NOBORDERS |
按鈕沒有引發的側邊,而且一律會顯示二維。 按兩下按鈕時,似乎不會按下縮排。 |
建構函式會將 CMFCButton
這個成員初始化為 BUTTONSTYLE_3D
。
範例
下列範例示範如何在 類別中CMFCButton
設定成員變數的值m_nFlatStyle
。 此範例是 New Controls 範例的一部分。
CMFCButton m_Button;
//int m_iBorderStyle
switch (m_iBorderStyle)
{
case 0:
m_Button.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
break;
case 1:
m_Button.m_nFlatStyle = CMFCButton::BUTTONSTYLE_SEMIFLAT;
break;
case 2:
m_Button.m_nFlatStyle = CMFCButton::BUTTONSTYLE_3D;
}
CMFCButton::OnDraw
由架構呼叫以繪製按鈕。
virtual void OnDraw(
CDC* pDC,
const CRect& rect,
UINT uiState);
參數
pDC
[in]裝置內容的指標。
rect
[in]系結按鈕之矩形的參考。
uiState
[in]目前的按鈕狀態。 如需詳細資訊,請參閱 itemState
Structure 主題的成員DRAWITEMSTRUCT
。
備註
覆寫此方法以使用您自己的程式代碼來繪製按鈕。
CMFCButton::OnDrawBorder
由架構呼叫以繪製按鈕的框線。
virtual void OnDrawBorder(
CDC* pDC,
CRect& rectClient,
UINT uiState);
參數
pDC
[in]裝置內容的指標。
rectClient
[in]系結按鈕之矩形的參考。
uiState
[in]目前的按鈕狀態。 如需詳細資訊,請參閱 itemState
Structure 主題的成員DRAWITEMSTRUCT
。
備註
覆寫此方法以使用您自己的程式代碼來繪製框線。
CMFCButton::OnDrawFocusRect
由架構呼叫以繪製按鈕的焦點矩形。
virtual void OnDrawFocusRect(
CDC* pDC,
const CRect& rectClient);
參數
pDC
[in]裝置內容的指標。
rectClient
[in]系結按鈕之矩形的參考。
備註
覆寫此方法以使用您自己的程式代碼來繪製焦點矩形。
CMFCButton::OnDrawText
由架構呼叫以繪製按鈕文字。
virtual void OnDrawText(
CDC* pDC,
const CRect& rect,
const CString& strText,
UINT uiDTFlags,
UINT uiState);
參數
pDC
[in]裝置內容的指標。
rect
[in]系結按鈕之矩形的參考。
strText
[in]要繪製的文字。
uiDTFlags
[in]指定如何格式化文字的旗標。 如需詳細資訊,請參閱 nFormat
方法的參數 CDC::DrawText
。
uiState
[in] 保留。
備註
覆寫此方法以使用您自己的程式代碼來繪製按鈕文字。
CMFCButton::OnFillBackground
由架構呼叫以繪製按鈕文字的背景。
virtual void OnFillBackground(
CDC* pDC,
const CRect& rectClient);
參數
pDC
[in]裝置內容的指標。
rectClient
[in]系結按鈕之矩形的參考。
備註
覆寫此方法以使用您自己的程式代碼來繪製按鈕的背景。
CMFCButton::SelectFont
擷取與指定裝置內容相關聯的字型。
virtual CFont* SelectFont(CDC* pDC);
參數
pDC
[in]裝置內容的指標。
傳回值
覆寫此方法以使用您自己的程式代碼來擷取字型。
備註
CMFCButton::SetAutorepeatMode
將按鈕設定為自動重複模式。
void SetAutorepeatMode(int nTimeDelay=500);
參數
nTimeDelay
[in]非負數,指定傳送至父視窗之訊息之間的間隔。 間隔是以毫秒為單位來測量,其預設值為 500 毫秒。 指定零以停用自動重複訊息模式。
備註
這個方法會導致按鈕持續將訊息傳送 WM_COMMAND
至父視窗,直到按鈕放開,或 nTimeDelay
參數設定為零為止。
CMFCButton::SetCheckedImage
設定已核取按鈕的影像。
void SetCheckedImage(
HICON hIcon,
BOOL bAutoDestroy=TRUE,
HICON hIconHot=NULL,
HICON hIconDisabled=NULL,
BOOL bAlphaBlend=FALSE);
void SetCheckedImage(
HBITMAP hBitmap,
BOOL bAutoDestroy=TRUE,
HBITMAP hBitmapHot=NULL,
BOOL bMap3dColors=TRUE,
HBITMAP hBitmapDisabled=NULL);
void SetCheckedImage(
UINT uiBmpResId,
UINT uiBmpHotResId=0,
UINT uiBmpDsblResID=0);
參數
hIcon
[in]包含新影像之位圖和遮罩的圖示句柄。
bAutoDestroy
[in] TRUE
指定自動終結位圖資源;否則為 FALSE
。 預設值為 TRUE
。
hIconHot
[in]包含所選狀態影像的圖示句柄。
hBitmap
[in]包含未選取狀態之影像的點陣圖句柄。
hBitmapHot
[in]包含所選狀態影像的點陣圖句柄。
bMap3dColors
[in]指定按鈕背景的透明色彩;也就是說,按鈕的臉部。 TRUE
使用色彩值 RGB(192、192、192): FALSE
表示使用 所 AFX_GLOBAL_DATA::clrBtnFace
定義的色彩值。
uiBmpResId
[in]未選取影像的資源標識碼。
uiBmpHotResId
[in]所選影像的資源標識碼。
hIconDisabled
[in]已停用影像的圖示句柄。
hBitmapDisabled
[in]包含已停用影像的點陣圖句柄。
uiBmpDsblResID
[in]已停用位圖的資源標識碼。
bAlphaBlend
[in] TRUE
僅使用使用Alpha色板的32位影像; FALSE
,不只使用Alpha色板影像。 預設值為 FALSE
。
備註
CMFCButton::SetFaceColor
設定按鈕文字的背景色彩。
void SetFaceColor(
COLORREF crFace,
BOOL bRedraw=TRUE);
參數
crFace
[in]RGB 色彩值。
bRedraw
[in] TRUE
表示立即重新繪製螢幕;否則為 FALSE
。
備註
使用此方法可定義按鈕背景的新填滿色彩(臉部)。 請注意,當成員變數為 TRUE
時CMFCButton::m_bTransparent
,背景不會填滿。
CMFCButton::SetImage
設定按鈕的影像。
void SetImage(
HICON hIcon,
BOOL bAutoDestroy=TRUE,
HICON hIconHot=NULL,
HICON hIconDisabled=NULL,
BOOL bAlphaBlend=FALSE);
void SetImage(
HBITMAP hBitmap,
BOOL bAutoDestroy=TRUE,
HBITMAP hBitmapHot=NULL,
BOOL bMap3dColors=TRUE,
HBITMAP hBitmapDisabled=NULL);
void SetImage(
UINT uiBmpResId,
UINT uiBmpHotResId=0,
UINT uiBmpDsblResID=0);
參數
hIcon
[in]包含新影像之位圖和遮罩的圖示句柄。
bAutoDestroy
[in] TRUE
指定自動終結位圖資源;否則為 FALSE
。 預設值為 TRUE
。
hIconHot
[in]包含所選狀態影像的圖示句柄。
hBitmap
[in]包含未選取狀態之影像的點陣圖句柄。
hBitmapHot
[in]包含所選狀態影像的點陣圖句柄。
uiBmpResId
[in]未選取影像的資源標識碼。
uiBmpHotResId
[in]所選影像的資源標識碼。
bMap3dColors
[in]指定按鈕背景的透明色彩;也就是說,按鈕的臉部。 TRUE
使用色彩值 RGB(192、192、192): FALSE
表示使用 所 AFX_GLOBAL_DATA::clrBtnFace
定義的色彩值。
hIconDisabled
[in]已停用影像的圖示句柄。
hBitmapDisabled
[in]包含已停用影像的點陣圖句柄。
uiBmpDsblResID
[in]已停用位圖的資源標識碼。
bAlphaBlend
[in] TRUE
僅使用使用Alpha色板的32位影像; FALSE
,不只使用Alpha色板影像。 預設值為 FALSE
。
備註
範例
下列範例示範如何在 類別中使用CMFCButton
各種版本的 SetImage
方法。 此範例是 New Controls 範例的一部分。
CMFCButton m_Button;
// int m_iImage
// IDB_BTN1_32, IDB_BTN1_HOT_32, IDB_BTN1, IDB_BTN1_HOT are int macros that are #define.
if (m_iImage == 1)
{
m_Button.SetImage((HBITMAP)NULL);
}
else
{
m_Button.SetImage(IDB_BTN1_32, IDB_BTN1_HOT_32);
}
CMFCButton::SetMouseCursor
設定游標影像。
void SetMouseCursor(HCURSOR hcursor);
參數
hcursor
[in]數據指標的句柄。
備註
使用此方法可將游標影像,例如手游標與按鈕產生關聯。 數據指標會從應用程式資源載入。
範例
下列範例示範如何在 類別中使用 SetMouseCursor
CMFCButton
方法。 此範例是新控件範例中程序代碼的一部分。
CMFCButton m_Button;
// int m_iCursor
void CPage1::OnSetCursor()
{
UpdateData();
switch (m_iCursor)
{
case 0:
m_Button.SetMouseCursor(NULL);
break;
case 1:
m_Button.SetMouseCursorHand();
break;
case 2:
m_Button.SetMouseCursor(AfxGetApp()->LoadCursor(IDC_CURSOR));
break;
}
}
CMFCButton::SetMouseCursorHand
將游標設定為手部的影像。
void SetMouseCursorHand();
備註
使用此方法可將手部的數據指標影像與按鈕產生關聯。 數據指標會從應用程式資源載入。
CMFCButton::SetStdImage
CMenuImages
使用物件來設定按鈕影像。
void SetStdImage(
CMenuImages::IMAGES_IDS id,
CMenuImages::IMAGE_STATE state=CMenuImages::ImageBlack,
CMenuImages::IMAGES_IDS idDisabled=(CMenuImages::IMAGES_IDS)0);
參數
id
[in]列舉中 CMenuImage::IMAGES_IDS
定義的其中一個按鈕影像標識碼。 影像值會指定箭號、釘選和單選按鈕等影像。
state
[in]列舉中 CMenuImages::IMAGE_STATE
定義的其中一個按鈕影像狀態標識碼。 影像狀態會指定按鈕色彩,例如黑色、灰色、淺灰色、白色和深灰色。 預設值是 CMenuImages::ImageBlack
。
idDisabled
[in]列舉中 CMenuImage::IMAGES_IDS
定義的其中一個按鈕影像標識碼。 影像表示按鈕已停用。 預設值是第一個按鈕影像 ( CMenuImages::IdArrowDown
。
備註
CMFCButton::SetTextColor
設定未選取之按鈕的按鈕文字色彩。
void SetTextColor(COLORREF clrText);
參數
clrText
[in]RGB 色彩值。
備註
CMFCButton::SetTextHotColor
設定選取按鈕的按鈕文字色彩。
void SetTextHotColor(COLORREF clrTextHot);
參數
clrTextHot
[in]RGB 色彩值。
備註
CMFCButton::SetTooltip
將工具提示與按鈕產生關聯。
void SetTooltip(LPCTSTR lpszToolTipText);
參數
lpszToolTipText
[in]工具提示文字的指標。 指定 NULL
以停用工具提示。
備註
CMFCButton::SizeToContent
調整按鈕大小以包含其按鈕文字和影像。
virtual CSize SizeToContent(BOOL bCalcOnly=FALSE);
參數
bCalcOnly
[in] TRUE
若要計算按鈕的新大小,但不會變更; FALSE
表示變更按鈕的大小。 預設值為 FALSE
。
傳回值
CSize
物件,包含按鈕的新大小。
備註
根據預設,此方法會計算新的大小,其中包含 10 像素的水平邊界和 5 像素的垂直邊界。