Win32 API Dev Visual Styles schwierigkeiten



  • Hi,

    ich arbeite an einem kleinen, schnellen GUI Wrapper für Spiele und Toolentwicklung. Es ist schon ne Zeit her dass ich mit der WinAPI gearbeitet habe. Schaut soweit auch alles gut aus, ausser, dass die Visuellen Stile nicht vernünftig funktionieren:

    http://assets.kaigillmann.de/Gnarr_2012-09-28_16-57-18.png

    Ich habe ein manifest erstellt:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
          </requestedPrivileges>
        </security>
      </trustInfo>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*"/>
        </dependentAssembly>
      </dependency>
    </assembly>
    

    Dieses in die RC file eingebunden:

    ...
    #include <windows.h>
    #include <commctrl.h>
    #include <winuser.h>
    
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "Window.exe.manifest"
    ...
    

    Folgenden Coe in die Kern UI-Element Klasse eingefügt:

    class UIElement {
    ...
    
    protected:
        static INITCOMMONCONTROLSEX icc;
    
    public:
        UIElement() {
            ...
            // FIXME: Better way for that :-S
            if (! (UIElement::icc.dwSize > 0)) {
                UIElement::icc.dwSize = sizeof(UIElement::icc);
                UIElement::icc.dwICC = ICC_WIN95_CLASSES | ICC_STANDARD_CLASSES | ICC_COOL_CLASSES;
                if (! InitCommonControlsEx(&UIElement::icc)) {
                    MessageBox(NULL, TEXT("InitCommonControlsEx failed."), TEXT("Error"), MB_OK | MB_ICONINFORMATION);
                }
            }
            ...
        }
    
    ...
    }
    

    ... und nun sehen die Buttons toll aus, der Text aber wie Windows 3.x :-S Und ich hab keine Ahnung wieso.

    Ich nutze Eclipse mit TDM-GCC 4.7.1-tdm64-1, kein Visual Studio.

    Vielen Dank für Hilfe

    Der Verzweifelte


  • Mod

    Für das setzen der Fonts bist Du auch selbst verantwortlich.



  • Auch dass die Systemfonts genutzt werden?


  • Mod

    Die Systemfonts sind nicht die Standard Dialog Fonts!!!
    Schon lange nicht mehr.
    Dort wird MS ShellDlg i.A. verwendet.
    Diu kannst auch SPI_GETNONCLIENTMETRICS und dort den lfMessageFont verwenden.



  • Danke, das hat geholfen.

    HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
    SendMessage(hwnd, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE, 0));
    

    ... erledigt das nun für mich.

    Hätte nicht gedacht dass ich das von Hand machen muss, ausser ich will etwas besonderes -.-


Log in to reply