这里顺便说下如何把控件上的字体设置为系统默认。
【效果如下】

【代码】
#include <tchar.h>
#include <Windows.h>
#include <CommCtrl.h>
// 启用XP风格控件视觉效果
#pragma comment(lib, "Comctl32.lib")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
HFONT hfontCaption;
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CREATE:
{
// 设置右侧滚动条的位置,范围和长度
SCROLLINFO sci;
sci.nMin = 0;
sci.nMax = 1;
sci.nPage = 1; // 决定滚动条的滑块有多长
sci.nPos = 0;
sci.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &sci, true);
HINSTANCE hInst = (HINSTANCE)GetWindowLongPtr(hwnd, GWL_HINSTANCE);
HWND hButton = CreateWindow(WC_BUTTON, TEXT("Click me"), WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 50, 50, 75, 22, hwnd, NULL, hInst, NULL); // 创建按钮
SendMessage(hButton, WM_SETFONT, (WPARAM)hfontCaption, TRUE); // 设置按钮字体
HWND hCheckBox = CreateWindow(WC_BUTTON, TEXT("Check me"), WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_CHECKBOX | BS_AUTOCHECKBOX, 150, 50, 100, 22, hwnd, NULL, hInst, NULL); // 创建复选框
SendMessage(hCheckBox, WM_SETFONT, (WPARAM)hfontCaption, TRUE); // 设置复选框字体
HWND hRadioButton = CreateWindow(WC_BUTTON, TEXT("Select me"), WS_TABSTOP | WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON, 350, 50, 100, 22, hwnd, NULL, hInst, NULL); // 创建单选框
SendMessage(hRadioButton, WM_SETFONT, (WPARAM)hfontCaption, TRUE); // 设置单选框字体
}
break;
// 清除控件默认的对话框背景色
case WM_CTLCOLORBTN:
case WM_CTLCOLORSTATIC:
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
LPCTSTR str = TEXT("Do something here...");
SelectObject(hdc, hfontCaption); // 设置输出文字的字体
TextOut(hdc, 10, 10, str, _tcslen(str));
MoveToEx(hdc, 270, 70, NULL);
LineTo(hdc, 280, 90);
EndPaint(hwnd, &ps);
}
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return FALSE;
}
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
// 注册窗口类
WNDCLASSEX wcex;
ZeroMemory(&wcex, sizeof(WNDCLASSEX));
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wcex.hInstance = hInstance;
wcex.lpfnWndProc = WndProc;
wcex.lpszClassName = TEXT("MyWindow");
RegisterClassEx(&wcex);
// 获取系统默认文字字体
NONCLIENTMETRICS ncm;
OSVERSIONINFO osv;
osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osv);
ncm.cbSize = sizeof(NONCLIENTMETRICS);
if (osv.dwMajorVersion < 6)
ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth); // 为了支持 Windows XP
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, NULL);
hfontCaption = CreateFontIndirect(&ncm.lfCaptionFont);
// 创建并显示主窗口
HWND hwnd = CreateWindow(wcex.lpszClassName, TEXT("Welcome"), WS_OVERLAPPEDWINDOW | WS_VSCROLL, CW_USEDEFAULT, 0, 640, 480, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DeleteObject(hfontCaption); // 当程式退出时,删除字体物件
return msg.wParam;
}