我在C ++中的OOP规则方面不太好。 我有这个应用程序 OnInit()回调:
bool Application::OnInit()
{
MainFrame *mainFrame = new MainFrame();
mainFrame->Show();
SetTopWindow(mainFrame);
return true;
}
在MainFrame中,从wxFrame派生,我有私有成员和getter:
wxDialog* MainFrame::GetConfigDialog()
{
return m_ConfigDialog;
}
我想在其他课程中获得ConfigDialog,所以我打电话给
wxTheApp->GetTopWindow()->GetConfigDialog()
但它抱怨 wxWindow没有名为GetConfigDialog()的成员 。我能以某种方式从wxTheApp获取我的MainFrame吗?
答案 0 :(得分:2)
这里有两件事。首先,您需要使用wxGetApp()函数。与wxTheApp
不同,它返回派生类型的应用程序,即Application
而不是wxApp
在您的情况下(并且它还将其作为引用而不是指针返回,因为它' s永远不应该是null)。请注意,如文档中所述,您需要使用wxDECLARE_APP()
宏在包含应用程序类声明的标头中声明此函数。
其次,您仍然无法通过GetConfigDialog()
指针调用派生类wxWindow
方法。你可以使用动态转换,但这将是丑陋和不安全的。相反,添加一个方法来检索应用程序类的真正主框架(当然,您也需要在其中存储指向它的指针),例如, GetMainFrame()
。
如果同时执行这两项操作,则代码将变为
wxGetApp().GetMainFrame()->GetConfigDisplay()