第一个wxWidgets程序

来源:互联网 发布:衣柜造型设计软件 编辑:程序博客网 时间:2024/04/29 14:00
第一个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是这样用的。
    事不宜迟,在官方网站(::URL::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) ;
}