我设计了一个对象继承自CDialog
(称为NBDialog
,以及控件的一些派生对象,例如CEdit
,CDateTimeCtrl
等CComboBox
。
这NBDialog
是一个项目,而控件在其他项目中。
自然,所有的控件都放在对话框上并使用对话框的方法,所以我必须
为链接器#include NBDialog.h
添加它的.lib
文件。
我还想处理对话框中的所有这些控件,所以我写NBDialog.h
了以下几行:
class NBCommonEditBox;
class NBDateTimeCtrl;
class NBCommonComboBox;
CMapWordToOb* NBGetEditBoxMap();
NBCommonEditBox* NBGetEditBoxById(unsigned long ID);
CMapWordToOb* NBGetDateTimeMap();
NBDateTimeCtrl* NBGetDateTimeById(unsigned long ID);
CMapWordToOb* NBGetComboBoxMap();
NBCommonComboBox* NBGetComboBoxById(unsigned long ID);
这种方式NBDialog.h
不知道对象的上下文,但它知道它们存在并将它们存储在地图中。
现在我想扩展NBDialog
项目并添加一个方法,该方法将获取所有控件的打印信息,因此所有继承的对象NBDialog
都可以使用此方法。打印信息在控件实现中定义。
编辑:如果我在 中编写此方法NBDialog.cpp
,则无法编译它,因为NBDialog
不知道控件类的上下文:
CStringList* NBDialog::NBGetMainTexts()
{
CStringList* mainTexts = new CStringList();
POSITION pos;
WORD key;
NBCommonEditBox* currEdit = NULL;
for (pos = this->NBGetEditBoxMap()->GetStartPosition(); pos != NULL;)
{
this->NBGetEditBoxMap()->GetNextAssoc(pos, key, (CObject*&)currEdit);
currEdit->NBStringsToPrint(mainTexts);
}
return mainTexts;
}
有没有办法编写所需的方法?