0
Q
獲取系統字體
A
回答
1
這是用的uxtheme.dll,AeroWizard
類,部分HeaderArea
完成。狀態0或狀態1(NoMargins
)都可以工作。這裏有一個示例,都使用DrawThemeText()
並手動。 (請注意,是一個演示程序,它沒有錯誤檢查。)
// 20 june 2016
#define UNICODE
#define _UNICODE
#define STRICT
#define STRICT_TYPED_ITEMIDS
#define WINVER 0x0600
#define _WIN32_WINNT 0x0600
#define _WIN32_WINDOWS 0x0600
#define _WIN32_IE 0x0700
#define NTDDI_VERSION 0x06000000
#include <windows.h>
#include <uxtheme.h>
#include <vsstyle.h>
#include <vssym32.h>
HWND mainwin;
HWND edit;
void redraw(void)
{
HDC dc;
PAINTSTRUCT ps;
WCHAR text[1024];
HTHEME theme;
LOGFONTW lf;
HFONT font, oldfont;
COLORREF color;
SIZE extent;
RECT r;
dc = BeginPaint(mainwin, &ps);
theme = OpenThemeData(mainwin, VSCLASS_AEROWIZARD);
GetThemeFont(theme, dc, AW_HEADERAREA, 0, TMT_FONT, &lf);
font = CreateFontIndirectW(&lf);
GetThemeColor(theme, AW_HEADERAREA, 0, TMT_TEXTCOLOR, &color);
GetWindowTextW(edit, text, 1024);
GetThemeTextExtent(theme, dc, AW_HEADERAREA, 0,
text, -1, 0, NULL, &r);
extent.cx = r.right - r.left;
extent.cy = r.bottom - r.top;
SetWindowPos(edit, NULL,
10, 10, 500, 20,
SWP_NOOWNERZORDER | SWP_NOZORDER);
r.left = 10;
r.top = 40;
r.right = 10 + extent.cx;
r.bottom = r.top + extent.cy;
DrawThemeText(theme, dc, AW_HEADERAREA, 0,
text, -1, 0, 0, &r);
oldfont = (HFONT) SelectObject(dc, font);
color = SetTextColor(dc, color);
r.top = r.bottom + 10;
r.bottom = r.top + extent.cy;
DrawTextW(dc, text, -1, &r, 0);
SetTextColor(dc, color);
SelectObject(dc, oldfont);
DeleteObject(font);
CloseThemeData(theme);
EndPaint(mainwin, &ps);
}
LRESULT CALLBACK wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg) {
case WM_PAINT:
redraw();
return 0;
case WM_COMMAND:
InvalidateRect(hwnd, NULL, TRUE);
break;
case WM_CLOSE:
PostQuitMessage(0);
break;
}
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
}
int main(void)
{
WNDCLASSW wc;
MSG msg;
ZeroMemory(&wc, sizeof (WNDCLASSW));
wc.lpszClassName = L"mainwin";
wc.lpfnWndProc = wndproc;
wc.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1);
RegisterClassW(&wc);
mainwin = CreateWindowExW(0,
L"mainwin", L"Main Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
640, 200,
NULL, NULL, NULL, NULL);
edit = CreateWindowExW(WS_EX_CLIENTEDGE,
L"EDIT", L"Top is DrawThemeText(), bottom is manual",
WS_CHILD | WS_VISIBLE,
10, 10, 100, 100,
mainwin, (HMENU) 100, NULL, NULL);
ShowWindow(mainwin, SW_SHOWDEFAULT);
UpdateWindow(mainwin);
while (GetMessageW(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
return 0;
}
相關問題
- 1. 獲取系統默認字體
- 2. 如何從java系統字體中獲取ttf字體數據
- 3. 獲取系統
- 4. SDL_TTF系統字體
- 5. Windows系統上的非系統字體
- 6. 獲取android系統
- 7. OSX - 獲取帶有系統字體列表的選擇器
- 8. 在iOS中獲取系統字體的.ttf
- 9. 如何在iOS應用程序中獲取系統字體?
- 10. 系統字體不正確
- 11. 閃光antialiased系統字體
- 12. 包含字體的系統
- 13. 獲取RAM系統大小
- 14. 獲取系統根目錄?
- 15. 獲取系統音量iOS
- 16. 如何獲取系統ioWait
- 17. 獲取系統日期ddmmyyyy
- 18. 獲取系統圖標
- 19. 獲取共享android系統
- 20. 獲取系統區域
- 21. 獲取系統調用
- 22. 從系統獲取XML()
- 23. 獲取安裝在系統
- 24. 獲取實體關係NSSet
- 25. 無法獲取系統字體上面板的creationComplete事件在Mac
- 26. 如何獲取不同操作系統中的字體目錄路徑?
- 27. 獲取tomcat的不同的系統字體比獨立的Java應用程序
- 28. 如何使用pygtk或pango獲取系統使用的默認字體?
- 29. EntityX - 獲取添加到系統中的新實體
- 30. 需要幫助獲取系統從Form2 C讀取字段#
大概[主題'TMT_HEADING1FONT' font =宋體](https://msdn.microsoft.com/en-us/library/windows/desktop /bb773213(v=vs.85).aspx)?只是一個猜測。 – andlabs
DId這實際上工作?我沒有自己嘗試過;我不確定你是否還需要一個部分/狀態對... – andlabs
不知怎的,它不適合我,雖然我啓用了Windows主題。 – Philinator