2016-05-31 6 views
0

i erstellt diesen einfachen WxWidgets App in wxFormbuilder:Ribbon-Menü Leerzeichen

screenshot

Wie Sie sehen können, gibt es eine seltsame Leerzeichen auf dem Band-Menü Registerkarten. Gibt es etwas, das ich vermisse? Es wäre auf jeden Fall besser, wenn das Farbbandmenü direkt nach oben links ausgerichtet wäre. Für den Fall, jemand es will, hier ist der Code von wxFormbuilder generiert:

this->SetSizeHints(wxSize(183,146), wxDefaultSize); 

wxBoxSizer* bSizer4; 
bSizer4 = new wxBoxSizer(wxVERTICAL); 

m_ribbonBar1 = new wxRibbonBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_DEFAULT_STYLE); 
m_ribbonBar1->SetArtProvider(new wxRibbonAUIArtProvider); 
m_ribbonPage1 = new wxRibbonPage(m_ribbonBar1, wxID_ANY, wxT("File") , wxNullBitmap , 0); 
m_ribbonBar1->SetActivePage(m_ribbonPage1); 
m_ribbonPanel1 = new wxRibbonPanel(m_ribbonPage1, wxID_ANY, wxT("File") , wxNullBitmap , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE); 
m_rbtnBar = new wxRibbonButtonBar(m_ribbonPanel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0); 
m_rbtnBar->AddButton(wxID_ANY, wxT("New"), wxNullBitmap, wxEmptyString); 
m_rbtnBar->AddButton(wxID_ANY, wxT("Save"), wxNullBitmap, wxEmptyString); 
m_rbtnBar->AddButton(wxID_ANY, wxT("Load"), wxNullBitmap, wxEmptyString); 
m_ribbonPage2 = new wxRibbonPage(m_ribbonBar1, wxID_ANY, wxT("View") , wxNullBitmap , 0); 
m_ribbonBar1->SetActivePage(m_ribbonPage2); 
m_ribbonPanel21 = new wxRibbonPanel(m_ribbonPage2, wxID_ANY, wxT("View") , wxNullBitmap , wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_DEFAULT_STYLE); 
m_ribbonButtonBar21 = new wxRibbonButtonBar(m_ribbonPanel21, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0); 
m_ribbonButtonBar21->AddButton(wxID_ANY, wxT("Do something"), wxNullBitmap, wxEmptyString); 
m_ribbonButtonBar21->AddButton(wxID_ANY, wxT("Do something else"), wxNullBitmap, wxEmptyString); 
m_ribbonBar1->Realize(); 

bSizer4->Add(m_ribbonBar1, 0, wxEXPAND, 5); 

wxBoxSizer* mainSizer; 
mainSizer = new wxBoxSizer(wxVERTICAL); 

