SystemDefaultFont?



  • Hallo Leute,
    nochmal rasch etwas zur API?

    Ich möchte in meinem Window stets die Texte in der jeweiligen Standardsachriftart des Benuztzers anzeigen lassen. Ich habe auf msdn aber keine Funktion gefunden, die mir das ermöglicht. Die Standardsprache war ganz einfach über GetSystemDefaultLangID herauszubekommen, dachte so etwas gäbe es für alle Einstellungen.

    Habt Ihr eine Lösung dafür gesehen bzw. selbst verwendet?

    Gruß
    AkonF



  • Das ist seit XP nicht mehr so einfach, da hier ja Themes und Styles verwendet werden... aber siehe
    http://msdn.microsoft.com/library/en-us/dnwxp/html/xptheming.asp

    Ganz grob solltest Du wie folgt vorgehen:

    HTHEME hTheme = NULL;
    
    hTheme = OpenThemeData(hwndButton, L"Button");
    ...
    DrawMyControl(hDC, hwndButton, hTheme, iState);
    ...
    if (hTheme)
    {
        CloseTheme(hTheme);
    }
    
    void DrawMyControl(HDC hDC, HWND hwndButton, HTHEME hTheme, int iState)
    {
        RECT rc, rcContent;
        TCHAR szButtonText[255];
        HRESULT hr;
        size_t cch;
    
        GetWindowRect(hwndButton, &rc);
        GetWindowText(hwndButton, szButtonText,
    	              (sizeof(szButtonText)/sizeof(szButtonText[0])+1));
    	hr = StringCchLength(szButtonText,
             (sizeof(szButtonText)/sizeof(szButtonText[0])), &cch);
        if (hTheme)
        {
            hr = DrawThemeBackground(hTheme, hDC, BP_BUTTON,
                    iState, &rc, 0);
            // Always check your result codes.
    
            hr = GetThemeBackgroundContentRect(hTheme, hDC,
                    BP_BUTTON, iState, &rc, &rcContent);
            hr = DrawThemeText(hTheme, hDC, BP_BUTTON, iState,
                    szButtonText, cch,
                    DT_CENTER | DT_VCENTER | DT_SINGLELINE,
                    0, &rcContent);
        }
        else
        {
            // Draw the control without using visual styles.
        }
    }
    

Anmelden zum Antworten