我试图让我的工具栏可以使用ImageList。图像是单独的PNG,因此我将它们连续添加到ImageList中,但是Bbt无法正常工作。这是将Image添加到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;
}

然后,我创建了ToolBar,但是在Image函数上失败了。
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;
}

我有什么想念的吗?

最佳答案

什么是“不起作用”。 CreateMappedBitmap用于加载具有颜色表的图像-这意味着它们具有
PNG表示您正在使用带有alpha通道的32bpp图像,这意味着您无法使用* MappedBitmap函数。

关于c++ - 尝试使用ImageList创建工具栏,但无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2597229/

10-12 15:05