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