zoukankan      html  css  js  c++  java
  • 最短的wxWidgets程序

        写C++程序用什么工具?在linux下我觉得netbeans6.1还是不错的,在windows下就没有什么工具会超越MS的vs了。但是专业版太贵,Microsoft Visual C++ 2008 速成版却是免费的。不过速成版里没有MFC,所以还得选择一个GUI库----其实,MFC不用也罢。。。。。。GUI库很多,但成熟、有丰富文档、免费且跨平台的却没几个。据说QT很好,但QT在vs上的授权不是免费的,且不是标准C++所写,所以选择wxWidgets。这个库很难说出它的缺点,如果非要吹毛求疵的话,就是wxWidgets太像MFC了。还有人说他不够新潮,没有大量使用template等等,如果你也一样的无聊我也不说了。
        一个wxWidgets程序至少应该这样:
    #include"wx/wx.h"
    class Plot3DApp:public wxApp{
    public:
        virtual bool OnInit();
    }
    ;

    class Plot3DFrame:public wxFrame{
    public:
        Plot3DFrame(
    const wxString& title);
    }
    ;

    IMPLEMENT_APP(Plot3DApp)
    bool Plot3DApp::OnInit(){
        Plot3DFrame 
    *frame=new Plot3DFrame(wxT("Plot3D"));
        frame
    ->Show(true);
       
    return true;
    }


    Plot3DFrame::Plot3DFrame(
    const wxString &title)
    :wxFrame(NULL,wxID_ANY,title)
    {}

    编译后得到如图所示


    关于这个程序,还有几点需要说明:
    1)如何编译。当然首先要编译好wxWidgets库.我用的IDE是Microsoft Visual C++ 2008 速成版。
    编译好后设置:
    包含文件路径:C:\wxWidgets-2.8.7\include
                         和C:\wxWidgets-2.8.7\lib\vc_lib\mswd;
    库路径:          C:\wxWidgets-2.8.7\lib\vc_lib
    项目属性设置:
    预处理器定义     WIN32;_DEBUG;__WXMSW__;__WXDEBUG__;_WINDOWS;NOPCH
    连接器输入        wxmsw28d_core.lib wxbase28d_net.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxexpatd.lib winmm.lib comctl32.lib rpcrt4.lib wsock32.lib odbc32.lib(当然,你看到了我编译的库是debug版)

    2)说明一个wxWidgets程序至少要定义两个类:一个继承自wxApp的App类,该类必须定义virtual bool OnInit()函数;一个是继承自wxFrame的Frame类;

    3)virtual bool OnInit()函数至少要实现类似    

            Plot3DFrame *frame=new Plot3DFrame(wxT("Plot3D"));
            frame
    ->Show(true);

    这两句功能,即构造一个Frame类并显示,进入消息循环;

    4)
    Frame类要设置好父类wxFrame的两个参数::wxFrame(NULL,wxID_ANY,title)

    5)main()或WinMain()在哪里?

    #define IMPLEMENT_APP(appname)              \
        IMPLEMENT_APP_NO_THEMES(appname)        \
        IMPLEMENT_WX_THEME_SUPPORT
    /*****************(1)*******************/
    #define IMPLEMENT_APP_NO_THEMES(appname)    \
        IMPLEMENT_APP_NO_MAIN(appname)          \
        IMPLEMENT_WXWIN_MAIN
    /*****************(1.2)*******************/
    #define IMPLEMENT_WXWIN_MAIN \
        
    extern "C" int WINAPI WinMain(HINSTANCE hInstance,                    \
                                      HINSTANCE hPrevInstance,                \
                                      wxCmdLineArgType lpCmdLine,             \
                                      
    int nCmdShow)                           \
        {                                                                     \
            
    return wxEntry(hInstance, hPrevInstance, lpCmdLine, nCmdShow);    \
        }

    看到了吗?看来每个C++程序必有一个main函数这句话不错,就如能量守恒一个不可能被表象掩盖,区别只在于以何种方式包装,掩藏.
    6)可能出现的错误,特别是连接错误:
    Linking...
    Linking...
    main.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall wxApp::Initialize(int &,wchar_t * *)" (?Initialize@wxApp@@UAE_NAAHPAPA_W@Z)
    注意参数“wchar_t * *”,可见与UNICODE有关,改变设置Project ->Properties->Configuration Properties->General->Project Defaults->Character Set作一下改变(Use Unicode Character SetNot Set)

    7)我错了,其实还可以更短:
    #include"wx/wx.h"
    class Plot3DApp:public wxApp{
    public:
         
    virtual bool OnInit();
    }
    ;
    IMPLEMENT_APP(Plot3DApp)
    bool Plot3DApp::OnInit(){
         wxFrame 
    *frame=new wxFrame(NULL,wxID_ANY,wxT("Plot3D"));
         frame
    ->Show(true);
         
    return true;
    }

  • 相关阅读:
    各种数据库连接代码(转)
    面向服务架构(SOA)的原则(转)
    运用API函数获取系统信息(转)
    7种程序员的素质
    一种通过sql server的作业调度+存储过程来建立自动备份的方法
    数据库设计方法、规范与技巧(转)
    部署托管代码中的 XML Web services
    Procedure 存储过程(转)
    判断数字函数
    asp.net中窗口相关操作总结(javascript)
  • 原文地址:https://www.cnblogs.com/eyye/p/1207447.html
Copyright © 2011-2022 走看看