2009-05-08 11 views
1

Ich habe eine CMFCToolBar-abgeleitete Klasse und eine davon ist das Mitglied einer CDockablePane-abgeleiteten Klasse.Wie kann ich eine CMFCToolBar Bildmasken erkennen lassen?

ich an der VisualStudioDemo Probe sah zu sehen, wie es dieses und haben bisher getan hat:

ist (24bit)
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; 
} 

Die hohe Farbenbild geladen, aber sichtbar die magentafarbene Maske (R255 G0 B255) ist. Ich sehe nicht, wie ich der Toolbar mitteilen kann, die Maske zu erkennen.
Ist das überhaupt möglich?

Antwort

3

Ich weiß nicht, ob das jedes Mal funktioniert, aber ich verwende RGB(192, 192, 192) als die Maskenfarbe und es wird erkannt.

(Scheint, wie die CMFCToolBar Kontrolle hergestellt wird ::GetSysColor(COLOR_BTNFACE) als transparente Farbe verwenden ...)

+0

Akzeptieren Sie dies als Antwort, weil dies die Lösung für 24-Bit-Bilder sein kann, worum es sich bei der Frage handelt. Obwohl meine Lösung anders ist, kann dies anderen helfen, die 24-Bit-Bilder verwenden müssen. – foraidt

+0

Ich gebe zu, es ist nicht die perfekte Lösung. Sobald der Benutzer die Farbe des Knopfgesichts ändert, wird die Transparenz wahrscheinlich verschwinden. – djeidot

0

Ich habe gerade herausgefunden, dass ein Workaround ist, 32-Bit-Bilder zusammen mit ihrem Alpha-Kanal zu verwenden. Ich habe versucht, ein 32-Bit-Bild früher, aber nicht aus einem anderen Grund zu arbeiten und dann dachte, 32-Bit-Bilder werden nicht funktionieren.

0

Wenn Sie 32-Bit-Bilder verwenden wollen CBitmap nicht statt ATL::CImage oder CPNGImage object und Last entsprechenden resource ID verwenden verwenden.