Come faccio a far riconoscere a CMFCToolBar le maschere di immagine?
-
22-07-2019 - |
Domanda
Ho una classe CMFCToolBar
e un'assicurazione relativa è il membro di una classe CDockablePane
.
Ho guardato l'esempio di VisualStudioDemo per vedere come è stato fatto e farlo finora:
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;
}
L'immagine a colori (24 bit) viene caricata ma la maschera magenta (R255 G0 B255) è visibile. Non vedo come posso dire alla barra degli strumenti di riconoscere la maschera.
È anche possibile?
Soluzione
Non so se funziona sempre, ma uso RGB (192, 192, 192)
come colore della maschera e viene riconosciuto.
(Sembra che il controllo CMFCToolBar sia pronto per usare :: GetSysColor (COLOR_BTNFACE)
come colore trasparente ...)
Altri suggerimenti
Ho appena scoperto che una soluzione alternativa consiste nell'utilizzare immagini a 32 bit insieme al loro canale alfa. Ho provato a utilizzare un'immagine a 32 bit in precedenza, ma non l'ho fatto funzionare per qualche altro motivo e poi ho pensato che le immagini a 32 bit non funzionassero.
Se vuoi usare immagini a 32 bit non usare CBitmap
invece usa ATL :: CImage
o oggetto CPNGImage
e carica < codice> ID risorsa .