m_ntbkMain = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0); 
m_panel1 = new wxPanel(m_ntbkMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
wxBoxSizer* bSizer6; 
bSizer6 = new wxBoxSizer(wxHORIZONTAL); 

wxBoxSizer* bSizer7; 
bSizer7 = new wxBoxSizer(wxVERTICAL); 

m_button11 = new wxButton(m_panel1, wxID_ANY, wxT("MyButton"), wxDefaultPosition, wxDefaultSize, 0); 
bSizer7->Add(m_button11, 0, wxALL, 5); 

m_button12 = new wxButton(m_panel1, wxID_ANY, wxT("MyButton"), wxDefaultPosition, wxDefaultSize, 0); 
bSizer7->Add(m_button12, 0, wxALL, 5); 

m_button13 = new wxButton(m_panel1, wxID_ANY, wxT("MyButton"), wxDefaultPosition, wxDefaultSize, 0); 
bSizer7->Add(m_button13, 0, wxALL, 5); 


bSizer6->Add(bSizer7, 1, wxEXPAND, 5); 


m_panel1->SetSizer(bSizer6); 
m_panel1->Layout(); 
bSizer6->Fit(m_panel1); 
m_ntbkMain->AddPage(m_panel1, wxT("Tab 1"), true); 
m_panel2 = new wxPanel(m_ntbkMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
m_ntbkMain->AddPage(m_panel2, wxT("a page"), false); 
m_panel3 = new wxPanel(m_ntbkMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
m_ntbkMain->AddPage(m_panel3, wxT("a page"), false); 
m_panel4 = new wxPanel(m_ntbkMain, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); 
m_ntbkMain->AddPage(m_panel4, wxT("a page"), false); 

mainSizer->Add(m_ntbkMain, 1, wxEXPAND, 5); 


bSizer4->Add(mainSizer, 1, wxEXPAND, 5); 


this->SetSizer(bSizer4); 
this->Layout(); 

this->Centre(wxBOTH); 

Dies ist, was ich erreichen möchte:

office 2007 button

+1

Was sind Sie wx und Windows-Version? Kannst du das in der Probe reproduzieren? – Igor

+0

@Igor Windows 10 Bildung 64-Bit, WxWidgets 3.1.0 aus der Quelle gebaut. Ich habe es nicht ausprobiert, so sieht es auch im wxFormbuilder Designer aus. – calcyss

+0

versuchen Sie das Beispiel. Wenn es funktioniert, sehen Sie, was mit Ihrem Code anders ist. wenn nicht - naja, poste nach wx-dev oder öffne ein Ticket auf trac.wxwidgets.org. Probieren Sie auch die tatsächlich kompilierte App-Binärdatei aus - manchmal kann das RAD-Tool irreführend sein. – Igor

Antwort

3

Dies ist das normale Verhalten von wxRibbonBar ist. Der Speicherbereich ist für ein vom Benutzer bereitgestelltes Dateimenü oder die Art des Kreissymbols vorgesehen, das in MS Office-Anwendungen verwendet wurde, als wxRibbonBar implementiert wurde (siehe http://www.corsix.org/gsoc/ribbon.html).

Eine Möglichkeit, das [jetzt gebräuchlichere] "Datei" -Menü in diesem Feld bereitzustellen, besteht darin, Ihren eigenen Kunstanbieter von wxRibbonMSWArtProvider (oder einem der anderen Anbieter) abzuleiten. Sie müssen ::DrawTabCtrlBackground überschreiben.

Das folgende ist ein einfaches Beispiel:

void myArtProvider::DrawTabCtrlBackground(
         wxDC& dc, 
         wxWindow* WXUNUSED(wnd), 
         const wxRect& rect) 
{ 
    // Draw the background for the whole tab area. 
    dc.SetPen(*wxTRANSPARENT_PEN); 
    dc.SetBrush(m_tab_ctrl_background_brush); 
    dc.DrawRectangle(rect.x, rect.y, rect.width, rect.height); 

    // Draw the "File" menu background, unfortunately its static and doesn't change when hovered. 
    dc.SetBrush (wxColour(35, 70, 135)); 
    dc.DrawRectangle (rect.x, rect.y, 60, rect.height); 
    dc.SetFont (m_tab_label_font); 

    // Centre the "File" text in the available space (alternatively this could use wxDC::DrawLabel). 
    dc.SetTextForeground (*wxWHITE); 
    int text_height; 
    int text_width; 
    dc.GetTextExtent ("File", &text_width, &text_height); 
    int y = rect.y + ((rect.height - text_height)/2); 

    // Draw the "File" text. 
    dc.DrawText("File", rect.x + ((60 - text_width)/2) + 1, y); 
} 

Sie dann die wxRibbonBar wxEVT_LEFT_DOWN Ereignis an einen Handler-Funktion binden müssen, das tut, was Sie passieren soll, wenn Sie auf „Datei“ klicken (dh zeigen ein Popup Menü oder eine ganz neue Seite wie die neuesten Versionen von Office).

Das Ergebnis ist so etwas wie diese: wxRibbonBar with "File" menu

+0

Wie kann ich dann einen Office-2010-ähnlichen Button an der Ecke des Fensters bekommen? – calcyss

+0

Bitte fügen Sie Ihrer Frage ein Bild hinzu, das zeigt, was Sie erreichen möchten. Meinst du eine Art Farbverlaufsknopf und nicht den flachen Knopf, den ich zeigte? – iwbnwif

+0

Ich habe die Frage aktualisiert. Entschuldigung, ich meinte Office-2007-like. – calcyss

Verwandte Themen