2010-04-08 36 views
1

我想讓我的工具欄與ImageList一起工作。這些圖像是單獨的PNG,因此我將它們連續添加到ImageList中,但Bbt不起作用。下面是代碼的Image添加到ImageList試圖用ImageList創建一個工具欄,不工作

HIMAGELIST CreateToolBarImages(HINSTANCE hInst) 
{ 
    HIMAGELIST v_ImageList = NULL; 
    // IMAGE_LIST v_Img; 
    HICON hIcon; 
    HBITMAP hBit; 
    COLORMAP cMap; 
    COLORREF fromColor = RGB(0,0,0); 

    InitCommonControls(); 

    v_ImageList = ImageList_Create(32, 32, ILC_MASK, 1, 1); 

    cMap.from = fromColor; 
    cMap.to = ::GetSysColor(COLOR_BTNFACE); 
    hBit = CreateMappedBitmap(hInst, IDB_CONSOLE, 0, &cMap, 1); 

    // hBit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_CONSOLE)); 
    consoleImg = ImageList_Add(v_ImageList, hBit, 0); 
    if (consoleImg == -1) 
     return NULL; 

    DeleteObject(hBit); 

    // [edit Franci Penov] 
    return v_ImageList; 
} 

然後,我創建工具欄,但它在圖像功能失效。

HWND CreateToolBarButton(HWND hWndParent) 
{ 
    const int ImageID = 0; 
    const int numB = 1; 
    COLORREF iColor; 

    HWND hToolBar = CreateWindowEx(0, 
     TOOLBARCLASSNAME, 
     NULL, 
     WS_CHILD |TBSTYLE_LIST |TBSTYLE_FLAT | WS_VISIBLE, 
     0,0,0,0, 
     hWndParent, 
     NULL, 
     g_hInst, 
     NULL); 

    if (hToolBar == NULL) 
     return NULL; 

    HIMAGELIST ImgList = CreateToolBarImages(g_hInst); 
    if (ImgList == NULL) 
     MessageBox(hWndParent, L"No Tool Images", L"BOB", MB_OK); 

    // [edit Franci Penov] 
    return hToolBar; 
} 

有什麼我失蹤或沒有做?

回答

1

我對你的示例代碼中的返回值做了一些修改,在此代碼之上我標註了註釋。

有關如何使用Win32 Toolbar控件的詳細說明,請參閱this MSDN article

特別是,你的代碼似乎缺少在發送TB_SETIMAGELIST消息給Toolbar控制加載ImageList剛創建:

// Set the image list. 
SendMessage(hToolBar, TB_SETIMAGELIST, 0, (LPARAM)ImgList); 

當然,也有可能是你缺少其他的事情那裏,但這將是一個很好的起點。

你也有一些GDI對象在你做錯誤檢查並提前退出函數的地方發生內存泄漏。您可能也想要清理這些。

3

什麼「不工作」。 CreateMappedBitmap用於加載具有顏色表的圖像 - 這意味着它們具有< = 256種顏色。

PNG意味着您正在使用帶有alpha通道的32bpp圖像,這意味着您無法使用* MappedBitmap函數。

0

嗨,謝謝你,我已經解決了我的問題, 克里斯你是正確的,在我張貼我做了這個觀察以及,我需要使用GDI +爲了使用PNG的,我選擇了去使用相反,它現在完美的作品。 Franci,謝謝你,我已經清理了代碼。

問候,