MFC修改控件的默认字体

MFC中控件的默认字体是这样的

MFC修改控件的默认字体_第1张图片

在Windows上设置控件字体的办法是向该控件发送WM_SETFONT消息,但是如果窗口上控件过多的话则需要手动去遍历控件,麻烦了点,好在MFC提供了一个SendMessageToDescendants方法,它是CWnd的成员方法,它的功能就是向窗口的所有子控件发送消息。

修改字体的时机最好在窗口及其子控件初始化完成且还没显示的时候,也就是主窗口收到WM_CREATE消息时。MFC在OnCreate方法中处理即可

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (__super::OnCreate(lpCreateStruct) == -1)
		return -1;

	// 创建几个控件测试
	const auto text = new CStatic;
	text->Create(_T("Static Text"), WS_CHILD | WS_VISIBLE, CRect(100, 10, 200, 30), this);

	const auto button = new CButton;
	button->Create(_T("Button"), WS_CHILD | WS_VISIBLE, CRect(10, 10, 80, 30), this, 0);

	const auto edit = new CEdit;
	edit->Create(WS_CHILD | WS_VISIBLE, CRect(10, 50, 80, 70), this, 0);

	// 获取系统默认字体
	NONCLIENTMETRICS ncm{ 0 };
	ncm.cbSize = sizeof(ncm);
	::SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);

	// 创建字体
	const auto hFont = ::CreateFontIndirectW(&ncm.lfMessageFont);

	// 向所有子控件发送WM_SETFONT消息
	SetFont(CFont::FromHandle(hFont));
	SendMessageToDescendants(WM_SETFONT, (WPARAM)hFont);

	return 0;
}

在中文操作系统上默认字体是微软雅黑,效果如图

MFC修改控件的默认字体_第2张图片

 

你可能感兴趣的:(MFC)