您的位置:首页 > 其它

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

2014-11-25 09:49 399 查看
一、下载:

  到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了,起来走走吧,脖子扭扭屁股扭扭。。。程序猿就该对自己好一点,不然亚健康。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: