1、汉族;满族;回族;壮族;蒙古族;藏族;维吾尔族;11IDC_CHECK1读书12IDC_CHECK2唱歌13IDC_CHECK3足球14IDC_CHECK4游泳15IDC_CHECK5旅游16IDC_CHECK6其他17IDC_BTN_NEWDEPARTMENT新建系部18IDC_BTN_NEWCLASS新建班级19IDC_BTN_SAVE保存20IDC_BTN_LOAD读入21IDCANCEL退出22IDC_BTN_NEWSTUDENT新建23IDC_BTN_CONFIRM确定姓名:学号:性别:出生日期:政治面貌:民族:兴趣爱好:2、打开“MFC类向导”,按照下图设置控件在CStudengI
2、nfoDlg类中的成员变量;三、设计系部类、班级类和学生类1、选择菜单“项目”-“添加类”,添加三个“MFC类”:CDepartment、CClass、CStudent,基类为Object; 2、学生类(CStudent)的代码:/Student.h#pragma once/ CStudent 命令目标class CStudent : public CObject DECLARE_SERIAL(CStudent)public: CStudent(); virtual CStudent(); void Serialize(CArchive& ar); CString m_strName; CSt
3、ring m_strID; int m_nSex; COleDateTime m_dtBirthdate; CString m_strNation; CString m_strPolitics; WORD m_wHobbies;/ Student.cpp : 实现文件#include stdafx.hStudentInfo.hStudent.h/ CStudentIMPLEMENT_SERIAL(CStudent,CObject,0)CStudent:CStudent() m_strName=_T(); m_strID=_T( m_nSex=0; m_dtBirthdate=COleDateT
4、ime:GetCurrentTime(); m_strNation=_T(汉族 m_strPolitics=_T(群众 m_wHobbies=0x0000;CStudent()/ CStudent 成员函数yvoid CStudent:Serialize(CArchive& ar) if(ar.IsLoading() arm_strNamem_strIDm_nSexm_strNationm_strPoliticsm_dtBirthdatem_wHobbies; else arm_strNamem_strIDm_nSexm_strNationm_strPoliticsm_dtBirthdate3
5、、班级类(CClass)的实现代码:/Class.h/ CClass 命令目标#include student.hclass CClass : DECLARE_SERIAL(CClass) CClass(); virtual CClass(); CTypedPtrArray m_Students;/ Class.cpp :/Class.h/ CClassIMPLEMENT_SERIAL(CClass,CObject,0)CClass:CClass()CClass() int nCount; nCount=(int)this-m_Students.GetSize(); if(nCount0) f
6、or(int i=nCount-1;i=0;i-) delete m_Students.GetAt(i); m_Students.RemoveAll();/ CClass成员函数void CClass:m_strName; this-m_Students.Serialize(ar);4、系部类(CDepartment)的实现代码:/ Department.h/ CDepartment 命令目标class.hclass CDepartment : public CObject DECLARE_SERIAL(CDepartment) CDepartment(); virtual CDepartme
7、nt();CObArray,CClass* m_Classes;/ Department.cpp :Department.h/ CDepartmentIMPLEMENT_SERIAL(CDepartment,CObject,0)CDepartment:CDepartment()CDepartment()m_Classes.GetSize(); delete m_Classes.GetAt(i); m_Classes.RemoveAll();/ CDepartment 成员函数void CDepartment:m_Classes.Serialize(ar);四、应用程序类的设计1、在应用程序类(
8、CStudentInfoApp)的定义文件(studentinfo.h)中添加头文件的引用: #include #include 并添加成员变量和成员函数: public: CTypedPtrArray m_Departments; void RemoveMemory();效果如图所示:在studentinfo.cpp文件中,添加RemoveMemory()函数的实现代码:void CStudentInfoApp:RemoveMemory()m_Departments.GetSize(); delete m_Departments.GetAt(i); m_Departments.RemoveA
9、ll();2、打开“MFC”类向导,为应用程序类(CStudentInfoApp)添加虚函数ExitInstance(),操作界面及步骤如图所示:编辑ExitInstance( )虚函数,添加RemoveMemory();函数的调用,代码如下:int CStudentInfoApp:ExitInstance() / TODO: 在此添加专用代码和或调用基类 RemoveMemory(); return CWinApp:ExitInstance();五、树型控件图标资源设计1、在资源视图右键快捷菜单中选择“添加资源”菜单命令,如图所示:在弹出的的对话框中选择Bitmap资料类型,单击“新建”按钮
10、建立一个资源ID为IDB_BITMAP1的位图资源,如图所示:2、编辑位图资源的属性,在属性窗口中按下图设置相关属性:3、编辑位图资源,如图所示建立4个图标,每个图标占用16*16像素,分别作为树型控件中的“当前选中项”、“系部”、“班级”和“学生”的图标;六、建立输入对话框1、添加一个对话框资源,如图所示:2、编辑对话框的属性,设置ID为IDD_DLG_INPUT;3、按照如图所示设计对话框界面,如图所示,各控件的属性按照下表设置IDC_STATIC_TEXTIDC_EDIT1IDOK取消4、为对话框资料建立相应的对话框类(CDlgInput),如图所示:5、打开MFC类向导,按照下图所示设
11、置控件在CDlgInput类中的成员变量;6、为CDlgInput类添加一个字符串成员m_strTitle,用于显示对话框标题: CString m_strTitle;7、为CDlgInput类添加一个构造函数 CDlgInput(CString strTitle,CString m_strText);其实现代码为: CDlgInput:CDlgInput(CString strTitle,CString strText) : CDialogEx(CDlgInput:IDD, NULL) m_strInput = _T( m_strTitle=strTitle; m_strText=strTe
12、xt;8、打开MFC类向导,为CDlgInput类添加一个虚函数OnInitDialog,如图所示:代码为:BOOL CDlgInput:OnInitDialog() CDialogEx:OnInitDialog(); 在此添加额外的初始化SetWindowText(m_strTitle);UpdateData(FALSE); return TRUE; / return TRUE unless you set the focus to a control七、对话框类CStudentInfoDlg的初始化1、列表控件(IDC_LIST1)初始化,建立CStudentInfoDlg类的成员函数Se
13、tList(),在studentinfodlg.h中添加成员函数的定义: void SetList();在studentinfodlg.cpp中添加成员函数的实现,代码如下:void CStudentInfoDlg:SetList()m_listStudent.InsertColumn(0,L学号m_listStudent.SetColumnWidth(0,80);m_listStudent.InsertColumn(1,L姓名m_listStudent.SetColumnWidth(1,50);m_listStudent.SetExtendedStyle(m_listStudent.GetE
14、xtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);2、树型控件(IDC_TREE1)初始化。在CStudentInfoDlg中添加CImageList类型的数据成员m_ImageList,代码为: CImageList m_ImageList;建立CStudentInfoDlg类的成员函数SetTree(),在studentinfodlg.h中添加成员函数的定义: void SetTree();SetTree() CBitmap bm; bm.LoadBitmap(IDB_BITMAP1); m_ImageList.Create(16,
15、16,ILC_COLOR8|ILC_MASK,17,0); m_ImageList.Add(&bm,RGB(255,255,255); m_treeInfo.SetImageList(&m_ImageList,TVSIL_NORMAL); CFont *font = CFont:FromHandle(HFONT):GetStockObject(DEFAULT_GUI_FONT);3、树型控件(IDC_TREE1)中层次型数据的显示。建立CStudentInfoDlg类的成员函数CreateTree (),在studentinfodlg.h中添加两个成员函数的定义: void CreateTre
16、e(); HTREEITEM CreateTreeItem(HTREEITEM hParent,int nType,CString strText,LPARAM lParam);在studentinfodlg.cpp中添加两个成员函数的实现,代码如下:CreateTree() m_treeInfo.DeleteAllItems(); HTREEITEM hShool=CreateTreeItem(0,1,_T(华北电力大学),0); int nDepartments,nClasses; nDepartments=(int)theApp.m_Departments.GetSize(); CDep
17、artment *pD; CClass *pC; for(int i=0;im_strName,(LPARAM)pD); nClasses=(int)pD- for(int j=0;jm_Classes.GetAt(j); CreateTreeItem(hDepartment,3,pC-m_strName,(LPARAM)pC); m_treeInfo.Invalidate();HTREEITEM CStudentInfoDlg:CreateTreeItem(HTREEITEM hParent,int nType,CString strText,LPARAM lParam) TV_INSERT
18、STRUCT ltvInsertItem; ltvInsertItem.hParent=hParent; ltvInsertItem.hInsertAfter=TVI_LAST; ltvInsertItem.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE|TVIF_PARAM; ltvInsertItem.item.lParam=lParam; ltvInsertItem.item.iImage=nType; ltvInsertItem.item.iSelectedImage=0; ltvInsertItem.item.pszText=str
19、Text.GetBuffer(0); /CString to LPWCTR strText.ReleaseBuffer(); HTREEITEM hItem=m_treeInfo.InsertItem(<vInsertItem); return hItem;4、在studentinfodlg.h中添加头文件的引用:并定义指针类型成员变量m_pCurrStud,代码如下: CStudent *m_pCurrStud;5、在OnInitDialog( )函数中添加如下代码: SetList(); SetTree(); CreateTree(); m_pCurrStud=NULL;效果如图:八、
20、学生信息的显示功能。1、为CStudentInfoDlg添加学生信息界面清理的成员函数ClearStudentInfo( ),在studentinfodlg.h中添加成员函数的定义: void ClearStudentInfo();ClearStudentInfo() m_bHobby01=m_bHobby02=m_bHobby03=m_bHobby04=m_bHobby05=m_bHobby06=FALSE;2、添加树型控件(IDC_TREE1)的选择改变消息的响应函数。打开MFC类向导,如图所示,按照步骤建立TVN_SELCHANGED消息的响应函数OnSelchangedTree1:该函
21、数的代码如下:OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult) NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; Add your control notification handler code here TVITEM tvItem; if(GetCurrentTreeItem(&tvItem) switch(tvItem.iImage) case 1: /学校 this-GetDlgItem(IDC_BTN_NEWDEPARTMENT)-EnableWindow(TRUE);GetDlgItem(IDC_BTN_NEWCLASS)-EnableWindow(FALSE);GetDlgItem(IDC_BTN_NEWSTUDENT)-GetDlgItem(IDC_BTN_CONFIRM)- m_listStudent.DeleteAllItems(); ClearStudentInfo(); break; case 2: /系部?GetDlgItem(IDC_BTN_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1