wxWidgets从空项目开始Hello World

前文回顾

接上篇,已经是在CodeBlocks20.03配置了wxWidgets3.0.5,并且能够通过项目创建导航创建一个新的工程,并且成功运行。

那么上一个是通过CodeBlocks的模板创建的,一进去就已经是2个头文件+2个cpp文件,总是感觉缺少点基础,不看一下从空项目怎么弄出wxWidgets总感觉不爽。

从空项目开始的wxWidgets

创建新的空项目

  1. 新建项目--> empty project
  2. 新建一个 empty file,保存为wxMain.cpp

Hello World的代码

一个wxWidgets的最简单程序,需要一个MyFrame类继承wxFrame用于窗体UI,另外需要一个wxApp类来控制程序,且需要重写OnInit()函数。

#include 

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中的状态如下图所示:

wxWidgets从空项目开始Hello World_第1张图片

遇到的几个问题及解决

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...中添加上就可以去下一步了。

wxWidgets从空项目开始Hello World_第2张图片

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|

wxWidgets从空项目开始Hello World_第3张图片

这个已经提示跟lib有关系了,考虑到前面2个问题都是include目录没有指定造成的,那当前的错误就很可能是lib的目录没有指定造成的?这里可以去参考一下前一节模板出来的Build Log,我们加上 -I 再跟上lib所在的目录就可以了:

wxWidgets从空项目开始Hello World_第4张图片

4- 运行时错误

上面的gif最后已经显示了运行时错误,找不到几个.dll文件。

那么回想一下,到目前为止的操作中就没有指示Linker的路径,所以到Build Option里去添加上就可以了!

小结

从空项目开始,则需要指示wx.h以及setup.h的include的路径;还需要添加 -I mswud的路径;最后还要在Linker中添加.dll的路径,这样就可以成功运行了~

你可能感兴趣的:(wxWidgets,c++)