我想要构建一个工具来显示/调试我的XRC文件。我知道已经有一些工具可以做到这一点,但这是一个学习练习,最终将在一个更大的工具中使用。
我使用一个wxFileDialog来选择一个文件并将名称存储在一个wxTextControl中。然后在另一个按钮上单击我加载XRC。问题是,wxXMLResource.LoadDialog需要加载对话框的名称,而对于任意XRC文件,我不知道它。
void XRCLoad::ChooseFile(wxCommandEvent& event) {
wxFileDialog* OpenDialog = new wxFileDialog(
this, _("Choose a file to open"),
wxEmptyString, wxEmptyString, _("Dialog files (*.xrc)|*.xrc"),
wxFD_OPEN, wxDefaultPosition);
if (OpenDialog->ShowModal() == wxID_OK){
ebFile->SetValue( OpenDialog->GetPath());
}
OpenDialog->Destroy();
}
void XRCLoad::LoadXRC(wxCommandEvent& event)
{
wxXmlResource::Get()->InitAllHandlers();
if (wxXmlResource::Get()->LoadFile(ebFile->GetValue())){
wxDialog dlg;
wxXmlResource::Get()->LoadDialog(&dlg, this, wxT("XXXXX")); // what should XXXX be?
dlg.ShowModal();
}
}快速阅读wxFormBuilder代码表明,它们以xml的形式加载文件,然后解析树,但在这种情况下,他们必须这样做,因为他们正在解构它。在我的情况下,这似乎是不必要的迂回。
我只想显示在一个文件中找到的对话框,在我的例子中,只有一个。我要么需要通过检查wxXMLResource来查找它的名称,要么以其他方式查找它的名称,或者(最好)在不知道它的名称的情况下加载对话框。
发布于 2016-10-15 16:36:22
这不能仅使用XRC完成,您确实需要解析wxXmlResource才能找到您的XRC中定义的内容。注意,一般来说,它可以包含0、1或更多的对话框以及任意数量的其他对象(例如框架、菜单、图标、.)。
还请注意,XRC文件可以包含自定义对象类型,在程序代码中使用自定义XRC处理程序加载,如果要处理这些对象类型,还需要扫描XML文件以确定它们的存在,并为它们注册占位符XRC处理程序--当然,它将无法从任何有意义的意义上加载它们,但是如果没有XRC处理程序,包含这些元素的对话框将根本无法加载。
https://stackoverflow.com/questions/40052169
复制相似问题