3

ウィンドウにテーマのあるテキストを描画しようとしています。ただし、テーマ フォントの代わりに、アンチエイリアスなしの太字の MS Sans Serif のようなフォントが常に表示されます。なぜそうなのですか?


編集:

上記の変更を適用すると、コードは次のようになります。

INITCOMMONCONTROLSEX ctrl;
ctrl.dwSize = sizeof(ctrl);
ctrl.dwICC = ICC_TREEVIEW_CLASSES;
InitCommonControlsEx(&ctrl);

(...)

SetWindowTheme(mainWinHWND, L"explorer", nullptr);

(...)

case WM_PAINT:
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps); 

        HTHEME theme = OpenThemeData(hwnd, L"TREEVIEW");
        RECT rect;
        rect.left = 100;
        rect.top = 100;
        rect.right = 200;
        rect.bottom = 200;
        DrawThemeText(theme,
            hdc,
            TVP_TREEITEM,
            TREIS_NORMAL,
            L"Ala ma kota",
            11,
            DT_VCENTER | DT_LEFT,
            0,
            &rect);
        CloseThemeData(theme);

        EndPaint(hwnd, &ps); 
        return 0L; 
    }

効果は今でも同じです。


コード全体 (~100 行): http://pastebin.com/ZheZyrWy 注: これは概念実証プログラムにすぎず、エラー チェックを含めなかったのはそのためです。ただし、DrawThemeText は 0 (成功) を返します。

4

1 に答える 1

2

まあ、あなたはもうすぐそこにいます.Explorerのテーマスタイルを手に入れています. 間違った仮定が 1 つだけあります。ツリービューのテーマはフォントを規定していません。たとえば、.NET TreeView クラスで非常に目に見えるので、その Font プロパティを任意に割り当てることができ、要求されたフォントを取得できます。論理的に明らかなように、どこにもフォント サイズを指定していないため、テーマ API が適切なサイズのフォントを推測する合理的な方法はありません。現在、デバイス コンテキストで選択されている既定のフォントを取得しています。

使用するフォントを選択する必要が あります。

于 2013-01-06T18:25:53.070 に答える