如何通过wxTheApp->GetTopWindow()获取从wxFrame派生的My object?

How to get My object, derived from wxFrame through wxTheApp->GetTopWindow()?

本文关键字:派生 wxFrame My object 获取 wxTheApp- 何通过 gt GetTopWindow      更新时间:2023-10-16

我在C++的OOP规则中不太好。我有这个应用程序 OnInit() 回调:

bool Application::OnInit()
{
    MainFrame *mainFrame = new MainFrame();
    mainFrame->Show();
    SetTopWindow(mainFrame);
    return true;
}

在从wxFrame派生的MainFrame中,我有私有成员和getter:

wxDialog* MainFrame::GetConfigDialog()
{
    return m_ConfigDialog;
}

我想在其他类中获取 ConfigDialog,所以我调用

wxTheApp->GetTopWindow()->GetConfigDialog()

但它抱怨wxWindow没有名为GetConfigDialog()的成员。我可以以某种方式从wxTheApp获取我的大型机吗?

这里有

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

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

如果你同时执行这两项操作,你的代码将变成

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