CBitmapButton 类

创建使用位图图像而非文本进行标记的按钮控件。

语法

class CBitmapButton : public CButton

成员

公共构造函数

名称 描述
CBitmapButton::CBitmapButton 构造 CBitmapButton 对象。

公共方法

名称 描述
CBitmapButton::AutoLoad 将对话框中的按钮与 CBitmapButton 类的对象关联,按名称加载位图,并调整该按钮的大小以适应位图。
CBitmapButton::LoadBitmaps 通过从应用程序的资源文件加载一个或多个命名位图资源并将位图附加到对象来初始化对象。
CBitmapButton::SizeToContent 调整按钮的大小以适应位图。

备注

CBitmapButton 对象最多包含四个位图,其中包含用于按钮可以具有的不同状态的图像:向上(或正常)、向下(或选定)、已设定焦点和已禁用。 只有第一个位图是必需的;其他位图是可选的。

位图按钮图像包括图像周围的边框以及图像本身。 边框通常在显示按钮状态时起作用。 例如,用于已设定焦点状态的位图通常类似于用于向上状态的位图,但边框上插入了虚线矩形或是边框处有粗实线。 用于已禁用状态的位图通常类似于用于向上状态的位图,但对比度较低(如变暗或灰显的菜单选择)。

这些位图可以是任意大小,但所有位图都被视为与用于向上状态的位图大小相同。

各种应用程序需要不同的位图图像组合:

向上 向下 Focused 已禁用 应用程序
× Bitmap
× × 不带 WS_TABSTOP 样式的按钮
× × × × 具有所有状态的对话框按钮
× × × 带有 WS_TABSTOP 样式的对话框按钮

创建位图按钮控件时,设置 BS_OWNERDRAW 样式以指定该按钮是所有者绘制的。 这会使 Windows 为按钮发送 WM_MEASUREITEM 和 WM_DRAWITEM 消息;框架会为你处理这些消息并管理按钮的外观。

在窗口的工作区中创建位图按钮控件

  1. 为按钮创建一到四个位图图像。

  2. 构造 CBitmapButton 对象。

  3. 调用 Create 函数以创建 Windows 按钮控件并将其附加到 CBitmapButton 对象。

  4. 调用 LoadBitmaps 成员函数以在构造位图按钮后加载位图资源。

在对话框中包含位图按钮控件

  1. 为按钮创建一到四个位图图像。

  2. 创建一个对话框模板,其中包含一个定位到位图按钮所需位置的所有者绘制按钮。 模板中按钮的大小并不重要。

  3. 将按钮的标题设置为“MYIMAGE”等值,并为按钮定义符号(如 IDC_MYIMAGE)。

  4. 在应用程序的资源脚本中,向为按钮创建的每个图像提供 ID,其构造方法是将字母“U”、“D”、“F”或“X”(用于向上、向下、已设定焦点和已禁用)中的一个追加到步骤 3 中用于按钮标题的字符串。 例如,对于按钮标题“MYIMAGE”,ID 为“MYIMAGEU”、“MYIMAGED”、“MYIMAGEF”和“MYIMAGEX”。必须在双引号中指定位图的 ID。 否则,资源编辑器会为资源分配整数,MFC 会在加载图像时失败。

  5. 在应用程序的对话类(派生自 CDialog)中,添加 CBitmapButton 成员对象。

  6. CDialog 对象的 OnInitDialog 例程中,使用按钮的控件 ID 和 CDialog 对象的 this 指针作为参数来调用 CBitmapButton 对象的 AutoLoad 函数。

如果你要处理由位图按钮控件发送到其父级(通常是从 CDialog 派生的类)的 Windows 通知消息(如 BN_CLICKED),请对每个消息,将消息映射条目和消息处理程序成员函数添加到 CDialog 派生的对象。 CBitmapButton 对象发送的通知与 CButton 对象发送的通知相同。

CToolBar 采用不同的位图按钮方法。

有关 CBitmapButton 的详细信息,请参阅控件

继承层次结构

CObject

CCmdTarget

CWnd

CButton

CBitmapButton

要求

标头:afxext.h

CBitmapButton::AutoLoad

