将 CPtrList 从对话框传递到 MDI 框架
Passing CPtrList from a dialog to an MDI Frame
我有一个应用程序可以根据事先从对话框中收集的信息在 MDI 框架中构建网格,但是构建了多个网格并且我希望能够 select 其他网格(也使用信息构建从对话框中收集)通过 select 从功能区的组合框中编辑它们。
组合框在第一次创建 MDI 框架时填充,但是当我尝试 select 另一个网格时,CPtrList(使用对话框创建)中的元素已被删除;我假设对话框何时被销毁。
CMainFrame中的代码为:
Cdialog dialog;
if (dialog.DoModal() == IDOK)
{
CFrame* pFrame;
BeginWaitCursor();
CMultiDocTemplate *pDoc = GetDocTemplate(10);
if (pDoc){
CBlankDoc* pDocument = (CBlankDoc*)pDoc->CreateNewDocument();
pDocument->SetTitle("Results");
pFrame = (CFrame*)pDoc->CreateNewFrame(pDocument, NULL);
if (pFrame)
{
pDoc->InitialUpdateFrame(pFrame, pDocument);
pFrame->m_plSplits = dialog.GetSplits();
pFrame->m_pParent = this;
pFrame->m_pMainRibbon = GetRibbonBar();
pFrame->MDIMaximize();
}
}
}
dialog.GetSplits();
看起来如下:
CPtrList* CDialog::GetSplits()
{
return &m_plSplits;
}
和
CPtrList* m_plSplits;
您 return 指向对话框内定义的对象的指针。
如果对话框销毁后CPtrList 中的指针仍然有效,您可以创建指针列表的副本。但在这种情况下,您还需要在框架内保留一个列表。目前你还保存了一个指针。
另一个想法是创建指针列表并将其分配给智能指针(使用shared_ptr)。然后你可以从对话框中传输智能指针,你可以将它分配给框架对象m_plSplits(这个成员也必须是智能指针)。
你必须明智地构建它并且你必须确定内部指针的生命周期......当列表被销毁时 CPtrList 不会销毁任何东西。
也许另一个容器就是像 std::list 这样的解决方案。这个容器可以被复制。
我有一个应用程序可以根据事先从对话框中收集的信息在 MDI 框架中构建网格,但是构建了多个网格并且我希望能够 select 其他网格(也使用信息构建从对话框中收集)通过 select 从功能区的组合框中编辑它们。
组合框在第一次创建 MDI 框架时填充,但是当我尝试 select 另一个网格时,CPtrList(使用对话框创建)中的元素已被删除;我假设对话框何时被销毁。
CMainFrame中的代码为:
Cdialog dialog;
if (dialog.DoModal() == IDOK)
{
CFrame* pFrame;
BeginWaitCursor();
CMultiDocTemplate *pDoc = GetDocTemplate(10);
if (pDoc){
CBlankDoc* pDocument = (CBlankDoc*)pDoc->CreateNewDocument();
pDocument->SetTitle("Results");
pFrame = (CFrame*)pDoc->CreateNewFrame(pDocument, NULL);
if (pFrame)
{
pDoc->InitialUpdateFrame(pFrame, pDocument);
pFrame->m_plSplits = dialog.GetSplits();
pFrame->m_pParent = this;
pFrame->m_pMainRibbon = GetRibbonBar();
pFrame->MDIMaximize();
}
}
}
dialog.GetSplits();
看起来如下:
CPtrList* CDialog::GetSplits()
{
return &m_plSplits;
}
和
CPtrList* m_plSplits;
您 return 指向对话框内定义的对象的指针。
如果对话框销毁后CPtrList 中的指针仍然有效,您可以创建指针列表的副本。但在这种情况下,您还需要在框架内保留一个列表。目前你还保存了一个指针。
另一个想法是创建指针列表并将其分配给智能指针(使用shared_ptr)。然后你可以从对话框中传输智能指针,你可以将它分配给框架对象m_plSplits(这个成员也必须是智能指针)。
你必须明智地构建它并且你必须确定内部指针的生命周期......当列表被销毁时 CPtrList 不会销毁任何东西。
也许另一个容器就是像 std::list 这样的解决方案。这个容器可以被复制。