如何通过wxTheApp->GetTopWindow()获取从wxFrame派生的My object?
How to get My object, derived from wxFrame through wxTheApp->GetTopWindow()?
我在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()
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- 如何通过wxTheApp->GetTopWindow()获取从wxFrame派生的My object?