VC++总复习资料
- 格式:doc
- 大小:71.50 KB
- 文档页数:7
VC++总复习资料 一、 知识点 1、 类和对象的概念。要求能够具体识别代码中的类和对象。 2、 C++程序设计语言的三个特点。即封装性、继承性和多态性。具体要求为: (1) 能够在程序代码中指出类的定义中体现封装性的代码,如类和对象的定义和三种访问类型(公有型、私有型和保护型),说明公有、私有和保护类型的访问区别(对象不能访问私有和保护,可以访问公有);能够指出类中的构造函数和析构函数;能够说明什么是重载。 (2) 能够在代码中指出类的继承,如CScoreDlg是继承自CDialog类,继承方式怎样(公有、私有或保护),不同的继承方式下,派生类有何不同(公有继承访问权限不变、私有继承变私有、保护继承变保护)。 (3) 如代码中有虚函数,能够指出虚函数体现了C++语言的多态性,多态性体现在可以用基类的对象指针,访问派生类的对象。 3、 消息传递机制。要求能够操作,在制作VC++程序的过程中如何体现?具体可以操作建立一个对象的消息映射,比如建立一个按钮的LButtonDown消息,或CDialog的WM_IINITDIALOG消息。 4、 类、成员变量和成员函数的定义方法。能够通过操作定义一个类,包括一般类和通过继承的派生类;能够定义一个成员变量,包括控件变量和一般变量;能够定义一个函数,包括消息映射函数和一般函数。
二、 实验二代码 1、 对话框校验代码。(同样的代码在实验四、九中均有) void CCourseDlg::OnOK() { UpdateData(); //括号中参数默认为TRUE,控件值传递给变量 m_strNO.TrimLeft(); //TrimLeft():从左边开始滤去空格 if(m_strNO.IsEmpty()) //判断语句,假如m_strNO变量值为空时,执行下面的代码 { MessageBox(“课程号不能为空!","警告",MB_ICONQUESTION|MB_ABORTRETRYIGNORE); //弹出消息框,参数1:对话框的提示消息内容;参数2:对话框标题内容;参数3:对话框按钮和图标的形式。 return; //返回,函数执行结束。 } „„ } 2、 对话框初始化代码。(类似的消息映射实验四、九中均有,这里需要知道各个控件的名称) BOOL CCourseDlg::OnInitDialog() { CDialog::OnInitDialog(); m_spinOpen.SetRange (1,8); m_nHours=60; m_fCredit=2.0; 为各个控件所对应的一般变量赋初始值 m_nOpen=1; m_strType="专修"; 为各个控件所对应的一般变量赋初始值 //这里对专业组合框进行初始化 m_comboSpecial.AddString("机械工程及其自动化");//为组合框对象的下拉列表赋初值 m_comboSpecial.AddString("电气工程及其自动化"); m_strSpecial="机械工程及其自动化"; UpdateData(FALSE); //括号中参数为FALSE,变量值传递给控件 „„ } 3、 “课程信息”按钮单击消息代码。 void CEx_CtrlsDlg::OnButtonCourse() { CCourseDlg dlg; //类的实例化 if(IDOK!=dlg.DoModal()) return; //dlg.DoModal()为弹出对话框对象dlg,所弹出的对话框中用户如点击OK按钮,则程序返回值为IDOK,程序继续执行下列代码段,否则该代码段返回,不再继续向下执行,跳出该函数。 while(m_List.GetCount()!=0) m_List.DeleteString(0); //清除列表框原来显示内容,这里为循环语句,逐行删除,每次删除第一行的内容,直到所有内容清空后,循环结束。 m_List.AddString("课程号"+dlg.m_strNO); //向列表框中添加一行字符串,下同 m_List.AddString("课程名称"+dlg.m_strName); m_List.AddString("所属专业"+dlg.m_strSpecial); m_List.AddString("课程类型"+dlg.m_strType); CString str; //定义一个字符串变量 str.Format("开课学期:%d",dlg.m_nOpen ); //按照对象类型组建数据,这里对象str为字符串型,可以理解为将任意类型的值转换为字符串CString型。这里的%d为其所在位置的值以整型格式填充内容,所填充内容为dlg.m_nOpen变量的值。下同,下列代码段中的%4.1f为浮点型值,共4位,其中1位小数。 m_List.AddString(str); //向列表框中添加一行字符串,下同 „„ }
三、 实验四代码 1、 构造函数赋初值 CScoreDlg::CScoreDlg(CWnd* pParent /*=NULL*/) : CDialog(CScoreDlg::IDD, pParent) { „„ m_strOKText.Empty(); //将变量的值设为空 } 2、 对话框赋初值 BOOL CScoreDlg::OnInitDialog() { CDialog::OnInitDialog(); //调用基类的函数 if(!m_strOKText.IsEmpty()) GetDlgItem(IDOK)->SetWindowText(m_strOKText); //将IDOK按钮标题设为m_strOKText变量的内容 „„ } BOOL CEx_ListDlg::OnInitDialog() { CDialog::OnInitDialog(); „„ //创建列表控件的标题头 CString strHeader[4]={"学号","课程","成绩","学分"}; // 定义列标题头内容数组 for (int nCol=0;nCol<4;nCol++) //新建一列并赋标题头内容(列标号,列标题内容,左对齐,列宽) m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,80); GetDlgItem(IDC_BUTTON_CHANGE)->EnableWindow(FALSE); //取得控件ID所对应元素的使用权(即句柄),并将其置灰,即禁用此按钮 „„ } 3、 添加按钮单击消息 void CEx_ListDlg::OnButtonScore() { CScoreDlg dlg; //类的实例化 if (IDOK!=dlg.DoModal()) return; //dlg.DoModal()为弹出对话框对象dlg,所弹出的对话框中用户如点击OK按钮,则程序返回值为IDOK,程序继续执行下列代码段,否则该代码段返回,不再继续向下执行,跳出该函数。 int nItem=m_ListCtrl.GetItemCount(); //取得列表控件已有元素数量,即行数 m_ListCtrl.InsertItem(nItem,dlg.m_strStuNo); //生成一行,并为首列赋值。参数1:行值,参数2:首列所赋值内容,这里为对话框对象dlg的m_strStuNo变量的值 m_ListCtrl.SetItemText(nItem,1,dlg.m_strCourseNo); //为列表控件某行某列的单元格赋值,这里是为nItem行,第2列赋值。参数1:行值,参数2:列值,参数3:所赋值内容。 „„ } 4、 修改按钮单击消息 void CEx_ListDlg::OnButtonChange() { //获取被选择的列表项索引号 POSITION pos; //定义POSITION变量,定位选中行 pos=m_ListCtrl.GetFirstSelectedItemPosition(); //如果函数执行成功,则返回条目的POSITION值,如果返回值为KULL,则表示当前列表视图控件中没有条目选中。 if (pos==NULL){ //当没有选中行时,弹出消息对话框提示 MessageBox("你还没有选中列表项!"); return; } int nItem=m_ListCtrl.GetNextSelectedItem(pos); //如果函数执行成功,则返回列表控件中下一个被选中的条目索引。其中参数pos为将接收条目POSITION值的变量,返回值为整型,表明目前选中行的行值。 CScoreDlg dlg; dlg.m_strOKText="修改"; dlg.m_strStuNo=m_ListCtrl.GetItemText(nItem,0); //取得列表控件某行某列的值。参数1:行号,参数2:列号。返回值:某行某列的值。 „„ dlg.m_fScore=(float)atof(str); //将CString型转换成float型 „„ }
四、 实验九代码 1、 删除列表头 void CEx_StudentView::DeleteAllColumn() { CListCtrl& m_ListCtrl = GetListCtrl(); //从列表视图中得到列表控件对象的引用 int nCount = 0; CHeaderCtrl* pHeaderCtrl = m_ListCtrl.GetHeaderCtrl(); //取得列表控件标头指针 if ( pHeaderCtrl!= NULL) //假如标头指针不为空 nCount = pHeaderCtrl->GetItemCount(); //返回当前的列数 for (int i=0;i < nCount;i++) //循环,逐列删除 m_ListCtrl.DeleteColumn(0); //删除列表控件第0列。每删除一列后,右边列左移,成为第0列。 } 2、 视图刷新显示 void CEx_StudentView::DispScoreInfo(CString strFilter) { DeleteAllColumn(); // 自定义函数,删除表头 CListCtrl& m_ListCtrl = GetListCtrl(); //从列表视图中得到列表控件对象的引用 CString strHeader[]={"学号", "课程号","成绩","学分"}; for (int nCol=0; nColm_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,100); m_ListCtrl.DeleteAllItems(); // 删除列表控件中所有的列表项,即所有行 //下面整段代码从数据库中将值一一显示到列表控件中。 CScoreSet sSet; //类的实例化,定义数据库记录集对象sSet sSet.m_strFilter = strFilter; //m_strFilter为记录集类的固有字段,用于定义记录集打开前数据的筛选条件,其类型为字符串型。 sSet.m_strSort = "studentno,course"; //m_strSort为记录集类的固有字段,用于定义记录集打开前数据的排序条件,其类型为字符串型,其中第一个值为主排序字段,第二个值为辅排序字段。 sSet.Open(); //打开数据库记录集 int nItem = 0; CString str; while (!sSet.IsEOF()) //循环,当记录集指针没有到文件尾时执行循环 { m_ListCtrl.InsertItem( nItem, sSet.m_studentno);