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)