gpt4 book ai didi

c++ - 如何加载任意 XRC

转载 作者:行者123 更新时间:2023-11-28 05:28:24 25 4
gpt4 key购买 nike

我想构建一个工具来显示/调试我的 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 找出它的名称,以其他方式找到它的名称,或者(最好)在不知道其名称的情况下加载对话框。

最佳答案

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

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

关于c++ - 如何加载任意 XRC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40052169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com