2016-05-31 10 views
0

私はwxFormbuilderでこの単純なwxWidgetsのアプリ作成:あなたが見ることができるようにリボンメニュー空白

screenshot

を、リボンメニュータブ上の奇妙な空白があります。私は行方不明のものはありますか?リボンメニューを左上にまっすぐに並べる方がよいでしょう。場合には誰もがそれを望んでいる、ここでwxFormbuilderによって生成されたコードは次のとおりです。

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); 

これは私が達成したいものです:

office 2007 button

+1

結果はこのようなものでしょうか?サンプルでこれを再現できますか? – Igor

+0

@Igor Windows 10教育64ビット、wxWidgets 3.1.0はソースからビルドされました。私は試していませんが、これは単純にwxFormbuilderデザイナで見える方法です。 – calcyss

+0

サンプルを試してください。それがうまくいくなら、コードとは何が違うのかを見てください。うまくいかない場合は、wx-devに投稿するか、trac.wxwidgets.orgでチケットを開きます。また、実際にコンパイルされたアプリのバイナリを試してください。RADツールが誤解を招くことがあります。 – Igor

答えて

3

これはwxRibbonBarの正常な動作です。このスペースは、ユーザーが指定したファイルメニュー、またはwxRibbonBarが実装されたときにMS Officeアプリケーションにあった円アイコンの種類を対象としています(http://www.corsix.org/gsoc/ribbon.html参照)。

このスペースで[もっと一般的な] [ファイル]メニューを提供する方法の1つは、wxRibbonMSWArtProvider(または他のプロバイダの1つ)から独自の芸術プロバイダを派生させることです。 ::DrawTabCtrlBackgroundを上書きする必要があります。あなたはその後、すなわち、ポップアップを表示する(あなたは、「ファイル」をクリックしたときに発生します何でもないハンドラ関数にwxRibbonBar wxEVT_LEFT_DOWNイベントをバインドする必要が

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); 
} 

は、次の簡単な例でありますメニュー、またはOfficeの最新バージョンのような完全な新しいページ)。あなたはWXおよびWindowsのバージョンは何 wxRibbonBar with "File" menu

+0

どうすればオフィスの角にオフィスのようなボタンを表示できますか? – calcyss

+0

達成したいことを示す画像を質問に追加できますか?私が示したフラットボタンではなく、一種のグラデーションボタンですか? – iwbnwif

+0

私は質問を更新しました。そして、申し訳ありませんが、私は2007年のようなオフィスを意味していました。 – calcyss