Как я могу распознать маски CMFCToolBar?

У меня есть класс CMFCToolBar -derived, и его insance является членом класса CDockablePane -derived.

Я просмотрел образец 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). Я не вижу, как я могу определить панель инструментов для распознавания маски.
Возможно ли это?

1
задан foraidt 08 мая '09 в 13:43
источник поделиться

3 ответов

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

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

3
ответ дан djeidot 14 мая '09 в 21:05
источник поделиться

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

0
ответ дан Abhishek Ajmera 21 марта '12 в 18:00
источник поделиться

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

0
ответ дан foraidt 08 мая '09 в 13:59
источник поделиться

Другие вопросы по меткам