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
变量添加到应用程序,然后调用 CMFCButton
对象的构造函数和 Create
方法。 如果使用“MFC 类向导”,请将 CButton
变量添加到应用程序,然后将变量的类型从 CButton
更改为 CMFCButton
。
要处理对话框应用程序中的通知消息,请为每个通知添加消息映射条目和事件处理程序。 CMFCButton
对象发送的通知与 CButton
对象发送的通知相同。
示例
以下示例演示如何使用 CMFCButton
类中的各种方法配置按钮的属性。 本示例是新控件示例的一部分。
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;
返回值
如果按钮为 BS_AUTOCHECKBOX
或 BS_AUTORADIOBUTTON
样式,则为 TRUE
;否则为 FALSE
。
备注
CMFCButton::IsAutorepeatCommandMode
指示按钮是否设置为自动重复模式。
BOOL IsAutorepeatCommandMode() const;
返回值
如果按钮设置为自动重复模式,则为 TRUE
;否则为 FALSE
.
注解
使用 CMFCButton::SetAutorepeatMode
方法将按钮设置为自动重复模式。
CMFCButton::IsCheckBox
指示按钮是否为复选框按钮。
BOOL IsCheckBox() const;
返回值
如果按钮为 BS_CHECKBOX
或 BS_AUTOCHECKBOX
样式,则为 TRUE
;否则为 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;
返回值
如果按钮样式为 BS_RADIOBUTTON
或 BS_AUTORADIOBUTTON
,则为 TRUE
;否则为 FALSE
。
注解
CMFCButton::IsWindowsThemingEnabled
指示按钮边框的样式是否与当前 Windows 主题相对应。
static BOOL IsWindowsThemingEnabled();
返回值
如果按钮边框的样式与当前 Windows 主题相对应,则为 TRUE
;否则为 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
枚举值指定按钮文本的对齐方式:
值 | 说明 |
---|---|
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
枚举值。
值 | 说明 |
---|---|
BUTTONSTYLE_3D |
(默认)按钮显示有较高的三维边。 单击按钮时,该按钮显示有一个较深的缩进。 |
BUTTONSTYLE_FLAT |
当鼠标不停在按钮上时,该按钮显示为二维,并且没有凸起的边。 当鼠标停在按钮上时,该按钮显示有较低的三维边。 单击按钮时,该按钮显示有一个较浅的缩进。 |
BUTTONSTYLE_SEMIFLAT |
该按钮显示有较低的三维边。 单击按钮时,该按钮显示有一个较深的缩进。 |
BUTTONSTYLE_NOBORDERS |
该按钮没有凸起的边,并且始终显示为二维。 单击按钮时,该按钮没有缩进。 |
CMFCButton
构造函数将此成员初始化为 BUTTONSTYLE_3D
。
示例
下面的示例演示了如何在 CMFCButton
类中设置 m_nFlatStyle
成员变量的值。 本示例是新控件示例的一部分。
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] 当前按钮状态。 有关详细信息,请参阅 DRAWITEMSTRUCT
结构的 itemState
成员主题。
注解
重写此方法以使用自己的代码绘制按钮。
CMFCButton::OnDrawBorder
由框架调用以绘制按钮的边框。
virtual void OnDrawBorder(
CDC* pDC,
CRect& rectClient,
UINT uiState);
参数
pDC
[in] 指向设备上下文的指针。
rectClient
[in] 对限定按钮的矩形的引用。
uiState
[in] 当前按钮状态。 有关详细信息,请参阅 DRAWITEMSTRUCT
结构的 itemState
成员主题。
备注
重写此方法以使用自己的代码绘制边框。
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] 用于指定如何设置文本格式的标记。 有关详细信息,请参阅 CDC::DrawText
方法的 nFormat
参数。
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 毫秒。 指定零可禁用自动重复消息模式。
备注
在按钮被释放或 nTimeDelay
参数设置为零之前,此方法会不断向父窗口发送 WM_COMMAND
消息。
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] 未选中的图像的资源 ID。
uiBmpHotResId
[in] 选中的图像的资源 ID。
hIconDisabled
[in] 禁用的图像的图标句柄。
hBitmapDisabled
[in] 包含禁用的图像的位图句柄。
uiBmpDsblResID
[in] 禁用的位图的资源 ID。
bAlphaBlend
[in] 如果为 TRUE
,则只使用使用 alpha 通道的 32 位图像;如果为 FALSE
,则不只使用 alpha 通道图像。 默认值为 FALSE
。
备注
CMFCButton::SetFaceColor
设置按钮文本的背景色。
void SetFaceColor(
COLORREF crFace,
BOOL bRedraw=TRUE);
参数
crFace
[in] RGB 颜色值。
bRedraw
[in] 如果值为 TRUE
,则立即重绘屏幕;否则为 FALSE
。
注解
使用此方法可为按钮背景(表面)定义新的填充颜色。 请注意,如果 CMFCButton::m_bTransparent
成员变量为 TRUE
,则不会填充背景。
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] 未选中的图像的资源 ID。
uiBmpHotResId
[in] 选中的图像的资源 ID。
bMap3dColors
[in] 指定按钮背景的透明色;即按钮的表面。 如果为 TRUE
,则使用颜色值 RGB(192, 192, 192);如果为 FALSE
,则使用 AFX_GLOBAL_DATA::clrBtnFace
定义的颜色值。
hIconDisabled
[in] 禁用的图像的图标句柄。
hBitmapDisabled
[in] 包含禁用的图像的位图句柄。
uiBmpDsblResID
[in] 禁用的位图的资源 ID。
bAlphaBlend
[in] 如果为 TRUE
,则只使用使用 alpha 通道的 32 位图像;如果为 FALSE
,则不只使用 alpha 通道图像。 默认值为 FALSE
。
注解
示例
以下示例演示如何在 CMFCButton
类中使用各种版本的 SetImage
方法。 本示例是新控件示例的一部分。
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] 光标的句柄。
注解
使用此方法可将光标图像(如手形光标)与按钮相关联。 光标是从应用程序资源加载的。
示例
以下示例演示了如何在 CMFCButton
类中使用 SetMouseCursor
方法。 本示例是新控件示例中的部分代码。
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 像素的垂直边距。