尝试使用ImageList创建工具栏,无法正常工作

时间:2010-04-08 02:36:45

标签: c++ winapi toolbar

我正在尝试让我的工具栏与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;
}

我有什么遗失或不做的事吗?

4 个答案:

答案 0 :(得分:3)

什么“不工作”。 CreateMappedBitmap用于加载具有颜色表的图像 - 这意味着它们具有< = 256种颜色。

PNG暗示您正在使用带有Alpha通道的32bpp图像,这意味着您无法使用* MappedBitmap功能。

答案 1 :(得分:1)

我在示例代码中返回值时做了一些更改,上面标有注释。

有关如何使用Win32 Toolbar控件的详细说明,请阅读this MSDN article

特别是,您的代码似乎缺少的是将TB_SETIMAGELIST消息发送到Toolbar控件以加载您刚刚创建的ImageList

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

当然,在那里可能还有其他缺少的东西,但这将是一个很好的起点。

你还有一些GDI对象内存泄漏,你会在几个地方进行错误检查并提前退出你的功能。你可能也希望清理它们。

答案 2 :(得分:0)

嗨,谢谢你,我已经解决了我的问题, 克里斯你是对的,在我发布后我做了那个观察,我需要使用GDI +来使用PNG,我选择使用图标而不是它现在完美地工作。弗朗西,谢谢你我也清理了代码。

的问候,

答案 3 :(得分:-1)

你可以尝试使用这些代码: https://github.com/Itseez/opencv/blob/master/samples/cpp/imagelist_creator.cpp

对我来说它运作得很好

在您需要安装openCV库之前;)