CDialogBar怎么样写派生类实现根据传入数量动态生成静态文本框,上面可以修改文本颜色、背景色
时间: 2024-03-22 18:39:27 浏览: 64
要实现根据传入数量动态生成静态文本框的功能,可以在派生类的OnInitDialog函数中添加以下代码:
```
BOOL CMyDialogBar::OnInitDialog()
{
CDialogBar::OnInitDialog();
// 根据传入数量动态生成静态文本框
for (int i = 0; i < m_nTextCount; i++)
{
CStatic* pStatic = new CStatic;
pStatic->Create(_T(""), WS_CHILD | WS_VISIBLE | SS_NOTIFY, CRect(10, 10 + i * 20, 200, 30 + i * 20), this, 1000 + i);
m_StaticList.AddTail(pStatic);
}
return TRUE;
}
```
其中,`m_nTextCount`为传入的静态文本框数量,`m_StaticList`为存储静态文本框指针的链表。在添加静态文本框时,可以设置其位置、大小、风格等属性。
如果要实现修改文本颜色、背景色的功能,可以在消息映射中添加以下代码:
```
BEGIN_MESSAGE_MAP(CMyDialogBar, CDialogBar)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
HBRUSH CMyDialogBar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogBar::OnCtlColor(pDC, pWnd, nCtlColor);
// 修改文本颜色、背景色
if (nCtlColor == CTLCOLOR_STATIC)
{
for (POSITION pos = m_StaticList.GetHeadPosition(); pos != NULL;)
{
CStatic* pStatic = (CStatic*)m_StaticList.GetNext(pos);
if (pWnd->GetDlgCtrlID() == pStatic->GetDlgCtrlID())
{
pDC->SetTextColor(m_crText); // 设置文本颜色
pDC->SetBkColor(m_crBackground); // 设置背景色
return m_Brush.GetSafeHandle(); // 返回画刷
}
}
}
return hbr;
}
```
其中,`m_crText`和`m_crBackground`分别为文本颜色和背景色,`m_Brush`为画刷对象。在修改文本颜色、背景色时,可以根据静态文本框的ID进行判断,同时设置对应的画刷并返回。
阅读全文