static text文字修改顏色和字型的解決辦法

來源:互聯網
上載者:User

第一種辦法(應該是最好的辦法,可以正對單個控制項來修改顏色,也許對其他類型的控制項也可通用):

 首先我們在對話方塊中添加OnCtlColor訊息映射函數,函數作用/函數原型/參數解釋請看MSDN描述~

QUOTE:

CWnd::OnCtlColor See Also

CWnd Overview | Class Members | Hierarchy Chart | CDC::SetBkColor

The framework calls this member function when a child control is about to be drawn.


afx_msg HBRUSH OnCtlColor(

   CDC* pDC,

   CWnd* pWnd,

   UINT nCtlColor 

);

Parameters

pDC 

Contains a pointer to the display context for the child window. May be temporary. 

pWnd 

Contains a pointer to the control asking for the color. May be temporary. 

nCtlColor 

Contains one of the following values, specifying the type of control: 

CTLCOLOR_BTN   Button control 

CTLCOLOR_DLG   Dialog box 

CTLCOLOR_EDIT   Edit control 

CTLCOLOR_LISTBOX   List-box control 

CTLCOLOR_MSGBOX   Message box 

CTLCOLOR_SCROLLBAR   Scroll-bar control 

CTLCOLOR_STATIC   Static control 

Return Value

OnCtlColor must return a handle to the brush that is to be used for painting the control background.

然後我們在對話方塊上放置兩個STATIC控制項,ID分別為:IDC_STCCOLOR和IDC_STCTWO。然後在對話方塊的類中新增成員變數(別告訴我你不知道怎麼添加……),變數需要兩個,每個成員變數對應一個控制項~

  ps:變數種類要選擇控制項變數~這要的控制項變數的類型一般是CStatic~

  然後我們在剛才的那個訊息映射函數中寫下下列代碼:

QUOTE:

HBRUSH CMFCDialogDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

  HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);


  if (GetDlgItem(IDC_STCCOLOR) == pWnd)

  {

    pDC->SetTextColor(#ff0000);

  }

  else if (GetDlgItem(IDC_STCTWO) == pWnd)  

  {

    pDC->SetTextColor(#0000ff);

  }


  return hbr;

}

這裡之所以要先判斷控制代碼,是因為我們要針對某一個控制項進行設定。如果你直接使用pDC->SetTextColor來設定,那麼MFC會遍曆表單的所有控制項,然後把顏色設定成一樣。

  至於為什麼要添加控制項的成員變數,我們可以在對話方塊的CPP檔案中發現這段代碼:

QUOTE:

void CMFCDialogDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, IDC_STCCOLOR, m_cstcColor);

DDX_Control(pDX, IDC_STCTWO, m_cstcTwo);

}

 

 

第二種辦法:

在實際的應用中,可以用WM_CTLCOLOR 訊息改變mfc中控制項的顏色,比如現在就來改變一個static text孔家的

背景色和字型

1 在對話方塊的類中添加兩個變數:

CBrush m_brush;

CFont m_font;

在OnInitDialog()函數中添加:

// TODO: 在此添加額外的初始化代碼

m_font.CreatePointFont(150,"華文行楷");

m_brush.CreateSolidBrush(#00ff00);

2 添加WM_CTLCOLOR 訊息響應,添加的方法為:

  在對話方塊類中聲明:afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ;

  在訊息映射中添加: ON_WM_CTLCOLOR()

  如:

 BEGIN_MESSAGE_MAP(CtestEnvDlg, CDialog)

     ON_WM_CTLCOLOR()

 //}}AFX_MSG_MAP

 END_MESSAGE_MAP()

 

3 添加響應函數:

HBRUSH CYourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 

{

   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

   if(m_yourStatic.m_hWnd == pWnd->m_hWnd)

   {

    pDC->SetBkColor(#00ff00);

    pDC->SelectObject(&m_font);

    return m_brush;

   }

   return hbr;

}

這樣就可以改變static text的顏色和字型了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.