首页 > 其他 > 详细

索引监控

时间:2014-03-29 05:32:33      阅读:295      评论:0      收藏:0      [点我收藏+]

本节将会手动编写创建一个最简单的wxWidgets程序,该程序不做任何事情,只是一个窗体。写的比较细,包括部分源码及运行原理,希望可以彻底理解!


1. Frame和Dialog的区别


一般情况下,有菜单工具栏的是Frame,没有的是Dialog。当然这是一般情况,因为你完全可以把Dialog做成Frame样子。Frame一般用做主窗体,可以有菜单、工具栏、状态栏。Dialog用做模式窗口,可以返回不同的值,比如打开个设置对话框、确认对话框等等。用一个图片来说明:

bubuko.com,布布扣


wxWidgets(以下简称wx)程序必需包涵一个顶级窗体,而wx只有两个顶级窗体就是wxFrame和wxDialog,所以我们和程序里面必需有一个wxFrame或是wxDialog。



2. 程序入口


以我们的经验,C/C++的入口就是main函数。wx中入口函数当然也是main,只是main函数已经在wx库中被定义好了,不需要再重新定义了。可以从源码wx/app.h中找到main函数被定义在宏wxIMPLEMENT_WXWIN_MAIN中:

    #define wxIMPLEMENT_WXWIN_MAIN_CONSOLE                                            int main(int argc, char **argv)                                               {                                                                                 wxDISABLE_DEBUG_SUPPORT();                                                                                                                                  return wxEntry(argc, argv);                                               }

IMPLEMENT_APP(app)宏调用了wxIMPLEMENT_WXWIN_MAIN并且完成了许多wx初始化的工作,所以在我们的程序中,只需加上IMPLEMENT_APP(OurApp)作为入口即可,预处理器会自动替换……



3. 初始化


上面的IMPLEMENT_APP宏接受一个wxApp在类型,即OurApp必需是wxApp类型或wxApp的派生类型,所以我们先定义一个继承自wxApp的类OurApp:

#include <wx/wx.h>

class OurApp: public wxApp
{

};

IMPLEMENT_APP(OurApp)
wxApp实际是在wx/app.h中声明的,也可以使用#include <wx/app.h>,wx/wx.h中包括了大部分常用的wx头文件,在后面的程序中如果你不知道该include谁,最简单的办法就是include wx/wx.h


IMPLEMENT_APP中会调用wxApp的OnInit方法,窗体的初始化工作应该放在这里进行:

    // Called before OnRun(), this is a good place to do initialization -- if
    // anything fails, return false from here to prevent the program from
    // continuing. The command line is normally parsed here, call the base
    // class OnInit() to do it.
    virtual bool OnInit();
我们只需在OurApp中实现这个方法即可:

#include <wx/wx.h>

class OurApp: public wxApp
{
    bool OnInit()
    {
      //init
    }
};

IMPLEMENT_APP(OurApp)
返回true代表正常,后续的OnRun和OnExit会被调用;返回false程序将退出

4. 创建Frame


前面说到,我们必需至少有一个Frame或Dialog,这里我们将创建wxFrame

先看wxFrame构造函数声明:

wxFrame::wxFrame( wxWindow *  parent,
        wxWindowID      id,
        const wxString &    title,
        const wxPoint &     pos = wxDefaultPosition,
        const wxSize &      size = wxDefaultSize,
        long    style = wxDEFAULT_FRAME_STYLE,
        const wxString &    name = wxFrameNameStr 
    )  
最简单的方案,我们可以只提供三个参数:parent, id, title

wxFrame* frame = new wxFrame(NULL, wxID_ANY, "Our First App"));
parent是NULL, 没有父窗体(因为它是顶级窗体),wxID_ANY(其实就是-1)表示让wx安排一个ID(wx中的各控件用ID来识别)



5. 合成


So,终于可以合成出完成的一个程序了:

#include <wx/wx.h> 
 
class OurApp : public wxApp
{
    bool OnInit()
    {
        wxFrame* frame = new wxFrame(NULL, wxID_ANY, "Our First App"); 
        frame->Show();
        return true;
    }
 
 
};
 
 
IMPLEMENT_APP(OurApp)
frame->Show()就不解释了,太明显了!


编译、运行就O了:

bubuko.com,布布扣





索引监控,布布扣,bubuko.com

索引监控

原文:http://blog.csdn.net/wanghui5767260/article/details/22386043

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!