示例1 设置组合框字体大小:
组合框由两部分组成
一部分为编辑框 一部分为列表框
为组合框捆绑一控件变量 m_comb_box
编辑框和列表框中的字体 通过重载ctrcolor函数,捕捉编辑框和列表框分别实现:
为编辑框设置字体
在对话框初始函数 OnInitDialog() 中,为组合框变量设置字体setFont()
CFont m_font; m_font.CreateFont(50, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, NULL); m_combo_box.setFont(&m_font)
这样 组合框的列表框字体就设置成功了,但是列表框中的字体还未有改变
列表框中的字体需要重载ctrcolor 捕捉CTLCOLOR_LISTBOX 组合框
HBRUSH CketangDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); CFont m_font; m_font.CreateFont(50, 0, 0, 0, FW_BOLD, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, NULL); switch(nCtlColor) { case CTLCOLOR_STATIC: //对所有静态文本控件的设置 case CTLCOLOR_BTN: { pDC->SelectObject(&m_font); pDC-> SetTextColor(RGB(255,0,0)); //字体颜色 pDC-> SetBkColor(RGB(0, 0, 255)); //字体背景色 pDC->SetBkMode(TRANSPARENT); m_font3.DeleteObject(); return (HBRUSH)::GetStockObject(NULL_BRUSH); } case CTLCOLOR_EDIT: //修改编辑框 { pDC->SelectObject(&m_font); pDC-> SetTextColor(RGB(0,0,255)); //字体颜色 pDC-> SetBkColor(RGB(0, 255, 0)); //字体背景色 pDC->SetBkMode(TRANSPARENT); m_font3.DeleteObject(); return (HBRUSH)::GetStockObject(LTGRAY_BRUSH); } case CTLCOLOR_LISTBOX: //修改LISTBOX列表框 { pDC->SelectObject(&m_font); pDC->SetBkColor(RGB(0,255,0)); pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkMode(TRANSPARENT); m_font3.DeleteObject(); return (HBRUSH)::GetStockObject(LTGRAY_BRUSH); } default: return hbr } }
示例2 设置编辑框字体大小:
编辑框1 需要改变字体 IDC_EDIT1 m_Edit (控件变量)
编辑框2 保持默认字体 IDC_EDIT2
1 初始化对话框
OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
CRect Rect;
m_Edit.GetClientRect(&Rect); //编辑框1的范围
CFont m_font;
m_font.CreateFont(Rect.Height(), 0, 0, 0,
FW_BOLD, FALSE, FALSE, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FIXED_PITCH | FF_MODERN, NULL);
m_Edit.SetFont(&m_font);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
WM_CTLCOLOR消息用来完成对EDIT、STATIC、BUTTON等控件设置背景和字体颜色
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if (pWnd==GetDlgItem(IDC_EDIT1)) //只当窗口是编辑框1时,才设置字体 其他情况保持默认状态
{
CRect Rect;
m_Edit.GetClientRect(&Rect);
CFont m_font;
m_font.CreateFont(Rect.Height(), 0, 0, 0,
FW_BOLD, FALSE, FALSE, 0,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
FIXED_PITCH | FF_MODERN, NULL);
pDC->SelectObject(&m_font);
}
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
参考资料:
http://www.nokiamobile.org.cn/18_090809_1692492.html
http://topic.csdn.net/t/20040819/16/3290826.html
http://www.cppblog.com/xbgs/archive/2006/06/23/8940.html