2017-05-11 3 views
0

Ich möchte eine Schaltfläche zu einer wxAuiToolBar hinzufügen, die ein Symbol zeigt, das ich selbst erstellt habe (ich habe es als Datei myicon.png mit der Auflösung 24x24).Mein eigenes Icon für wxAuiToolBar hinzufügen

Das Beste, was ich so weit manged für wxsmith bmp-Datei und verwenden Sie den folgenden Code zu konvertieren:

<wxsmith> 
    <object class="wxFrame" name="MyFrame"> 
     <size>800,640</size> 
     <object class="wxAuiManager" variable="aui_manager" member="yes"> 
      <object class="AuiManagerItem"> 
       <object class="wxAuiToolBar" name="ID_AUITOOLBAR" variable="toolbar" member="yes"> 
        <pos>90,3</pos> 
        <object class="AuiToolBarItem"> 
         <object class="wxAuiToolBarItem" name="ID_AUITOOLBARMEASURE" variable="AuiToolBarMeasure" member="yes"> 
          <bitmap>/home/username/project/icon.bmp</bitmap> 
          <handler function="OnTest" entry="EVT_TOOL" /> 
         </object> 
         <label>Test</label> 
        </object> 
       </object> 
      </object> 
     </object> 
    </object> 
</wxsmith> 

auf den Code folgende Quelle Leitung:

toolbar->AddTool(ID_AUITOOLBAR1, _("Test"), 
    wxBitmap(wxImage(_T("/home/username/project/icon.bmp"))), wxNullBitmap, wxITEM_NORMAL, wxEmptyString, wxEmptyString, NULL); 

jedoch die Transparenzinformationen ist verloren.

Wenn ich die PNG-Datei verwenden oder zu xpm konvertieren, bekomme ich einen Laufzeitfehler: "../src/gtk/bitmap.cpp(626): assert" image.IsOk() "fehlgeschlagen in wxBitmap() : Ungültiges Bild "

Derzeit versuche ich, es mit WxSmith zu arbeiten, aber wenn das nicht möglich ist, würde ich mich auch freuen, wenn mir jemand helfen kann, es ohne zu arbeiten.

+0

was passiert, wenn Sie es mit auidemo Probe versuchen? – Igor

Antwort

0

Um PNG-Dateien während der Laufzeit zu laden, müssen Sie den PNG-Bild-Handler registrieren, der mit wxInitAllImageHandlers() durchgeführt werden kann. Und Sie sollten trotzdem überprüfen, ob die Bitmap-Erstellung erfolgreich war, da die Datei nicht immer gefunden oder beschädigt wurde.

Alternativ können Sie PNG direkt in Ihr Programm einbetten und dann das bequeme wxBITMAP_PNG() macro verwenden, um es zu laden. In diesem Fall können Sie die Fehlerbehandlung normalerweise weglassen.

+0

Und um es mit WxSmith zu arbeiten, habe ich den '' Eintrag in' 'geändert. Ich wollte auch erwähnen, dass es mir scheint, dass ich, wenn ich 'wxBITMAP_PNG()' 'verwende, immer noch' wxInitAllImageHandlers() 'aufrufen muss (zumindest auf meiner Linux-Plattform). – matec

Verwandte Themen