Тема: Свої іконки в тулбарі
Підкажіть що я не доробив. Не замінює іконку на тулбарі. Все інше працює нормально. В ресурсі вона точно є.
Перепробував вже декілька методів завантаження іконок, міняв послідовність дзвінків, але результату немає.
▼Свої
HINSTANCE hInst;
HIMAGELIST hImageList = NULL;
HWND CreateToolbar(HWND hWndParent) {
const int ImageListID = 0;
const int numButtons = 1;
const int bitmapSize = 64;
const DWORD buttonStyles = BTNS_AUTOSIZE;
HWND hWndToolbar = CreateWindowW(TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_WRAPABLE | TBSTYLE_LIST | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT, 0, 0, 0, 0, hWndParent, nullptr, hInst, nullptr);
if (!hWndToolbar) return FALSE;
hImageList = ImageList_Create(bitmapSize, bitmapSize, ILC_COLOR32 | ILC_MASK, numButtons, 0);
if (!hImageList) return FALSE;
HICON hIcon{};
hIcon = (HICON)LoadImageW(hInst, MAKEINTRESOURCEW(IDI_EXIT), IMAGE_ICON, bitmapSize, bitmapSize, LR_COPYFROMRESOURCE);
ImageList_ReplaceIcon(hImageList, 0, hIcon);
DestroyIcon(hIcon);
TBBUTTON tbButtons[numButtons] =
{
{ MAKELONG(IDI_EXIT, ImageListID), IDM_EXIT, TBSTATE_ENABLED, buttonStyles, {0}, 0, (INT_PTR)L"Exit"}
};
SendMessageW(hWndToolbar, TB_SETIMAGELIST, (WPARAM)ImageListID, (LPARAM)hImageList);
SendMessageW(hWndToolbar, TB_SETMAXTEXTROWS, 0, 0);
SendMessageW(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
SendMessageW(hWndToolbar, TB_ADDBUTTONS, (WPARAM)numButtons, (LPARAM)&tbButtons);
SendMessageW(hWndToolbar, TB_AUTOSIZE, 0, 0);
ShowWindow(hWndToolbar, TRUE);
return hWndToolbar;
}
З системними іконками все працює як треба:
▼Системні
HINSTANCE hInst;
HIMAGELIST hImageList = NULL;
HWND CreateToolbar(HWND hWndParent) {
const int ImageListID = 0;
const int numButtons = 3;
const int bitmapSize = 24;
const DWORD buttonStyles = BTNS_AUTOSIZE;
HWND hWndToolbar = CreateWindowW(TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_WRAPABLE | TBSTYLE_FLAT, 0, 0, 0, 0, hWndParent, nullptr, hInst, nullptr);
if (!hWndToolbar) return FALSE;
hImageList = ImageList_Create(bitmapSize, bitmapSize, ILC_COLOR32 | ILC_MASK, numButtons, 0);
if (!hImageList) return FALSE;
SendMessageW(hWndToolbar, TB_SETIMAGELIST, (WPARAM)ImageListID, (LPARAM)hImageList);
SendMessageW(hWndToolbar, TB_LOADIMAGES, (WPARAM)IDB_STD_LARGE_COLOR, (LPARAM)HINST_COMMCTRL);
TBBUTTON tbButtons[numButtons] =
{
{ MAKELONG(STD_FILENEW, ImageListID), IDM_DBUPLOAD, TBSTATE_ENABLED, buttonStyles},
{ MAKELONG(STD_FILEOPEN, ImageListID), IDM_DBUNLOAD, TBSTATE_ENABLED, buttonStyles},
{ MAKELONG(STD_DELETE, ImageListID), IDM_EXIT, TBSTATE_ENABLED, buttonStyles}
};
SendMessageW(hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
SendMessageW(hWndToolbar, TB_ADDBUTTONS, (WPARAM)numButtons, (LPARAM)&tbButtons);
SendMessageW(hWndToolbar, TB_AUTOSIZE, 0, 0);
ShowWindow(hWndToolbar, TRUE);
return hWndToolbar;
}
Гадаю щось з дзвінками. А там хто знає.