WxWidgets 初探

WxWidgets 代码阅读:

 

 

#define wxDECLARE_NO_ASSIGN_CLASS(classname)    /

    private:                                    /

        classname& operator=(const classname&)

 

 

 

#define wxDECLARE_NO_COPY_CLASS(classname)      /

    private:                                    /

        classname(const classname&);            /

        classname& operator=(const classname&)

 

 

 

BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)

EVT_MENU(Minimal_About, MyFrame::OnAbout)

END_EVENT_TABLE()

 

 

这一段代码宏扩展后和MFC的其实差不多。

 

 

#define wxBEGIN_EVENT_TABLE(theClass, baseClass) /

    const wxEventTable theClass::sm_eventTable = /

        { &baseClass::sm_eventTable, &theClass::sm_eventTableEntries[0] }; /

    const wxEventTable *theClass::GetEventTable() const /

        { return &theClass::sm_eventTable; } /

    wxEventHashTable theClass::sm_eventHashTable(theClass::sm_eventTable); /

    wxEventHashTable &theClass::GetEventHashTable() const /

        { return theClass::sm_eventHashTable; } /

    const wxEventTableEntry theClass::sm_eventTableEntries[] = { /

 

 

 

#define wxDECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) /

    wxEventTableEntry(type, winid, idLast, wxNewEventTableFunctor(type, fn), obj)

 

 

 

#define wxDECLARE_EVENT_TABLE_ENTRY(type, winid, idLast, fn, obj) /

    wxEventTableEntry(type, winid, idLast, wxNewEventTableFunctor(type, fn), obj)

 

 

 

#define wxEND_EVENT_TABLE() /

    wxDECLARE_EVENT_TABLE_TERMINATOR() };

 

 

其中, theClass::sm_eventTable等是由宏定义DECLARE_EVENT_TABLE()生成的

 

 

#define wxDECLARE_EVENT_TABLE()                                         /

    private:                                                            /

        static const wxEventTableEntry sm_eventTableEntries[];          /

    protected:                                                          /

        static const wxEventTable        sm_eventTable;                 /

        virtual const wxEventTable*      GetEventTable() const;         /

        static wxEventHashTable          sm_eventHashTable;             /

        virtual wxEventHashTable&        GetEventHashTable() const

 

 

这里就看出 static const wxEventTable        sm_eventTable; 由于是static const 成员,

因此

BEGIN_EVENT_TABLE(MyFrame, wxFrame)

EVT_MENU(Minimal_Quit,  MyFrame::OnQuit)

EVT_MENU(Minimal_About, MyFrame::OnAbout)

END_EVENT_TABLE()

就只能是在类外。

 

接下来的宏定义:

IMPLEMENT_APP(MyApp)

 

#define wxIMPLEMENT_APP_NO_MAIN(appname)                                    /

    wxAppConsole *wxCreateApp()                                             /

    {                                                                       /

        wxAppConsole::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE,         /

                                        "your program");                    /

        return new appname;                                                 /

    }                                                                       /

    wxAppInitializer                                                        /

        wxTheAppInitializer((wxAppInitializerFunction) wxCreateApp);        /

    appname& wxGetApp() { return *static_cast<appname*>(wxApp::GetInstance()); }    /

    wxDECLARE_APP(appname)

 

 

在wxApp::OnInit函数中,用户new一个继承自

wxTopLevelWindowMSW的类(Frame)时,会自动将该类的指针加到一个链表,

因此,用户不用手动释放该类。

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

 

 

预编译 警告的禁用

#pragma warning(push)

#pragma warning (disable:XXXX)

#pragma warning (once:XXXX)

...

#pragma warning(pop)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值