Как сделать, чтобы CMFCToolBar распознавал маски изображений?
-
22-07-2019 - |
Вопрос
У меня есть класс, полученный с помощью 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
и загрузите соответствующий < код> идентификатор ресурса .