這裡順便說下如何把控件上的字體設置為系統默認。
【效果如下】

【代碼】
#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;
}