如何获取我的对象,通过wxTheApp-> GetTopWindow()从wxFrame派生?

时间:2014-11-18 15:49:25

标签: c++ wxwidgets

我在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吗?

1 个答案:

答案 0 :(得分:2)

这里有两件事。首先,您需要使用wxGetApp()函数。与wxTheApp不同,它返回派生类型的应用程序,即Application而不是wxApp在您的情况下(并且它还将其作为引用而不是指针返回,因为它' s永远不应该是null)。请注意,如文档中所述,您需要使用wxDECLARE_APP()宏在包含应用程序类声明的标头中声明此函数。

其次,您仍然无法通过GetConfigDialog()指针调用派生类wxWindow方法。你可以使用动态转换,但这将是丑陋和不安全的。相反,添加一个方法来检索应用程序类的真正主框架(当然,您也需要在其中存储指向它的指针),例如, GetMainFrame()

如果同时执行这两项操作,则代码将变为

wxGetApp().GetMainFrame()->GetConfigDisplay()