VS2010 MFC写一个CDialogBar的派生类,要根据输入的按钮数据和颜色文本动态生成,并能够增加删除按钮,需要全部实现代码
时间: 2024-03-23 07:37:57 浏览: 120
jquery动态生成文本框,含删除按钮
好的,下面是完整的代码实现:
MyDialogBar.h:
```C++
#pragma once
class CMyDialogBar : public CDialogBar
{
public:
CMyDialogBar();
virtual ~CMyDialogBar();
void SetButtonData(const CStringArray& arrButtonData, const CStringArray& arrColorText);
void AddButton(const CString& strButtonText, const CString& strColorText);
void RemoveButton(int nIndex);
private:
CStringArray m_arrButtonData;
CStringArray m_arrColorText;
};
```
MyDialogBar.cpp:
```C++
#include "stdafx.h"
#include "MyDialogBar.h"
CMyDialogBar::CMyDialogBar()
{
m_arrButtonData.RemoveAll();
m_arrColorText.RemoveAll();
}
CMyDialogBar::~CMyDialogBar()
{
}
void CMyDialogBar::SetButtonData(const CStringArray& arrButtonData, const CStringArray& arrColorText)
{
m_arrButtonData.Copy(arrButtonData);
m_arrColorText.Copy(arrColorText);
// 根据按钮数据和颜色文本动态生成按钮
int nButtonCount = m_arrButtonData.GetCount();
for (int i = 0; i < nButtonCount; i++)
{
CString strButtonText = m_arrButtonData.GetAt(i);
CString strColorText = m_arrColorText.GetAt(i);
CButton* pButton = new CButton();
pButton->Create(strButtonText, WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER, CRect(0, 0, 0, 0), this, i + 1);
pButton->SetFont(GetFont());
// 绘制按钮背景色
CDC* pDC = GetDC();
CRect rectButton;
pButton->GetClientRect(rectButton);
CBrush brushButtonColor(RGB(255, 0, 0)); // 这里使用固定的红色作为按钮背景色,您需要根据颜色文本动态生成对应的颜色
pDC->FillRect(rectButton, &brushButtonColor);
// 绘制颜色文本
pDC->SetTextColor(RGB(255, 255, 255)); // 文本颜色为白色
pDC->SetBkMode(TRANSPARENT); // 文本背景透明
pDC->DrawText(strColorText, rectButton, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
ReleaseDC(pDC);
}
// 调整按钮布局
CRect rectClient;
GetClientRect(rectClient);
int nButtonWidth = rectClient.Width() / nButtonCount;
int nButtonHeight = rectClient.Height();
for (int i = 0; i < nButtonCount; i++)
{
CButton* pButton = (CButton*)GetDlgItem(i + 1);
pButton->MoveWindow(i * nButtonWidth, 0, nButtonWidth, nButtonHeight);
}
}
void CMyDialogBar::AddButton(const CString& strButtonText, const CString& strColorText)
{
int nIndex = m_arrButtonData.GetSize();
m_arrButtonData.Add(strButtonText);
m_arrColorText.Add(strColorText);
SetButtonData(m_arrButtonData, m_arrColorText);
}
void CMyDialogBar::RemoveButton(int nIndex)
{
m_arrButtonData.RemoveAt(nIndex);
m_arrColorText.RemoveAt(nIndex);
SetButtonData(m_arrButtonData, m_arrColorText);
}
```
使用方法:
在您的对话框类中添加一个CMyDialogBar成员变量:
```C++
CMyDialogBar m_wndMyDialogBar;
```
然后在OnInitDialog函数中创建并初始化该对话框条:
```C++
BOOL CMyDialogDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 创建对话框条
if (!m_wndMyDialogBar.Create(this, IDD_MYDIALOGBAR, CBRS_TOP, IDD_MYDIALOGBAR))
{
TRACE0("Failed to create dialog bar\n");
return FALSE;
}
// 设置按钮数据和颜色文本
CStringArray arrButtonData;
arrButtonData.Add(_T("Button1"));
arrButtonData.Add(_T("Button2"));
arrButtonData.Add(_T("Button3"));
CStringArray arrColorText;
arrColorText.Add(_T("Red"));
arrColorText.Add(_T("Green"));
arrColorText.Add(_T("Blue"));
m_wndMyDialogBar.SetButtonData(arrButtonData, arrColorText);
return TRUE;
}
```
您可以使用AddButton函数增加新的按钮,例如:
```C++
m_wndMyDialogBar.AddButton(_T("Button4"), _T("Yellow"));
```
您可以使用RemoveButton函数删除指定位置的按钮,例如:
```C++
m_wndMyDialogBar.RemoveButton(2);
```
其中,参数2表示要删除的按钮在按钮数组中的位置,因为数组从0开始计数,所以这里表示要删除第3个按钮。
希望这能帮助您!
阅读全文