Как сделать, чтобы CMFCToolBar распознавал маски изображений?

StackOverflow https://stackoverflow.com/questions/839257

Вопрос

У меня есть класс, полученный с помощью CMFCToolBar , и его элемент является членом класса, полученного с помощью CDockablePane .

Я посмотрел пример VisualStudioDemo, чтобы увидеть, как это делается, и пока что так и есть:

int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    // Removed all "return -1 on error" code for better readability

    CDockablePane::OnCreate(lpCreateStruct);

    if(m_toolBar.Create(this, AFX_DEFAULT_TOOLBAR_STYLE, IDR_MY_TOOLBAR) &&
       m_toolBar.LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE /* Is locked */))
    {

        if(theApp.m_bHiColorIcons) // Is true, i.e. following code is executed
        {
            m_toolBar.CleanUpLockedImages();
            m_toolBar.LoadBitmap(IDB_MY_TOOLBAR_24, 0, 0, TRUE /*Locked*/);
        }

        m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY);
        m_toolBar.SetPaneStyle(m_toolBar.GetPaneStyle() & ~(CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));

        m_toolBar.SetOwner(this);

        // All commands will be routed via this control , not via the parent frame:
        m_toolBar.SetRouteCommandsViaFrame(FALSE);
    }

    return 0;
}

Загружается полноцветное изображение (24 бита), но видна пурпурная маска (R255 G0 B255). Я не понимаю, как сказать панели инструментов, чтобы она распознала маску.
Это вообще возможно?

Это было полезно?

Решение

Я не знаю, работает ли это каждый раз, но я использую RGB (192, 192, 192) в качестве цвета маски, и он распознается.

(похоже, что элемент управления CMFCToolBar готов использовать :: GetSysColor (COLOR_BTNFACE) в качестве прозрачного цвета ...)

Другие советы

Я только что узнал, что обходной путь - использовать 32-битные изображения вместе с их альфа-каналом. Я пытался использовать 32-битное изображение ранее, но по какой-то другой причине оно не заработало, а потом решил, что 32-битные изображения не будут работать.

Если вы хотите использовать 32-битные изображения, не используйте CBitmap , вместо этого используйте ATL :: CImage или CPNGImage object и загрузите соответствующий < код> идентификатор ресурса .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top