第一个wxWidgets程序 [原] | 2006-11-19 22:13:00 |
标签:wxWidgets | 缩起正文 字号:大 小 |
第一个wxWidgets程序(2006年11月19日) 几乎看了一天的文档,还不知道从哪里开始,心想使用cmake做编译工具可是《Cross-Platform GUI Programming with wxWidgets 》教材上推荐使用Bakefile,并且以Bakefile为例子。重点阅读了wx-config这部分的内容还是不得要领。后来在教材中看到在linux下安装并建立环境的话可以参考docs/x11(可以是相应目录)目录下的install.txt。在install.txt看到说明在安装完之后执行g++ myfoo.cpp `wx-config --libs --cxxflags` -o myfoo 来编译程序才弄清楚原来wx-config是这样用的。 事不宜迟,在官方网站(http://www.wxwidgets.org)下载hworld.cpp——一个最简单的例程,拷贝到我的虚拟机上,然后执行g++ hworld.cpp `wx-config --libs --cxxflags` -o hworld。感谢上帝没有一个错误告警信息,马上执行一下出来一个错误:"libwx_x11univ_xrc-2.6.so.0:cannot open share......"。应该是共享库找不到,不管三七二十一执行ldconfig,然后再次执行hworld,呵呵成功了,xwindow显示了一个最简单的窗口。 这个窗口虽然简单但是我第一次在linux系统编出一个xwindow的窗口,意义重大,真是感谢wxWidgets,让我用如此简单的方式编写一个xwindow窗口,而且还是跨平台的,虽然我现在还不知道如何将这个程序跨到mswindows,但不管这么说它天生具有跨平台的特性,太好了。 附:hworld源程序 /* * hworld.cpp * Hello world sample by Robert Roebling */ #include "wx/wx.h" class MyApp: public wxApp { virtual bool OnInit(); }; class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) ; void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; enum { ID_Quit = 1, ID_About, }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) ) ; frame->Show(TRUE); SetTopWindow(frame); return TRUE; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, "&About..." ) ; menuFile->AppendSeparator(); menuFile->Append( ID_Quit, "E&xit" ) ; wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, "&File" ) ; SetMenuBar( menuBar ) ; CreateStatusBar(); SetStatusText( "Welcome to wxWindows!" ) ; } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox("This is a wxWindows Hello world sample", "About Hello World", wxOK | wxICON_INFORMATION, this) ; } |