如何在 MFC C++ 中实例化相同的对话框?

Posted

技术标签:

【中文标题】如何在 MFC C++ 中实例化相同的对话框?【英文标题】:How to instanciate same dialog in MFC C++? 【发布时间】:2012-07-25 18:05:25 【问题描述】:

我想构建一个 MFC 对话框,在其中添加一个简单的TabControl。我希望我的标签页是相同 CDialog 的实例,但具有一些不同的参数(例如显示哪些按钮)。

我正在使用 Visual Studio 2008。

我对 C++ 比较陌生,但我看到每个组件(CButton、CDialog)都有自己的 ID(这是静态的,所以我理论上不能实例化同一个组件两次)。

我想知道如何做这样的事情:

for (index = 0 to tabNumber) 
  name = "TAB"+index;
  tabCtrl.add(new CustomDialog(name, i));

【问题讨论】:

实际上创建同一个对话框可以根据需要多次。控件 ID 始终参考父对话框窗口,因此没有冲突。 【参考方案1】:

您必须在创建项目时提供不同的 TabID。

OnInitDialog()

m_cTab.Init();

m_cTab.InsertItem(0,"Register new user");//tabID=0
m_cTab.InsertItem(1,"Identify");// TabID=1

//注册新用户 m_cTab.CreateButton("加载图片",23,TabID=0, 0, m_cTab.RightOf(22)+15, m_cTab.TopOf(19),60); //确认 m_cTab.CreateButton("注册用户",24,TabID=1,P_LEFT,0, m_cTab.TopOf(20) ,60);


【讨论】:

以上是关于如何在 MFC C++ 中实例化相同的对话框?的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 中管理类似控件行的数据的最佳方法是啥?

为啥子控件不出现在 MFC 派生的 CWnd 中

从非托管 C++ mfc active x dll 启动 C# 对话框

C++ 使用指向相同函数的指针作为模板参数是不是总是会导致相同的实例化?

关于 MFC C++ 多态性

c# 中类的实例化