Wie wird das moderne Erscheinungsbild der Symbolleiste für Win32-Anwendungen aktiviert?

Vor kurzem habe ich angefangen, GUI-Programmierung basierend auf Win32-API zu lernen. Wenn ich ein Symbolleisten-Steuerelement hinzufüge (voncomctl32.lib) In meiner einfachen Anwendung sieht es flach aus, während die Menüleiste ein "Windows 7-freundlicheres" 3D-Erscheinungsbild aufweist (weißes Leuchten oben und vertikaler grauer Verlauf von oben nach unten). Der Unterschied lässt es verdrahtet aussehen.

Ich finde jedoch, dass viele andere Anwendungen sowohl für die Menüleiste als auch für die Symbolleiste ein einheitliches Erscheinungsbild aufweisen. Z.B.Notepad ++ undNotizblock 2.

Ich habe einige offizielle Dokumente gelesen und die Lösung ausprobiert, zÜbersicht über visuelle Stile, Visuelle Stile aktivierenEs wird jedoch nur der flache Schaltflächenstil aktiviert (im Vergleich zum alten Win98-Solid-Button-Stil). Es machte keinen Unterschied, welchen Stil ich auf dem ersten Bild hatte.

Ich habe versucht, den Quellcode von Notepad ++ zu lesen. GefundenToolBar.cpp und entsprechend einige Änderungen an meinem Code vorgenommen, aber nichts geändert. Ich glaube, ich war in der Codebasis verloren.

Hier ist meine VorwahlInitCommonControlsEx und Erstellung der ToolBar.

// in WinMain
INITCOMMONCONTROLSEX icce;
icce.dwSize = sizeof(INITCOMMONCONTROLSEX);
icce.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES | ICC_USEREX_CLASSES;
InitCommonControlsEx(&icce);

// called in WM_CREATE handler, hwnd is the handle of the main window
VOID BuildToolBar(HWND hwnd)
{
    HWND hTool;
    TBBUTTON tbb[3];
    TBADDBITMAP tbab;

    hTool = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE, 0, 0, 0, 0, hwnd, (HMENU)IDC_MAIN_TOOL, GetModuleHandle(NULL), NULL);
    SendMessage(hTool, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
    SendMessage(hTool, TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_HIDECLIPPEDBUTTONS);

    tbab.hInst = HINST_COMMCTRL;
    tbab.nID = IDB_STD_SMALL_COLOR;
    SendMessage(hTool, TB_ADDBITMAP, 0, (LPARAM)&tbab);

    ZeroMemory(tbb, sizeof(tbb));
    tbb[0].iBitmap = STD_FILENEW;
    tbb[0].fsState = TBSTATE_ENABLED;
    tbb[0].fsStyle = TBSTYLE_BUTTON;
    tbb[0].idCommand = ID_FILE_NEW;

    tbb[1].iBitmap = STD_FILEOPEN;
    tbb[1].fsState = TBSTATE_ENABLED;
    tbb[1].fsStyle = TBSTYLE_BUTTON;
    tbb[1].idCommand = ID_FILE_OPEN;

    tbb[2].iBitmap = STD_FILESAVE;
    tbb[2].fsState = TBSTATE_ENABLED;
    tbb[2].fsStyle = TBSTYLE_BUTTON;
    tbb[2].idCommand = ID_FILE_SAVEAS;

    SendMessage(hTool, TB_SETBUTTONSIZE, (WPARAM)0, (LPARAM)MAKELONG(16, 16));
    SendMessage(hTool, TB_ADDBUTTONS, sizeof(tbb) / sizeof(TBBUTTON), (LPARAM)&tbb);
    SendMessage(hTool, TB_AUTOSIZE, 0, 0);
}

So,Die Frage ist: Wie kann ich trotz der Bitmaps der Schaltflächen ein 3D-Erscheinungsbild für die Symbolleiste erhalten, genau wie im Beispiel für Notepad ++ / Notepad2?

Danke im Voraus.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage