MFC自绘按钮与图标实现教程

在Windows编程中,MFC(Microsoft Foundation Classes)为开发人员提供了强大的框架。通过重写CButton类的方法,尤其是OnPaint()方法,我们可以实现自绘按钮并添加图标。以下是实现过程:

创建自定义按钮类

首先,创建一个派生自CButton的新类,如CMyCustomButton,并重写OnPaint()方法来实现自绘按钮。

class CMyCustomButton : public CButton {
  DECLARE_DYNAMIC(CMyCustomButton)
public:
  CMyCustomButton();
  virtual ~CMyCustomButton();
protected:
  afx_msg void OnPaint();
  DECLARE_MESSAGE_MAP()
};

绘制按钮图标

OnPaint()方法中,我们使用CPaintDC来获取绘制设备上下文(DC),并利用CDC类的DrawIcon()方法绘制图标。

void CMyCustomButton::OnPaint() {
  CPaintDC dc(this); // 获取DC
  CRect rect;
  GetClientRect(rect); // 获取按钮区域
  dc.FillSolidRect(rect, RGB(255, 255)); // 填充背景
  dc.DrawIcon(rect.left + 10, rect.top + 10, hIcon); // 绘制图标
  CString text;
  GetWindowText(text);
  dc.DrawText(text, rect, DT_CENTER | DT_VCENTER); // 绘制文字
  CButton::OnPaint(); // 防止父窗口绘制
}

设置图标

在按钮构造函数中,可以加载图标资源并设置为按钮图标。

CMyCustomButton::CMyCustomButton() {
  hIcon = AfxGetApp()->LoadIcon(IDI_MY_ICON);
}

资源编辑器设置

在资源编辑器中创建按钮控件,并将其类设置为CMyCustomButton。此后,通过消息映射和代码进行图标的动态加载。

通过以上步骤,我们可以创建具有自定义外观的按钮,包括图标和文字。MFC的自绘按钮功能不仅提升了界面的可定制性,也增强了用户体验。

zip 文件大小:11.02MB