Как включить современный внешний вид панели инструментов для приложения Win32?
Недавно я начал изучать программирование GUI на основе Win32 API. Когда я добавляю панель инструментов управления (изcomctl32.lib) в моем простом приложении я нахожу, что оно выглядит плоским, в то время как строка меню имеет более «дружественный к Windows 7» 3D вид (белое свечение сверху и вертикальный серый градиент сверху вниз). Разница делает это выглядит проводным.
Тем не менее, я считаю, что многие другие приложения имеют одинаковый внешний вид и для панели меню, и для панели инструментов. Например.Notepad ++ а такжеБлокнот 2.
Я прочитал некоторые официальные документы и попробовал решение, такое какОбзор визуальных стилей, Включение визуальных стилейоднако он включает только стиль плоских кнопок (по сравнению со старым стилем кнопок в Win98). Это не имело никакого значения со стилем, который я получил в первой картине.
Я попытался прочитать исходный код Notepad ++. Нашелtoolbar.cpp и сделал некоторые изменения в моем коде, соответственно, но ничего не изменилось. Я думаю, что я был потерян в кодовой базе.
Вот мой код звонкаInitCommonControlsEx
и создание панели инструментов.
// 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);
}
Так,Вопрос в том: Несмотря на растровое изображение кнопок, как я могу получить 3D-вид панели инструментов, как в примере Notepad ++ / Notepad2?
Заранее спасибо.