Windos编程实验指导书解析 下载本文

用classwizard绑定各个控件的变量。

(11)添加并处理菜单项

在Ex_SDI2Doc.cpp文件的开始处,添加包含CStuInfoDlg类的头文件包含。

在菜单资源的主菜单中添加顶层菜单项“学生基本信息(&S)”,在该顶层菜单项中添加子菜单“添加(&A)”(ID_STUINFO_ADD)。

用MFC ClassWizard为CEx_SDI2Doc类添加处理菜单项ID_STUINFO_ADD的COMMAND 消息,并添加代码:

void CEx_SDI2Doc::OnStuinfoAdd() { // TODO: Add your command handler code here //打开添加学生信息的对话框 CStuInfoDlg dlg; if (dlg.DoModal() != IDOK) return; // 添加学生的一条记录

}

CStudentInfo *pStudent = new CStudentInfo(dlg.m_name, dlg.m_id, dlg.m_male, dlg.m_birth, dlg.m_special); m_stuObArray.Add(pStudent);

SetModifiedFlag(); // 设置文档更改标志 UpdateAllViews(NULL); // 更新视图

3. 修改CEx_StudentDoc类代码

在Ex_SDI2Doc.h文件的class CEx_SDI2Doc前面,添加包含CStudentInfo类的头文件。 #include \

为CEx_ SDI2Doc类添加下列成员变量:

public:

CObArray m_stuObArray; // 对象集合类对象

为CEx_SDI2Doc类添加成员函数CStudentInfo* GetStudentInfoAt(int nIndex),用来获取m_stuObArray中指定索引号的CStudentInfo类指针。

为CEx_SDI2Doc类添加成员函数int GetAllRecNum(void),用于获取集合类中对象的个数其代码如下:

在Ex_SDI2Doc.h头文件手工添加如下代码:

// Attributes public:

CObArray m_stuObArray; // 对象集合类对象 CStudentInfo* GetStudentInfoAt(int nIndex); //获取指定学生 int GetAllRecNum(void); //获取学生个数 在Ex_SDI2Doc.cpp实现文件手工添加如下代码:

CStudentInfo* CEx_SDI2Doc::GetStudentInfoAt(int nIndex) { //返回指定学生 return (CStudentInfo *)m_stuObArray[nIndex]; }

int CEx_SDI2Doc::GetAllRecNum() { //返回学生个数 return m_stuObArray.GetSize(); }

(5) 在CEx_ SDI2Doc类析构函数~CEx_ SDI2Doc添加下列代码: CEx_ SDI2Doc::~CEx_ SDI2Doc() { int nIndex = GetAllRecNum(); while (nIndex--)

delete m_stuObArray.GetAt(nIndex); // 删除并释放对象的内存空间 m_stuObArray.RemoveAll(); }

(6) 在CEx_ SDI2Doc::Serialize函数中添加下列代码,实现保存功能。 void CEx_SDI2Doc::Serialize(CArchive& ar) { if (ar.IsStoring()) { m_stuObArray.Serialize(ar); } else { m_stuObArray.Serialize(ar); } }

修改CEx_ SDI2View类代码

将CEx_ SDI2View::OnDraw代码修改,用来将所有的学生基本信息记录显示在视图中: void CEx_ SDI2View::OnDraw(CDC* pDC) {

CEx_SDI2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here int y = 0; for (int nIndex = 0; nIndex < pDoc->GetAllRecNum(); nIndex++) { pDoc->GetStudentInfoAt(nIndex)->Display(y, pDC); y += 16; }

}

5. 编译运行并测试