前文回顾
接上篇,已经是在CodeBlocks20.03配置了wxWidgets3.0.5,并且能够通过项目创建导航创建一个新的工程,并且成功运行。
那么上一个是通过CodeBlocks的模板创建的,一进去就已经是2个头文件+2个cpp文件,总是感觉缺少点基础,不看一下从空项目怎么弄出wxWidgets总感觉不爽。
从空项目开始的wxWidgets
创建新的空项目
- 新建项目--> empty project
- 新建一个 empty file,保存为wxMain.cpp
Hello World的代码
一个wxWidgets的最简单程序,需要一个MyFrame类继承wxFrame用于窗体UI,另外需要一个wxApp类来控制程序,且需要重写OnInit()函数。
#include <wx/wx.h>class MyFrame: public wxFrame // MyFrame要放在上面
{
public:MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame(NULL, wxID_ANY, title, pos, size){};};class MyApp: public wxApp //MyApp会调用 MyFrame
{
public:virtual bool OnInit(){MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );frame->Show( true );return true;};
};wxIMPLEMENT_APP(MyApp); //程序入口
此时在CodeBlocks中的状态如下图所示:
遇到的几个问题及解决
1-wx/wx.h:No such file or directory
||=== Build: Debug in wxEmpty03 (compiler: GNU GCC Compiler) ===|
.\wxMain.cpp|1|fatal error: wx/wx.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
找不到wx/wx.h文件或目录,这是因为没有指定include的目录,这个目录就是Gcc_dll/include,所以我们把它在项目的Build Option...中添加上就可以去下一步了。
2-wx/setup.h :No such file or directory
不仔细看好像上一个问题没解决似的,但这里的确是换了一个文件夹,这里的2个文件分别在不同的文件夹下,我们用一个表格来表示:
wxMSW_305_bin/ | ||||
include/ | ||||
msvc | ||||
wx | ||||
setup.h | ||||
wx | ||||
wx.h |
由上表可见,第1个问题是include/wx/wx.h ;而第2个问题是include/msvc/wx/setup.h,解决方法与第一个相似,Add一个include的路径到./msvc即可。
3- 一堆Error
这次显示的“error: #error "This file should only be included when using Microsoft Visual C++"|” 并且 error: pasting "/" and "vc_lib" does not give a valid preprocessing token|
这个已经提示跟lib有关系了,考虑到前面2个问题都是include目录没有指定造成的,那当前的错误就很可能是lib的目录没有指定造成的?这里可以去参考一下前一节模板出来的Build Log,我们加上 -I 再跟上lib所在的目录就可以了:
4- 运行时错误
上面的gif最后已经显示了运行时错误,找不到几个.dll文件。
那么回想一下,到目前为止的操作中就没有指示Linker的路径,所以到Build Option里去添加上就可以了!
小结
从空项目开始,则需要指示wx.h以及setup.h的include的路径;还需要添加 -I mswud的路径;最后还要在Linker中添加.dll的路径,这样就可以成功运行了~