将对话框中的按钮与 CBitmapButton 类的对象关联,按名称加载位图,并调整该按钮的大小以适应位图。

BOOL AutoLoad(
    UINT nID,
    CWnd* pParent);

参数

nID
按钮的控件 ID。

pParent
指向拥有按钮的对象的指针。

返回值

如果成功,则不为 0;否则为 0。

注解

使用 AutoLoad 函数将对话框中的所有者绘制按钮初始化为位图按钮。 有关使用此函数的说明,请参阅 CBitmapButton 类的注解。

示例

CBitmapButton myButton;

// Initialize the owner-drawn button with the id IDC_MYBUTTON as a bitmap
// button. This code is used in the OnInitDialog handler of my dialog.
myButton.AutoLoad(IDC_MYBUTTON, this);

CBitmapButton::CBitmapButton

创建一个 CBitmapButton 对象。

CBitmapButton();

备注

创建 C++ CBitmapButton 对象后,调用 CButton::Create 以创建 Windows 按钮控件并将其附加到 CBitmapButton 对象。

示例

// Declare a bitmap button object on the stack.
CBitmapButton myButton;

// Declare a bitmap button object on the heap.
CBitmapButton *pmyButton = new CBitmapButton;

CBitmapButton::LoadBitmaps

要加载通过其资源名称或 ID 号标识的位图图像时,或是无法使用 AutoLoad 函数(例如是由于要创建不属于对话框一部分的位图按钮)时,请使用此函数。

BOOL LoadBitmaps(
    LPCTSTR lpszBitmapResource,
    LPCTSTR lpszBitmapResourceSel = NULL,
    LPCTSTR lpszBitmapResourceFocus = NULL,
    LPCTSTR lpszBitmapResourceDisabled = NULL);

BOOL LoadBitmaps(
    UINT nIDBitmapResource,
    UINT nIDBitmapResourceSel = 0,
    UINT nIDBitmapResourceFocus = 0,
    UINT nIDBitmapResourceDisabled = 0);

参数

lpszBitmapResource
指向以 null 结尾的字符串,该字符串包含用于位图按钮正常或“向上”状态的位图的名称。 必需。

lpszBitmapResourceSel
指向以 null 结尾的字符串,该字符串包含用于位图按钮选定或“向下”状态的位图的名称。 可能为 NULL。

lpszBitmapResourceFocus
指向以 null 结尾的字符串,该字符串包含用于位图按钮已设定焦点状态的位图的名称。 可能为 NULL。

lpszBitmapResourceDisabled
指向以 null 结尾的字符串,该字符串包含用于位图按钮已禁用状态的位图的名称。 可能为 NULL。

nIDBitmapResource
指定用于位图按钮正常或“向上”状态的位图资源的资源 ID 号。 必需。

nIDBitmapResourceSel
指定用于位图按钮选定或“向下”状态的位图资源的资源 ID 号。 可以为 0。

nIDBitmapResourceFocus
指定用于位图按钮已设定焦点状态的位图资源的资源 ID 号。 可以为 0。

nIDBitmapResourceDisabled
指定用于位图按钮已禁用状态的位图资源的资源 ID 号。 可以为 0。

返回值

如果成功,则不为 0;否则为 0。

示例


// Create the bitmap button (must include the BS_OWNERDRAW style).
pmyButton->Create(NULL, WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
                  CRect(10, 10, 100, 100), pParentWnd, 1);

// Load the bitmaps for this button.
pmyButton->LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);

CBitmapButton::SizeToContent

调用此函数可将位图按钮的大小重设为位图的大小。

void SizeToContent();

示例

CBitmapButton *pmyButton = new CBitmapButton();

// Create the bitmap button (must include the BS_OWNERDRAW style).
pmyButton->Create(NULL, WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
                  CRect(10, 10, 100, 100), pParentWnd, 1);

// Load the bitmaps for this button.
pmyButton->LoadBitmaps(IDB_UP, IDB_DOWN, IDB_FOCUS, IDB_DISABLE);

// Resize the button to be the size of the bitmaps.
pmyButton->SizeToContent();

另请参阅

MFC 示例 CTRLTEST
CButton 类
层次结构图