Попытка создать панель инструментов с помощью ImageList, не работает - PullRequest
1 голос
/ 08 апреля 2010

Я пытаюсь заставить мою панель инструментов работать с ImageList.Изображения представляют собой отдельные PNG, поэтому я добавил их последовательно ImageList, но это не помогло.Вот код для добавления 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;
}

Затем я создаю панель инструментов, но она не работает в функции Image.что-то я пропускаю или не делаю?

Ответы [ 4 ]

3 голосов
/ 08 апреля 2010

Что "не работает". CreateMappedBitmap используется для загрузки изображений, которые имеют таблицу цветов - это означает, что они имеют <= 256 цветов. </p>

PNG-файлы подразумевают, что вы используете 32-битные изображения с альфа-каналом, что означает, что вы не можете использовать функции * MappedBitmap.

1 голос
/ 08 апреля 2010

Я внес некоторые изменения в возвращаемые значения в вашем примере кода, который я пометил комментариями.

Подробное описание использования элемента управления Win32 Toolbar вы можете прочитать в этой статье MSDN .

В частности, в вашем коде отсутствует сообщение TB_SETIMAGELIST для элемента управления Toolbar для загрузки ImageList, который вы только что создали:

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

Конечно, могут быть и другие вещи, которые вам там не хватает, но это было бы хорошей отправной точкой.

У вас также есть утечки памяти в некоторых объектах GDI в тех местах, где вы проверяете ошибки и рано выходите из своих функций. Возможно, вы тоже захотите их почистить.

0 голосов
/ 27 марта 2015

вы можете попробовать использовать этот код: https://github.com/Itseez/opencv/blob/master/samples/cpp/imagelist_creator.cpp

для меня это сработало так хорошо

перед установкой библиотеки openCV;)

0 голосов
/ 09 апреля 2010

Привет и спасибо, ребята, я решил свою проблему, Крис, вы правы, после того, как я отправил сообщение, я также сделал это наблюдение, мне нужно будет использовать GDI +, чтобы использовать PNG, я решил вместо этого использовать Иконкии теперь работает отлично.Франци, спасибо, что я тоже убрал код.

привет,

...