2011-03-22 22 views
0

我試圖修改一些使用CreateToolbarEx函數的舊代碼(C++),試圖使用新的位圖並將我們的24x24像素工具欄按鈕替換爲更加炫麗的36x36像素。我使用的功能如下:使用新位圖修改CreateToolbarEx函數時的內存分配問題

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個按鈕)。

+0

你有以上通過24×24的按鈕,24×24的位圖仍然代碼... http://msdn.microsoft.com/en-us/library/bb787469%28v=vs .85%29.aspx – AJG85 2011-03-22 16:25:41

+0

正確,我剛剛複製了程序中的工作代碼。當我嘗試用新位圖運行代碼時,我將它更改爲36x36,並將IDB_TOOLBAR重新定義爲新位圖。這種重新定義會導致程序崩潰。 – Micky 2011-03-22 16:58:56

+0

您可能可以將位圖導入到您的應用程序中,以便創建一個新的ID IDB_TOOLBARX或什麼。有時如果您重複使用以前的控件或資源ID,資源文件會變得怪異。 – AJG85 2011-03-22 17:11:11

回答

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);