1、首先在类声明中声明回调函数和字体变量
static BOOL CALLBACK EnumChildProc(HWND hwndChild, LPARAM lParam);
CFont * f;
2、在 OnInitDialog() 中添加如下函数
f = new CFont;
f->CreateFont(16,
0,
0,
0,
FW_BOLD,
TRUE,
FALSE,
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS,
_T("黑体"));
::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放在定义中只会加粗不能改变字体,可能跟生命周期有关,不是很理解,放在类声明中声明就可以。