Como habilitar a aparência moderna da barra de ferramentas para o aplicativo Win32?
Recentemente, comecei a aprender programação de GUI baseada na API do Win32. Quando adiciono controle de barra de ferramentascomctl32.lib) para o meu aplicativo simples eu acho que parece plana, enquanto a barra de menu tem mais "Windows 7 amigável" 3D olhar e sentir (brilho branco no topo e gradiente cinza vertical de cima para baixo). A diferença faz com que pareça com fio.
No entanto, acho que muitos outros aplicativos têm aparência consistente para a barra de menus e a barra de ferramentas. Por exemplo.Notepad ++ eBloco de notas 2.
Eu li alguns documentos oficiais e tentei a solução, comoVisão geral de estilos visuais, Ativando Estilos Visuais, no entanto, só ativa o estilo de botão plano (comparado ao antigo estilo de botão sólido Win98). Não fez diferença com o estilo que obtive na primeira foto.
Eu tentei ler o código fonte do Notepad ++. EncontradoToolBar.cpp e fiz algumas alterações no meu código de acordo, mas nada mudou. Eu acho que estava perdido na base de código.
Aqui está o meu código de chamadaInitCommonControlsEx
e criação da 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);
}
Assim,A questão é: Apesar dos bitmaps dos botões, como posso obter a aparência 3D da barra de ferramentas, assim como o exemplo Notepad ++ / Notepad2?
Desde já, obrigado.