您的位置:首页 > 其它

MFC 改变static字体颜色、大小、背景颜色【自定义类】

2012-02-16 11:26 609 查看
新建一个MFC标准Dialog工程并生成一个CStatic的自定义类,我的类名为CColorStatic

定义必要变量

[cpp] view plaincopyprint?

protected:

COLORREF m_crText; // 字体颜色

COLORREF m_crBackColor; // 背景颜色

HBRUSH m_hBrush; // 画刷

LOGFONT m_lf; // 字体大小

CFont m_font; // 字体

bool m_bTran; // 是否透明

protected:

COLORREF m_crText; // 字体颜色

COLORREF m_crBackColor; // 背景颜色

HBRUSH m_hBrush; // 画刷

LOGFONT m_lf; // 字体大小

CFont m_font; // 字体

bool m_bTran; // 是否透明

重载CColorStatic类中的=WM_CTLCOLOR事件,是有=,不是WM_CTLCOLOR事件

[cpp] view plaincopyprint?

HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)

{

// TODO: 在此更改 DC 的任何属性

// TODO: 如果不应调用父级的处理程序,则返回非 null 画笔

if (CTLCOLOR_STATIC == nCtlColor)

{

pDC->SelectObject(&m_font);

pDC->SetTextColor(m_crText);

pDC->SetBkColor(m_crBackColor);

if (m_bTran == true)

pDC->SetBkMode(TRANSPARENT);

}

return m_hBrush;

HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)

{

// TODO: 在此更改 DC 的任何属性

// TODO: 如果不应调用父级的处理程序,则返回非 null 画笔

if (CTLCOLOR_STATIC == nCtlColor)

{

pDC->SelectObject(&m_font);

pDC->SetTextColor(m_crText);

pDC->SetBkColor(m_crBackColor);

if (m_bTran == true)

pDC->SetBkMode(TRANSPARENT);

}

return m_hBrush;

另外添加一些接口类函数

[cpp] view plaincopyprint?

void CColorStatic::SetTextColor( COLORREF crText )

{

m_crText = crText;

RedrawWindow();

}

void CColorStatic::SetFontSize(int nSize)

{

nSize *= -1;

m_lf.lfHeight = nSize;

m_font.DeleteObject();

m_font.CreateFontIndirect(&m_lf);

RedrawWindow();

}

void CColorStatic::SetBackColor(COLORREF crBackColor)

{

m_crBackColor = crBackColor;

RedrawWindow();

}

void CColorStatic::SetTransparent(bool bTran)

{

m_bTran = bTran;

RedrawWindow();

}

void CColorStatic::SetTextColor( COLORREF crText )

{

m_crText = crText;

RedrawWindow();

}

void CColorStatic::SetFontSize(int nSize)

{

nSize *= -1;

m_lf.lfHeight = nSize;

m_font.DeleteObject();

m_font.CreateFontIndirect(&m_lf);

RedrawWindow();

}

void CColorStatic::SetBackColor(COLORREF crBackColor)

{

m_crBackColor = crBackColor;

RedrawWindow();

}

void CColorStatic::SetTransparent(bool bTran)

{

m_bTran = bTran;

RedrawWindow();

}

至此就结束了。

Dome 部分代码

[cpp] view plaincopyprint?

void CColorStaticDomeDlg::OnBnClickedOk()

{

// TODO: 在此添加控件通知处理程序代码

//OnOK();

m_static1.SetTransparent(FALSE);

m_static1.SetTextColor(RGB(255,0,0));

m_static1.SetBackColor(RGB(0,255,0));

m_static1.SetFontSize(15);

m_static2.SetTextColor(RGB(0,255,255));

m_static2.SetFontSize(20);

}

/article/2086398.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: