Проблема с выделением памяти при изменении функции CreateToolbarEx новым растровым изображением - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь изменить старый код (c ++), который использует функцию CreateToolbarEx, в попытке использовать новое растровое изображение и заменить наши кнопки панели инструментов размером 24x24 пикселя на более светлые 36x36. Я использую следующую функцию:

m_hToolbarWnd = CreateToolbarEx(m_hPagerWnd, ws, ID_TOOLBAR, NUMBERTOOLBARBITMAPS, hInst, IDB_TOOLBAR, tbInitButtons, m_ncButtons, 24, 24, 24, 24, sizeof(TBBUTTON));

Я могу увеличить размер текущих кнопок панели инструментов, изменив «24» на «36», но если я изменю IDB_TOOLBAR на новое растровое изображение панели инструментов и запущу программу, я столкнусь с нарушением чтения при доступе к памяти, указывающим на Функция CreateToolbarEx. Я что-то упускаю из-за того, как растровое изображение распределяет память или создает отдельные кнопки? Новая панель инструментов имеет размер 1584х36 пикселей (44 кнопки).

1 Ответ

1 голос
/ 28 ноября 2012

Это старое, но, надеюсь, найденное мной решение кому-нибудь поможет.Я упустил из виду тот факт, что я переходил с 16-битного цветного растрового изображения на 24-битное, что я не мог заставить CreateToolbarEx обрабатывать.Вместо этого мне пришлось вызвать CreateWindowEx и создать и установить для него значок ImageList.Рабочий код:

m_hToolbarWnd = CreateWindowEx(0L, TOOLBARCLASSNAME, "", ws, 36, 36, 36, 36, m_hPagerWnd, (HMENU) ID_TOOLBAR, hInst, NULL);
SendMessage(m_hToolbarWnd, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
HBITMAP hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_TOOLBAR));
HIMAGELIST hIcons = ImageList_Create(36, 36, ILC_COLOR24, 0, m_ncButtons);
ImageList_Add(hIcons, hBmp, NULL);
SendMessage(m_hToolbarWnd, TB_SETIMAGELIST, 0, (LPARAM) hIcons);
...