MFC 改变窗口内所有控件 字体 的简单方法

1、首先在类声明中声明回调函数和字体变量
static BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam);
CFont * f;
2、在 OnInitDialog() 中添加如下函数
f = new CFont;
f->CreateFont(16, // nHeight 
    0, // nWidth 
    0, // nEscapement 
    0, // nOrientation 
    FW_BOLD, // nWeight 
    TRUE, // bItalic 
    FALSE, // bUnderline 
    0, // cStrikeOut 
    ANSI_CHARSET, // nCharSet 
    OUT_DEFAULT_PRECIS, // nOutPrecision 
    CLIP_DEFAULT_PRECIS, // nClipPrecision 
    DEFAULT_QUALITY, // nQuality 
    DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily 
    _T("黑体")); // lpszFac 
::EnumChildWindows(m_hWnd, CDLG::EnumChildProc, (LPARAM)&f);
3、定义回调函数
BOOL CALLBACK CDLG::EnumChildProc(HWND hwndChild, LPARAM lParam)
{
    CFont *pFont = (CFont*)lParam;
    CWnd *pWnd = CWnd::FromHandle(hwndChild);
    pWnd->SetFont(pFont);
    return TRUE;
}
4、解析及注意事项
1.首先创建一种字体f,设置好你需要的参数,用::EnumChildWindows(m_hWnd, CDLG::EnumChildProc, (LPARAM)&f);来遍历你的每一个子窗口,都执行EnumChildProc()函数,并且参数都为字体f;这样就实现了全部一次性设置
2.需要注意的是:这个遍历只针对一级子窗口,比如,你的某个tab页这一窗口下的所有控件窗口。其它tab页是不会随着变化的,要在其它页的OnInitDialog()中重新使用。
3.实测将CFont * f放在定义中只会加粗不能改变字体,可能跟生命周期有关,不是很理解,放在类声明中声明就可以。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值