¿Cómo habilitar el aspecto moderno de la barra de herramientas para la aplicación Win32?

Recientemente comencé a aprender la programación GUI basada en Win32 API. Cuando agrego el control de la barra de herramientas (desdecomctl32.lib) para mi aplicación simple, me parece que se ve plana, mientras que la barra de menús tiene una apariencia más "3D" compatible con Windows 7 (brillo blanco en la parte superior y degradado de grises vertical de arriba a abajo). La diferencia lo hace parecer cableado.

Sin embargo, me parece que muchas otras aplicaciones tienen una apariencia coherente tanto para la barra de menús como para la barra de herramientas. P.ej.Bloc de notas ++ yBloc de notas 2.

He leído algunos documentos oficiales y he probado la solución, comoVisión general de los estilos visuales, Habilitando Estilos VisualesSin embargo, solo habilita el estilo de botón plano (en comparación con el antiguo estilo de botón sólido Win98). No hizo ninguna diferencia con el estilo que obtuve en la primera foto.

Intenté leer el código fuente de Notepad ++. EncontróToolBar.cpp e hice algunos cambios a mi código en consecuencia, pero nada cambió. Creo que me perdí en el código base.

Aquí está mi código de llamadaInitCommonControlsEx y creación de la barra de herramientas.

// 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);
}

Asi que,La pregunta es: A pesar de los mapas de bits de los botones, ¿cómo puedo obtener el aspecto 3D de la barra de herramientas, como en el ejemplo de Notepad ++ / Notepad2?

Gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta