¿Cómo hago para que una CMFCToolBar reconozca máscaras de imágenes?
-
22-07-2019 - |
Pregunta
Tengo una clase CMFCToolBar
-derived y un seguro de ello es el miembro de una clase CDockablePane
-derived.
Miré el ejemplo de VisualStudioDemo para ver cómo se hace y tener esto hasta ahora:
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;
}
Se carga la imagen de alto color (24 bits) pero la máscara magenta (R255 G0 B255) es visible. No veo cómo puedo decirle a la barra de herramientas que reconozca la máscara.
¿Es esto posible?
Solución
No sé si esto funciona siempre, pero uso RGB (192, 192, 192)
como el color de la máscara y se reconoce.
(Parece que el control CMFCToolBar está preparado para usar :: GetSysColor (COLOR_BTNFACE)
como el color transparente ...)
Otros consejos
Acabo de descubrir que una solución es usar imágenes de 32 bits junto con su canal alfa. Intenté usar una imagen de 32 bits antes, pero no conseguí que funcione por alguna otra razón y luego pensé que las imágenes de 32 bits no funcionarían.
Si desea usar imágenes de 32 bits, no use CBitmap
en su lugar use ATL :: CImage
o CPNGImage object
y cargue el correspondiente < code> ID de recurso .