MFC 改變static字型顏色、大小、背景顏色【自定義類】
阿新 • • 發佈:2019-02-14
新建一個MFC標準Dialog工程並生成一個CStatic的自定義類,我的類名為CColorStatic
定義必要變數
protected:
COLORREF m_crText; // 字型顏色
COLORREF m_crBackColor; // 背景顏色
HBRUSH m_hBrush; // 畫刷
LOGFONT m_lf; // 字型大小
CFont m_font; // 字型
bool m_bTran; // 是否透明
過載CColorStatic類中的=WM_CTLCOLOR事件,是有=,不是WM_CTLCOLOR事件
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;
另外新增一些介面類函式
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 部分程式碼
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); }