CDialogBar怎么样写派生类实现根据传入数量动态生成静态文本框,上面可以修改文本颜色、背景色
时间: 2024-03-22 09:39:27 浏览: 82
要实现根据传入数量动态生成静态文本框的功能,可以在派生类的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进行判断,同时设置对应的画刷并返回。
相关推荐


















