如何在子对话框中获取wxFrame指针

时间:2013-08-26 02:21:41

标签: c++ wxwidgets

如何在subdialog中获取父wxFrame指针

我制作一个程序来实现一些功能。我有一个wxFrame,wxMenubar,wxScrolledWindow,wxListBox。通过单击菜单栏的一些菜单,我创建了几个用于信息输入的dlgs,可能有几个级别(在dlg创建之后,也创建子dlgs)我想操纵wxFrame的wxScrolledWindow在dolyogue中的显示内容。我的qustion是:如何在dlg中获取wxFrame指针。通常我创建的dlg就像这样,

class Qgis2wxDbSourceSelectDlg:public wxDialog

Qgis2wxDbSourceSelectDlg(wxWindow * parent,wxWindowID id = wxID_ANY,const wxString& title = wxT(“Add PostGIS Table(s)”),const wxPoint& pos = wxDefaultPosition,const wxSize& size = wxSize(269,286),long style = wxDEFAULT_DIALOG_STYLE);

我想在Qgis2wxDbSourceSelectDlg中使用wxFrame指针,我该怎么办?

我应该让Qgis2wxDbSourceSelectDlg也继承自wxFrame吗?以及如何转移到指向Qgis2wxDbSourceSelectDlg的wxFrame指针?

1 个答案:

答案 0 :(得分:1)

有不同的解决方案:

  1. 最脏的方法是将Qgis2wxDbSourceSelectDlg的父级转换为wxFrame。这是可能的,因为每个wxDialog都有一个返回GetParent的{​​{1}}函数。 wxWindow*

  2. 另一种选择是在构造函数中传递wxFrame* frame = dynamic_cast< wxFrame* >(this->GetParent())(您可以在构造函数中替换wxFrame。然后您必须在{{1}中添加成员wxWindow* parent }

  3. 我建议的最后一个选项是让控制器可以访问所有窗口/对话框,从主框架开始。它将处理回调并创建对话框,对用户输入做出反应(等等......)。