我对wxwidgets的体系结构和构造函数的理解

本文探讨了wxWidgets框架中构造函数的作用,指出在创建窗口实例时,基类构造函数的调用至关重要。同时,文章阐述了wxWidgets程序的执行流程,从wxApp实例化到wxFrame和控件的创建,揭示了框架结构及其在不同平台上的运行方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1、关于构造函数:

MyFrame::MyFrame(const wxString& title)
       : wxFrame(NULL, wxID_ANY, title)

        这是MyFrame的构造函数,后面的: wxFrame(NULL, wxID_ANY, title)是最先执行的,用于调用它的基类wxFrame)的构造函数,这个基类的构造函数才真正创建了一个窗口的实例。我是这样理解这种调用的:将基类的部分或者所有参数传递给继承该基类的子类的构造函数。

        构造函数MyFrame之前的MyFrame::示类名空间,指示MyFrame函数是属于MyFrame类的,这在之前的类定义中就能得到印证:

 

class MyFrame : public wxFrame
{
public:
    // 主窗口类的构造函数
    MyFrame(const wxString& title);

……
}

 

         在对MyFrame类定义时,必须定义其构造函数(要求构造函数的名称和类名称一致),可以把一个类得构造函数理解成该类的一个特殊的成员函数(名称和类名一样),构造函数和其他成员函数一样都需要在类定义之后具体展开(对构造函数而言是初始化)。

 

2、关于wx的框架结构:

 

        从程序的总体思路上来说:首先建立一个应用程序类,在该类的实例化过程中创建主窗口类,在主窗口的实例化中创建控件类(或者是子窗口),亦即:应用程序类(wxApp类)>>>创建>>>主窗口类(如wxFrame类)>>>创建>>>控件类(如wxbutton类)。

        从代码的角度而言:首先必须将所有需要创建的类都事先定义好,包括类继承于哪个基类,包括哪些成员函数(包括构造函数)、成员变量。然后在类相应的构造函数中实例化对应的类,并创建包含的类。

        程序运行的时候,最核心的也是最先执行的是以下这段代码,就像地基一样,所有的上层建筑(窗口和控件等等)都是建立在这段代码之上的:

 

bool MyApp::OnInit()
{
    // 创建主窗口
    MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));

    // 显示主窗口
    frame->Show(true);

    // 开始事件处理循环
    return true;
}


 wxWidgets程序执行过程

转自http://blog.csdn.net/bn007/article/details/3475674)

     1)根据平台不同,函数main,WinMain或类似的函数运行(这个函数是由wxWidgets提供的,并不是应用程序)。wxWidgets初始化内部数据结构,创建一个wxApp实例(本例中为MyApp)。
    2)wxWidgets调用MyApp::OnInit,创建一个wxFrame实例(本例中为MyFrame)。
    3)MyFrame构造函数通过wxFrame的构造函数创建主窗口,并且增加菜单栏、状态条等各种控件。
    4)MyApp::OnInit显示frame.
    5)wxWidgets开始消息循环,等待事件发生,并把事件分配到相应的处理函数。
    当主窗口销毁时,程序也随之结束。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值