使用visualstudio编写c语言 (visual studio 2022使用教程)

要使用wxWidgets,虽然有现成的IDE——Code::Block(以下简称CB)可用,但用不习惯——丑陋[我想静静]。

但在CB可以使用wxSmith进行可视化编程,就是拖拽控件进行界面设计[强]

而且在Visual Studio Code(以下简称Code)中搭建各种语言的开发环境真太容易了,今天咱们就来搭建wxWidgets的开发。

其实理论上就是搭建C++的开发环境,就是安装GCC编译器,和CMake工程管理构建工具。

以上这些我之前就写了文章讲过。

系列文章如下 :

Windows下安装MinGW(C/C++编译工具)

Windows上CMake的配置和使用-*今条头日**

C++开发环境搭建好后,wxWidgets的开发环境其实也搭建得差不多了。

wxWidgets就是一个开发库,在项目中引入头文件和库文件就行了。

首先,我们就来*载下**头文件和库文件。

在wxWidgets官网首页点击 Download now 按钮进入*载下**页面。

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

读者根据自身需要*载下**对应版本,不需要非得和笔者的一样。

Header Files 头文件

Development Files 开发库文件

Release DLLs 发行时使用的库文件

解压完成后把头文件和库文件放到同一个目录下。

用visualstudiocode写程序,visualstudiocode页面设计

这里提示一下,直接解压出来的lib文件夹下的子目录如果在编译时报错,就根据报错提示信息将此子目录改名为gcc_lib。如果没有报错,就忽略。CB上会报错。

开发环境现在算是已经搭建完毕了,接下来就写个Hello World程序验证一下。

打开Code,打开文件夹(Open Folder)helloworld

用visualstudiocode写程序,visualstudiocode页面设计

New File...(新建文件)CMakeLists.txt

cmake_minimum_required(VERSION 3.2)

project(helloworld LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories("d:/ku/wxWidgets/include")
link_directories("d:/ku/wxWidgets/lib/gcc1220_x64_dll")

set(SOURCES
    HelloWorldApp.cpp
    HelloWorldFrame.cpp
)

add_executable(helloworld
    ${SOURCES}
)

target_link_libraries(helloworld
    wxmsw32ud_core wxbase32ud
)

然后Ctrl + Shift + P 配置 CMake,

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

创建HelloWorldApp.cpp

#ifndef HELLOWORLDAPP_H
#define HELLOWORLDAPP_H

#include <wx/app.h>

class HelloWorldApp : public wxApp
{
public:
    virtual bool OnInit() override;
};

#endif

创建HelloWorldApp.cpp

#include "HelloWorldApp.h"
#include "HelloWorldFrame.h"

IMPLEMENT_APP(HelloWorldApp)

bool HelloWorldApp::OnInit()
{
    HelloWorldFrame *frame = new HelloWorldFrame(0L, "hello world");
    frame->Show(true);

    return true;
}

创建HelloWorldFrame.h

#ifndef HELLOWORLDFRAME_H
#define HELLOWORLDFRAME_H

#include <wx/wxprec.h>

#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif

#include "HelloWorldApp.h"

class HelloWorldFrame : public wxFrame
{
public:
    HelloWorldFrame(wxFrame *frame, const wxString &title);
    ~HelloWorldFrame();

private:
    enum
    {
        idMenuQuit = 1000,
        idMenuAbout
    };

    void OnClose(wxCloseEvent &event);
    void OnQuit(wxCommandEvent &event);
    void OnAbout(wxCommandEvent &event);

    DECLARE_EVENT_TABLE()
};

#endif

创建HelloWorldFrame.cpp

#include "HelloWorldFrame.h"

BEGIN_EVENT_TABLE(HelloWorldFrame, wxFrame)
    EVT_CLOSE(HelloWorldFrame::OnClose)
    EVT_MENU(idMenuQuit, HelloWorldFrame::OnQuit)
    EVT_MENU(idMenuAbout, HelloWorldFrame::OnAbout)
END_EVENT_TABLE()

HelloWorldFrame::HelloWorldFrame(wxFrame *frame, const wxString& title)
    : wxFrame(frame, -1, title)
{
    wxMenuBar *menuBar = new wxMenuBar();
    wxMenu *fileMenu = new wxMenu(_T(""));
    fileMenu->Append(idMenuQuit, _("&Quit\tAlt+F4"), _("Quit the application"));
    menuBar->Append(fileMenu, _("&File"));

    wxMenu *helpMenu = new wxMenu(_T(""));
    helpMenu->Append(idMenuAbout, _("&About\tF1"), _("Show info about this application"));
    menuBar->Append(helpMenu, _("&Help"));

    SetMenuBar(menuBar);

    CreateStatusBar();
    SetStatusText(_("Welcome to wxWidgets..."));
}

HelloWorldFrame::~HelloWorldFrame()
{}

void HelloWorldFrame::OnClose(wxCloseEvent &event)
{
    Destroy();
}

void HelloWorldFrame::OnQuit(wxCommandEvent &event)
{
    Destroy();
}

void HelloWorldFrame::OnAbout(wxCommandEvent &event)
{
    wxMessageBox("This is a wxWidgets Hello World application",
                "About Hello World", wxOK | wxICON_INFORMATION);
}

然后点击状态栏的Build,这时会报错,提示找不到wx/setup.h。

用visualstudiocode写程序,visualstudiocode页面设计

双击错误,打开platform.h并定位到报错行,报错行改为如下代码:

#include "wx/msw/setup.h"

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

说明:wx目录下有一些与相应平台对应的子目录,其下各包含自己的setup.h文件,在不同平台上编译时需要修改platform.h中的此行使其找到相应平台的setup.h文件。Windows对应的文件夹是msw。

修改完成后,再次Build(构建),成功。

此时点击状态栏上面的Run按钮,会发现HelloWorld*ex.e**并未运行起来。

这种情况其实是应用程序没有运行时环境导致的,即运行时找不到DLL文件,因为我们没有把运行库的路径加到环境变量中。现在我们不打算用这种办法,而是到helloworld*ex.e**所在的目录下,双击运行helloworld*ex.e**,并根据其报错信息,将对应的DLL文件复制到此目录下。

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

用visualstudiocode写程序,visualstudiocode页面设计

再次运行helloworld*ex.e**,或者回到Code点击Run按钮,程序运行成功。

用visualstudiocode写程序,visualstudiocode页面设计

到此,Visual Studio Code中开发wxWidgets跨平台应用的环境就搭建好了。

为了在后面的开发中可以直接使用wxWidgets的动态库,可以将lib目录添加到环境变量中。

要发布的程序话的,就使用ReleaseDLL中的对应动态链接库文件。