zoukankan      html  css  js  c++  java
  • wxwidgets学习与使用备忘录一(下载、安装、配置篇)

    一、下载:

      到wxwidgets官网下载安装包: http://www.wxwidgets.org/downloads,我用的是windows版本,所以下载wxMSW版本的 wxWidgets。

    二、安装:

      这个没什么好说的,都是按惯例点下一步,我本地是安装到:D:\wxWidgets-2.8.12。

    三、配置:

      这里事情比较多,也是比较烦人的地方。。。

    1、编译:

      打开D:\wxWidgets-2.8.12\build\msw\wx.dsw,分别编译debug、release、Unicode debug、Unicode release版本。这个步骤是用来生成wxwidgets开发时用到的各个lib的。

    2、设置包含文件路径:

      打开vc,点击菜单“工具”-》“选项”-》“项目”-》“vc目录”-》“包含文件”,添加“D:\wxWidgets-2.8.12\lib\vc_lib\mswd”和“D:\wxWidgets-2.8.12\include”。当然,也可以在每个工程里面设置,步骤是工程“属性”-》“c++”-》“常规”-》“附加包含目录”,添加上面的两个路径。两个效果差不多,看个人喜好了。必须注意的是:wxwidgets支持很多编译配置的,如果是release版本,那就把上述路径的“D:\wxWidgets-2.8.12\lib\vc_lib\mswd”换成“D:\wxWidgets-2.8.12\lib\vc_lib\msw”,如果是Unicode版本,那么需要把文件夹名字换成mswu和mswud,以此类推。

    3、设置库路径:

      打开vc,点击菜单“工具”-》“选项”-》“项目”-》“vc目录”-》“库文件”,添加“D:\wxWidgets-2.8.12\lib\vc_lib”。当然,也可以在每个工程的里面设置,步骤是工程“属性”-》“链接器”-》“常规”-》“附加库目录”,添加“D:\wxWidgets-2.8.12\lib\vc_lib”。

    四、hello world:

      配置好之后,我们尝试使用wxwidgets建立第一个程序。

    1、新建一个空白解决方案:wxwidgets_hello_world。

    2、在源文件中添加一个cpp文件:main.cpp,添加以下代码:

    #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(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 wxWidgets!") ); 
    } 
    
    void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) 
    { 
        Close(true); 
    } 
    
    void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) 
    { 
        wxMessageBox( _("This is a wxWidgets Hello world sample"), 
            _("About Hello World"), 
            wxOK | wxICON_INFORMATION, this ); 
    } 

     3、配置工程属性:

      (1)、点击工程“属性”-》“常规”-》“使用托管扩展”,设置为否,否则生成的程序在移动界面时会崩溃。

      (2)、点击工程“属性”-》“c++”-》“预处理器”-》“预处理器定义”,改为 WIN32;_DEBUG;__WXMSW__;__WXDEBUG__;_WINDOWS;NOPCH;_USRDLL;

      (3)、点击工程“属性”-》“c++”-》“代码生成”-》“运行时库”,改为“多线程调试 DLL (/MDd)”,这个要注意,不然链接报很多错误。

      (4)、点击工程“属性”-》“链接器”-》“输入”,添加这些库:

      wxmsw28d_core.lib
      wxbase28d.lib
      wxtiffd.lib
      wxjpegd.lib
      wxpngd.lib
      wxzlibd.lib
      wxregexd.lib
      wxexpatd.lib
      winmm.lib
      comctl32.lib
      rpcrt4.lib
      这里需要注意的是,如果是release版本,把那些文件名最后的“d”换成“r”,如果是Unicode版本,还需要在“d”或者“r”之前添加“u”。

      另外,这些库不是必须的,根据不同的程序需求调用,可能可以删掉部分lib,或者需要添加其他lib。

    4、编译,运行程序:

      如果没什么意外,那么你的第一个hello world产生了,程序效果图如下:

      

    5、一些补充:

      (1)、程序没看到入口点函数“main”、“Main”之类的,其实程序的入口点函数是IMPLEMENT_APP(MyApp)。

      (2)、wxApp是进程类,MyFrame是窗口类。

      (3)、这些是窗口类的事件处理函数表声明:

      BEGIN_EVENT_TABLE(MyFrame, wxFrame)
      EVT_MENU(ID_Quit,  MyFrame::OnQuit)
      EVT_MENU(ID_About, MyFrame::OnAbout)
      END_EVENT_TABLE()

      (4)、有没有注意到生成的程序图标是默认的不好看?

      (a)、新建一个文本文件,改名为“wxwidgets_hellow_world.rc”,里面添加两行:

      #include "wx/msw/wx.rc"
      hello ICON "hello.ico"

      (b)、hello.ico是个icon文件,复制一个或者自己画一个都行。

      (c)、将这个资源文件添加到工程的资源文件目录,如下图:

      

      (d)、然后在MyFrame的构造函数开始时添加一行代码:SetIcon(wxICON(hello));

      设置程序的icon为我们自己刚定义的。

      (e)、重新编译运行,这样你的程序就有自己的icon啦。。。

      (5)、d、r、u之间的关系,d表示debug版本、r表示release版本,u表示Unicode版本,选择不同的版本,对应的包含路径和库文件路径也不一样的,如msw、mswd、mswu、mswud分别对应release版本、debug版本、Unicode的release版本、Unicode的debug版本。wxbase28.lib、wxbase28d.lib、wxbase28u.lib、wxbase28ud.lib分别对应release版本、debug版本、Unicode的release版本、Unicode的debug版本。是否使用Unicode版本,在工程“属性”-》“常规”-》“字符集”里面设置。

    五、后语:

      好了,到现在为止,你已经初步知道怎么使用wxwidgets了,起来走走吧,脖子扭扭屁股扭扭。。。程序猿就该对自己好一点,不然亚健康。。。

  • 相关阅读:
    Unique Paths II
    Subsets II
    Subsets
    Jump Game II
    Jump Game
    Valid Sudoku
    Valid Parentheses
    Length of Last Word
    Trapping Rain Water
    Sum Root to Leaf Numbers
  • 原文地址:https://www.cnblogs.com/yuohoo/p/2863262.html
Copyright © 2011-2022 走看看