mfc对话框重写cbutton类
时间: 2023-12-24 19:03:50 浏览: 144
如果你想在 MFC 对话框中使用自定义的 CButton 控件,可以通过重写 CButton 类来实现。
以下是示例代码:
1. 创建一个新的 MFC 对话框应用程序。
2. 打开对话框资源,将一个普通按钮控件拖动到对话框中。
3. 右键单击该按钮控件,选择“属性”。
4. 在属性窗口中,将“ID”设为 IDC_MYBUTTON,然后将“样式”设为“自动大小”。
5. 单击“确定”以关闭属性窗口。
6. 在 Visual Studio 中,打开 ClassView 窗口,找到对话框类。
7. 右键单击对话框类,选择“添加类”。
8. 在“添加类”对话框中,选择“MFC 类”,然后选择“CButton”作为基类。
9. 为新的 CButton 类指定名称(例如 MyButton)和文件名(例如 MyButton.cpp 和 MyButton.h)。
10. 在 MyButton.h 中,将类声明更改为以下内容:
```cpp
#pragma once
#include "afxbutton.h"
class MyButton : public CMFCButton
{
public:
MyButton();
virtual ~MyButton();
virtual BOOL PreTranslateMessage(MSG* pMsg);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
```
11. 在 MyButton.cpp 中,将类实现更改为以下内容:
```cpp
#include "stdafx.h"
#include "MyButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
MyButton::MyButton()
{
}
MyButton::~MyButton()
{
}
BOOL MyButton::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
return CMFCButton::PreTranslateMessage(pMsg);
}
void MyButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CMFCButton::OnLButtonUp(nFlags, point);
}
BEGIN_MESSAGE_MAP(MyButton, CMFCButton)
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
```
12. 在对话框类的头文件中添加一个 MyButton 类成员变量:
```cpp
#include "MyButton.h"
class CMFCApplication1Dlg : public CDialogEx
{
// ...
private:
MyButton m_MyButton;
// ...
};
```
13. 在 OnInitDialog() 函数中,使用以下代码创建 MyButton 控件:
```cpp
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_MyButton.Create(_T("My Button"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_AUTOSIZE, CRect(10, 10, 100, 30), this, IDC_MYBUTTON);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
```
现在你已经成功地重写了 CButton 类并创建了一个自定义按钮控件。
阅读全文