wxwidgets学习与使用备忘录一(下载、安装、配置篇)

时间:2022-11-06 15:31:28

一、下载:

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

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产生了,程序效果图如下:

  wxwidgets学习与使用备忘录一(下载、安装、配置篇)

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)、将这个资源文件添加到工程的资源文件目录,如下图:

  wxwidgets学习与使用备忘录一(下载、安装、配置篇)

  (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了,起来走走吧,脖子扭扭屁股扭扭。。。程序猿就该对自己好一点,不然亚健康。。。