首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加载任意XRC

如何加载任意XRC
EN

Stack Overflow用户
提问于 2016-10-14 21:19:55
回答 1查看 124关注 0票数 0

我想要构建一个工具来显示/调试我的XRC文件。我知道已经有一些工具可以做到这一点,但这是一个学习练习,最终将在一个更大的工具中使用。

我使用一个wxFileDialog来选择一个文件并将名称存储在一个wxTextControl中。然后在另一个按钮上单击我加载XRC。问题是,wxXMLResource.LoadDialog需要加载对话框的名称,而对于任意XRC文件,我不知道它。

代码语言:javascript
复制
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来查找它的名称,要么以其他方式查找它的名称,或者(最好)在不知道它的名称的情况下加载对话框。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 16:36:22

这不能仅使用XRC完成,您确实需要解析wxXmlResource才能找到您的XRC中定义的内容。注意,一般来说,它可以包含0、1或更多的对话框以及任意数量的其他对象(例如框架、菜单、图标、.)。

还请注意,XRC文件可以包含自定义对象类型,在程序代码中使用自定义XRC处理程序加载,如果要处理这些对象类型,还需要扫描XML文件以确定它们的存在,并为它们注册占位符XRC处理程序--当然,它将无法从任何有意义的意义上加载它们,但是如果没有XRC处理程序,包含这些元素的对话框将根本无法加载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40052169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档