WTL環境中CEdit或Cstatic控制元件中修改字型大小和顏色
本文主要介紹只讀模式的下的CEdit控制元件和CStatic控制元件的字型的大小和顏色的修改,編輯模式下的CEdit控制元件的原理是一樣的只是訊息變了。
1. 修改字型顏色
只讀模式下的CEdit控制元件和CSataic控制元件通過傳送WM_CTLCOLORSTATIC給主視窗來進行重繪,這時主視窗可以在重繪前設定字型顏色(編輯模式的Cedit通過WM_CTLCOLOREDIT )。具體實現如下:
1.1 在主視窗的訊息迴圈中新增如下程式碼(紅色部分):
BEGIN_MSG_MAP(CMainDlg)
.......
MESSAGE_HANDLER(WM_CTLCOLORSTATIC,OnEditColor)
END_MSG_MAP()
1.2 然後新增OnEditColor方法:
LRESULT CMainDlg::OnEditColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
HBRUSH hbr;
HDC hdc =(HDC) wParam;
HWND hwnd = (HWND) lParam;
//獲得當前控制元件的畫刷,因為改變字型顏色後,需要返回自身的畫刷才能生效
hbr= (HBRUSH) GetCurrentObject(hdc,OBJ_BRUSH);
if(hwnd == m_fr_status.m_hWnd) //判斷是否需要修改的控制元件
{//如果是,修改字型顏色
SetTextColor(hdc,m_fr_cl);
SetBkMode(hdc,TRANSPARENT);
}else
{//如果不是,返回主視窗預設畫刷。
hbr= (HBRUSH) GetCurrentObject(NULL,OBJ_BRUSH);
}
return (LRESULT)hbr;
}
2. 修改字型
在主視窗類裡新增一個CFont類的成員函式,因為我們修改後的字型需要儲存起來,如果定義為區域性變數,在設定完成後,函式返回後,字型就會失效。
class CMainDlg : public CDialogImpl<CMainDlg>
{
private:
......
CFont m_font;
CEdit m_fr_sn;
......
}
在OnInitDialog方法中新增如下紅色程式碼,設定字型:
......
m_fr_sn = (CEdit)GetDlgItem(IDC_EDIT_FR_SN);
m_font.Attach(m_fo_sn.GetFont());
m_font.CreatePointFont(220,_T("微軟雅黑"));
m_fr_sn.SetFont(m_font.m_hFont);
.......