Как сделать, чтобы CMFCToolBar распознавал маски изображений? - PullRequest
1 голос
/ 08 мая 2009

У меня есть класс 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). Я не понимаю, как сказать панели инструментов, чтобы она распознала маску.
Это вообще возможно?

Ответы [ 3 ]

3 голосов
/ 14 мая 2009

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

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

0 голосов
/ 21 марта 2012

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

0 голосов
/ 08 мая 2009

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

...