我有一個基于對話框的視窗,它有一個“靜態文本”控制元件。

我想更改那個“靜態文本”控制元件的字體粗細。
我已經閱讀了幾個關于該主題的主題,但我仍然不明白如何實作這一目標。
到目前為止,這是我想出的:
INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_INITDIALOG:
{
LOGFONT LogFont = {0};
LogFont.lfWeight = FW_BOLD;
HFONT hFont = CreateFontIndirectW(&LogFont);
SendMessageW(hDlg, WM_SETFONT, (WPARAM) hFont, TRUE);
return TRUE;
}
return FALSE;
}
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
與來自父對話框的靜態控制元件顏色不同,每個控制元件負責記住自己的字體。
用于WM_GETFONT獲取控制元件當前使用的字體:
HWND hwndCtl = GetDlgItem(hDlg, IDC_STATIC); // replace with your control ID
HFONT hCurFont = reinterpret_cast<HFONT>(SendMessage(hwndCtl, WM_GETFONT, 0, 0));
然后您可以使用GetObject查詢字體并填寫LOGFONT結構:
LOGFONT lf;
GetObject(hCurFont, sizeof(lf), &lf);
然后,您可以更改 LOGFONT 并從中創建新字體:
lf.fwWeight = FW_BOLD;
HFONT hNewFont = CreateFontIndirect(&lf);
最后,告訴控制元件新字體:
SendMessage(hwndCtl, WM_SETFONT, reinterpret_cast<WPARAM>(hNewFont), TRUE);
如果您有多個控制元件,它們可以共享相同的字體句柄。要記住的重要一點是您現在擁有該字體,并且您有責任DeleteObject()在對話框被銷毀時釋放它(否則您將泄漏與其關聯的 GDI 資源)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527220.html
標籤:C 温纳皮
