使用新位图修改CreateToolbarEx函数时的内存分配问题

时间:2011-03-22 15:55:41

标签: c++ bitmap memory-management toolbar

我正在尝试修改一些使用CreateToolbarEx函数的旧代码(c ++),试图使用新的位图并用闪光的36x36替换我们的24x24像素工具栏按钮。我正在使用的功能如下:

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函数。我是否遗漏了位图如何获取内存分配或创建单个按钮?新工具栏为1584x36像素(44个按钮)。

1 个答案:

答案 0 :(得分:1)

这是旧的,但希望我找到的解决方案能帮助某人。我忽略了这样一个事实:我从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);