This article shows how to change the font for all child windows using only one line with a callback function.
The idea is to create a callback function that is passed to Win32 API function ::EnumChildWindows()
. Somewhere in the application, global CFont
object is created. Pointer to this object is passed as a third argument in EnumChildWindows()
. This argument is passed to a callback function together with a handle to a child window. Using these 2 arguments, the function changes the font for the child window.
Using this technique, it is very easy to:
- Change the font for main frame window, its child views and a status bar from
CMainFrame::OnCreate()
. - Change the font for all dialog controls from
OnInitDialog()
.
The Callback function looks like this:
BOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam)
{
CFont *pFont = (CFont*)lparam;
CWnd *pWnd = CWnd::FromHandle(hwnd);
pWnd->SetFont(pFont);
return TRUE;
}
This callback function is used from OnCreate()
or OnInitDialog()
in the following way:
...
EnumChildWindows(m_hWnd, ::SetChildFont, &g_Font);
...
License
This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.
A list of licenses authors might use can be found here.
I am a cofounder of SCA Software, company that specializes in software for process control, visualization and communication. Programming for the last 10 years in C++, Delphi. Visual C++ for the last 6 years. Degree in Electronics Engineering and Telecommunications.