Question

J'ai une classe dérivée CMFCToolBar et son insance est le membre d'une classe CDockablePane .

.

J'ai consulté l'exemple VisualStudioDemo pour savoir comment procéder et obtenir les informations suivantes:

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'image haute couleur (24 bits) est chargée mais le masque magenta (R255 G0 B255) est visible. Je ne vois pas comment dire à la barre d'outils de reconnaître le masque.
Est-ce même possible?

Était-ce utile?

La solution

Je ne sais pas si cela fonctionne à chaque fois, mais j'utilise RGB (192, 192, 192) comme couleur de masque et il est reconnu.

(On dirait que le contrôle CMFCToolBar est prêt à utiliser :: GetSysColor (COLOR_BTNFACE) en tant que couleur transparente ...)

Autres conseils

Je viens de découvrir qu'une solution consiste à utiliser des images 32 bits avec leur canal alpha. J'ai essayé d'utiliser une image 32 bits plus tôt, mais cela ne fonctionnait pas pour une autre raison, puis j'ai pensé que les images 32 bits ne fonctionneraient pas.

Si vous souhaitez utiliser des images 32 bits, n'utilisez pas CBitmap , utilisez plutôt ATL :: CImage ou objet CPNGImage et chargez le . code> ID de ressource .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top