想用wxBoxSizer设定菜单栏中的自绘按键的布局,但是设置的wxBoxSizer hbox好像没有起作用,按键还是只在起始位置画,并且设置为wxALL的border好像也只加在下面,不知道哪里出了问题,希望大家能为我解答,谢谢!
wxcustommenu.h代码:
#include <wx/wx.h>
#include "wxcustombutton.h"
class wxCustomMenu : public wxWindow
{
public:
enum menu
{
homeMENU,
libMENU,
ID_FILEOPEN,
ID_QUIT,
ID_SETSNAPPATH,
ID_ABOUT
};
wxBitmap* normal = new wxBitmap(wxT("m32.png"), wxBITMAP_TYPE_PNG);
wxBitmap* down = new wxBitmap(wxT("s32.png"), wxBITMAP_TYPE_PNG);
wxBitmap* hover = new wxBitmap(wxT("m32.png"), wxBITMAP_TYPE_PNG);
wxBitmap* disable = new wxBitmap(wxT("w32.png"), wxBITMAP_TYPE_PNG);
wxBitmap* normal1 = new wxBitmap(wxT("h32.png"), wxBITMAP_TYPE_PNG);
wxBitmap* hover1 = new wxBitmap(wxT("c32.png"), wxBITMAP_TYPE_PNG);
wxColor* prebg = new wxColor(wxT("GREEN"));
wxColor* hoverbg = new wxColor(wxT("YELLOW"));
wxCustomButton* m_btn_1;
wxCustomButton* m_btn_2;
wxCustomMenu(wxWindow* parent, wxColor bg);
DECLARE_EVENT_TABLE()
};
wxcustommenu.cpp代码:
#include "wxcustommenu.h"
#include <wx/sizer.h>
BEGIN_EVENT_TABLE(wxCustomMenu, wxWindow)
END_EVENT_TABLE()
wxCustomMenu::wxCustomMenu(wxWindow* parent, wxColor bg) : wxWindow(parent, wxID_ANY),
file_menu_popup_(NULL), setting_menu_popup_(NULL)
{
wxInitAllImageHandlers();
SetBackgroundColour(bg);
wxBoxSizer* hbox = new wxBoxSizer(wxHORIZONTAL);
wxPanel *menubar_panel_;
menubar_panel_ = new wxPanel(this, wxID_ANY);
menubar_panel_->SetBackgroundColour(bg);
wxBoxSizer *top_sizer_= new wxBoxSizer(wxHORIZONTAL);
m_btn_1 = new wxCustomButton( menubar_panel_, homeMENU, wxT("Home"), wxSize(130, 50), wxDefaultPosition);
m_btn_1 -> normal_bitmap(normal)-> down_bitmap(down)-> hover_bitmap(hover);
m_btn_1 -> disable_bitmap(disable);
m_btn_1 -> pre_bg(prebg) -> hover_bg(hoverbg);
hbox->Add(m_btn_1, 0, wxALL, 5);
m_btn_2 = new wxCustomButton( menubar_panel_, libMENU, wxT("Library"), wxSize(130, 50), wxDefaultPosition);
m_btn_2 -> normal_bitmap(normal1)-> down_bitmap(down)-> hover_bitmap(hover1);
m_btn_2 -> disable_bitmap(disable);
m_btn_2 -> pre_bg(prebg) -> hover_bg(hoverbg);
hbox->Add(m_btn_2, 0, wxALL, 3);
top_sizer_->Add(hbox, 1, wxEXPAND, 5);
menubar_panel_-> SetSizer(hbox);
hbox->Fit(menubar_panel_);
}
main.cpp代码:
#include "wxcustommenu.h"
#include <wx/sizer.h>
class MyApp: public wxApp
{
wxFrame *frame;
public:
bool OnInit()
{
frame = new wxFrame(NULL, wxID_ANY, wxT("Hello wxDC"), wxPoint(50,50), wxSize(800,600));
wxCustomMenu *menubar_panel_ = new wxCustomMenu( frame, wxT("GREY") );
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add(menubar_panel_, 0, wxEXPAND);
menubar_panel_ -> Show();
frame -> SetSizer(sizer);
frame -> Show();
return true;
}
};
IMPLEMENT_APP(MyApp)
效果图:
下面绿色的是被遮挡的另一个按键,不知道为什么按键的上面和左边都没有设置到border,自绘按钮设置为鼠标放入按键窗口会使按键浮起