VC++实验报告
更新时间:2024-01-04 08:05:01 阅读量: 教育文库 文档下载
VC++实验报告
班号:0904101
学号:090410110 姓名:杨士杰
实验一VC++开发环境的熟悉和C++基础知识实验
一、实验目的
1. 掌握C++语言的特点。
2. 掌握C++的各种数据类型及基本运算。 3. 掌握C++各种控制结构及使用技巧。
4. 掌握C++的函数、数组、指针的相关概念和使用方法。 5. 灵活运用C++相关基础知识进行综合程序设计。 6. 回顾面向过程程序设计方法。
7. 熟悉Visual C++的开发环境
8.掌握用应用程序向导创建一个控制台应用项目的方法。 9.掌握源代码文件的新建、打开、保存和关闭等基本操作。 10.掌握Visual C++项目的编译、连接和执行。 11.掌握代码简单语法错误修正和调试的一般过程。
二、实验知识点概念
注意C++中同C的不同之处,包括数据类型,输入输出等相关的差异。
三、实验题目
1. 采用插入排序法,输入10个整数按升序排序后输出。要求编写一个通用的插入排序函数,它带有三个参数,第一个参数是含有n个元素的数组,这n个元素已按升序排序;第二个参数给出当前数组中元素个数;第三个参数是要插入的整数。该函数的功能是将一个整数插入到数组中,然后进行排序。另外还需要一个用于输出数组元素的函数,要求每一行输出5个元素。
2. 有5个学生,每个学生的数据结构包括学号、姓名、年龄、C++成绩,数学成绩和英语成绩、总平均分,从键盘输入5个学生的学号、姓名、3门课的成绩,计算3门课的总平均分,最后将5个学生的数据输出。要求各个功能用函数实现。
3. 对程序加入断点简单调试。
四、程序思路
题目(一): 1:初始化数组各项为零。 2:定义插入函数,输出函数,主函数。 3:主函数循环输入,每次输入之后讲数字插入数组中。 4:插入利用指针进行操作。
1
题目(二):
1:定义student和students类,其中students中包含student的数组。
2:student中包含应有的数据成员,并且都具有相应的getXXX和setXXX的方法。
五、程序源代码
题目(一):
#include
void func(int a[],int num, int n) {
int *p=a; int *q=p+1; int j; int i;
if(num==0) //如果数组为空,就把此数字置为第一个数。 { *p=n;
2
}
void output(int a[]) //输出函数 {
int i;
int span=10;
for(i=0;iint main() {
int i;
int b[11]={0,0,0,0,0,0,0,0,0,0,0};
int n;
for(i=0;i<10;i++) {
3
return; }
for(i=0;i p=a+num; //将指针置于数字排列的尾部,使数组元素由 //插入节点之后依次向后移动。 for(j=0;j *(p+1)=n; cout<<\ cin>>n; func(b,i,n); } output(b); return 0; } 题目(二): #include #define N 2 class Student { private: char *name; char *num; int age; float cScore; float englishScore; float mathScore; float ave; public: void setName() { cout<<\ name=new char[10]; cin>>name; } char * getName() { return name; } int getAge() { return age; } void setAge() { cout<<\ 4 //宏定义数组元素的个数 cin>>age; } char *getNum() { return num; } void setNum() { cout<<\ num=new char[10]; cin>>num; } float getCScore() { return cScore; } float getEnglishScore() { return englishScore; } float getMathScore() { return mathScore; } void setCScore() { cout<<\ cin>>cScore; } void setEnglishScore() { cout<<\ cin>>englishScore; } void setMathScore() { 5 cout<<\ cin>>mathScore; } float getAve() { return (mathScore+englishScore+cScore)/3; } ~Student() //释放动态内存 { delete num; delete name; } }; class Students { private: Student stu[N]; public: void inPut() { for(int i=0;i void outPut() { for( int i=0;i 6 cout<<\ cout< int main() { Students stu; stu.inPut(); stu.outPut(); return 0; } 六、用户使用说明(输入 / 输出规定) 根据程序提示进行输入。 七、调试分析&运行结果 7 题目(一): 输入: please input the 1number 3 please input the 2number 1 please input the 3number 2 please input the 4number 6 please input the 5number 4 please input the 6number 5 please input the 7number 7 please input the 8number 9 please input the 9number 8 please input the 10number 10 输出: 12345 678910 Press any key to continue 题目(二): 输入: please input the name :ysj please input the num :3 please input the age :18 please input the CScore :98 8 please input the EnglishScore :97 please input the MathScore :99 please input the name :zy please input the num :2 please input the age :19 please input the CScore :99 please input the EnglishScore :96 please input the MathScore :97 输出: ------------------------------ name :ysj num:3 age:18 cScore:98 EnglishScore:97 MathScore:99 Ave:98 ------------------------------ ------------------------------ name :zy num:2 age:19 cScore:99 EnglishScore:96 MathScore:97 Ave:97.3333 ------------------------------ Press any key to continue 9 实验二Windows SDK程序设计 一、实验目的 1. 掌握Windows程序运行基本原理。 2. 掌握使用SDK(Windows API)方式编写Windows应用程序方法。 3. 掌握用应用程序向导创建一个Windows应用项目的方法。 二、实验知识点概念 Windows程序设计不同于DOS下的程序设计,它是一种事件驱动的程序设计模式,主要是基于消息的。 三、实验题目 编写一窗口应用程序,能实现简单的画线功能。 四、程序思路 1.工程由WinMain()和MyWinProc()构成。 2.设计菜单选项:形状,颜色,笔形。其中形状弹出选项中有点,直线,矩形,椭圆四个选项;颜色中有红,绿,蓝三个选项,其中默认的为黑色;笔形里有粗和细两种选择。 3.设计自己的鼠标指针和图标,并导入到工程中。 4.实现简单的画线功能,实现“橡皮筋”画线和“橡皮筋”画矩形功能。 5..添加颜色的选择,添加笔形的选择。 10 五、程序源代码 #include LRESULT CALLBACK MyWinProc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int cmdShow) { WNDCLASS wndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndcls.hCursor=LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1));//设置自己的鼠标指针 wndcls.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));、//设置自己的图标 wndcls.hInstance=hInstance; wndcls.lpfnWndProc=MyWinProc; wndcls.lpszClassName=\ wndcls.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1); wndcls.style=CS_HREDRAW | CS_VREDRAW; if (!RegisterClass(&wndcls)) //注册窗口类 return 1; HWND hwnd; hwnd=CreateWindow(\\vc课堂\ CW_USEDEFAULT,CW_USEDEFAULT,600,400,NULL,NULL,hInstance,NULL); if (!hwnd) return 1; 11 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK MyWinProc(HWND hwnd,UINT uMsg,WPARAM wparam,LPARAM lparam) { static int drawtype=1; //声明一些静态的常量来保存当前的画图状态 static BOOL isDraw=0; static POINT pt1; //保存点的坐标 static POINT pt2; static int size=1; //设置初始的字体 static COLORREF color=RGB(0,0,255); // 设置初始的颜色 switch(uMsg) { /* case WM_CHAR: char c[10]; sprintf(c,\ MessageBox(hwnd,c,\ break; */ case WM_CLOSE: if(IDYES==MessageBox(hwnd,\ { DestroyWindow(hwnd); } break; case WM_DESTROY: 12 PostQuitMessage(0); break; case WM_COMMAND: //响应菜单的操作 if(ID_MENU_DOTLINE==LOWORD(wparam)) { drawtype=1; } else if(ID_MENU_LINE==LOWORD(wparam)) { drawtype=2; } else if(ID_MENU_RECT==LOWORD(wparam)) { drawtype=3; //MessageBox(hwnd,\ } else if(ID_MENU_ELLIPSE==LOWORD(wparam)) { drawtype=4; } else if(ID_MENU_THIN==LOWORD(wparam)) { size=1; } else if(ID_MENU_WIDE==LOWORD(wparam)) { size=10; } else if(IDM_RED==LOWORD(wparam)) { color=RGB(255,0,0); } else if(IDM_GREEN==LOWORD(wparam)) { color=RGB(0,255,0); } else if(IDM_BLACK==LOWORD(wparam)) { color=RGB(0,0,255); } break; case WM_LBUTTONDOWN: //响应鼠标左键按下 13 pt1.x=LOWORD(lparam); pt1.y=HIWORD(lparam); pt2.x=LOWORD(lparam); pt2.y=HIWORD(lparam); isDraw=1; //MessageBox(hwnd,\ break; case WM_LBUTTONUP: //响应鼠标左键抬起 pt2.x=LOWORD(lparam); pt2.y=HIWORD(lparam); HDC dc; dc=GetDC(hwnd); if(drawtype==2) { //SelectObject(dc,GetStockObject(BLACK_PEN)); HPEN pen; pen=CreatePen(PS_SOLID,size,color); SelectObject(dc,pen); MoveToEx(dc,pt1.x,pt1.y,NULL); LineTo(dc,pt2.x,pt2.y); DeleteObject(pen); } if(drawtype==3) { SelectObject(dc,GetStockObject(HOLLOW_BRUSH)); Rectangle(dc,pt1.x,pt1.y,pt2.x,pt2.y); } isDraw=0; ReleaseDC(hwnd,dc); break; case WM_MOUSEMOVE: if(isDraw==1&&drawtype==1) { HDC dc; dc=GetDC(hwnd); 14 } MoveToEx(dc,pt1.x,pt1.y,NULL); LineTo(dc,pt1.x=LOWORD(lparam),pt1.y=HIWORD(lparam)); ReleaseDC(hwnd,dc); if(isDraw==1&&drawtype==2) { HDC dc; dc=GetDC(hwnd); HPEN pen; pen=CreatePen(PS_SOLID,size,color); SelectObject(dc,pen); SetROP2(dc,R2_NOTXORPEN); //此函数擦除先前画线的痕迹 MoveToEx(dc,pt1.x,pt1.y,NULL); if(pt1.x!=pt2.x&&pt1.y!=pt2.y) LineTo(dc,pt2.x,pt2.y); SelectObject(dc,pen); MoveToEx(dc,pt1.x,pt1.y,NULL); LineTo(dc,LOWORD(lparam),HIWORD(lparam)); ReleaseDC(hwnd,dc); pt2.x=LOWORD(lparam); pt2.y=HIWORD(lparam); DeleteObject(pen); } if(isDraw==1&&drawtype==3) { 15 HDC dc; dc=GetDC(hwnd); SelectObject(dc,GetStockObject(NULL_BRUSH)); HPEN pen; pen=(HPEN)SelectObject(dc,CreatePen(PS_SOLID,1,GetBkColor(dc))); SetROP2(dc,R2_NOT); //此函数擦除先前画线的痕迹 Rectangle(dc,pt1.x,pt1.y,pt2.x,pt2.y); SelectObject(dc,pen); Rectangle(dc,pt1.x,pt1.y,LOWORD(lparam),HIWORD(lparam)); pt2.x=LOWORD(lparam); pt2.y=HIWORD(lparam); DeleteObject(pen); ReleaseDC(hwnd,dc); } break; default: return DefWindowProc(hwnd,uMsg,wparam,lparam); } // ReleaseDC(hwnd,dc); return 0; } 六、用户使用说明(输入 / 输出规定) 无 七、调试分析&运行结果 16 实验三 类和对象实验 一、实验目的 1. 掌握类的定义方法,能合理指定类中成员的访问权限。 2. 学习对象的说明和使用方法。 3. 灵活运用类和对象的相关知识进行综合程序设计。 二、实验知识点概念 类是对同一类事物的抽象描述,其数据成员用于描述该类事物的属性,成员函数完成修改、获取属性值或实现基于属性的某些操作。类不占用存储空间。对象是类的实例,对象占用存储空间。C++中类与结构体并没有本质的区别,结构体中也可以定义成员函数,也可以指定各个成员的访问权限。两者的唯一差异在于:结构中成员的缺省访问权限是公有的,而类中成员的缺省访问权限是私有的。 三、实验题目 定义整数集合数set,该类包括以下数据成员: int elem[N]; int num; 包含以下成员函数: Set();//默认构造函数 Set(int a[],int s); //以数组a的元素和位置s构造一个集合 void empty();//清空集合 int isempty();//判断是否为空集合 17 int member(int a);//判断a是否为集合元素 int add(int a); //将a添加到集合中 int del(int a); //从集合中删除元素a int equ(Set & set);//判断两个集合是否相等 Set intersection(Set & set);//求两个集合的交集 Set merge(Set & set);// 求两个集合的并集 void copy(Set & set);//集合复制 void disp();//输出集合元素 四、程序思路 18 五、程序源代码 Set.h: class Set { public: int num; int elem[N]; Set();//默认构造函数 Set(int a[],int s); //以数组a的元素和位置s构造一个集合 Set(Set & st); void empty();//清空集合 int isempty();//判断是否为空集合 19 int member(int a);//判断a是否为集合元素 int add(int a); //将a添加到集合中 int del(int a); //从集合中删除元素a int equ(Set & set);//判断两个集合是否相等 Set intersection(Set & set);//求两个集合的交集 Set merge(Set & set);// 求两个集合的并集 void copy(Set & set);//集合复制 void disp();//输出集合元素 }; Set.cpp: #include Set::Set() { for(int i=0;i Set::Set(int a[],int s) { for(int i=0;i num=s; } void Set::empty() { for(int i=0;i num=0; 20 } int Set::isempty() { return num; } int Set::member(int a) { int i; for(i=0;i if(i!=num) return i+1; else return 0; } int Set::add(int a) { if(!member(a)) { elem[num]=a; num++; return 1; } else { //cout<<\元素重复!\ return 0; } } int Set::del(int a) { int k=member(a); 21 if(k) { for(int i=k;i int Set::equ(Set & set) { int flag=1; if(num==set.num) { for(int i=0;i else flag=0; return flag; } Set Set::intersection(Set & set) { Set st; for(int i=0;i 22 if(elem[i]==set.elem[j]) { st.add(elem[i]); } } } return st; } Set Set::merge(Set & set) { Set st; for(int i=0;i for(int j=0;j void Set::copy(Set & set) { this->empty(); for(int i=0;i num=set.num; } void Set::disp() { if(num==0) cout<<\没有元素\ for(int i=0;i cout< 23 Set::Set(Set & set) { this->empty(); for(int i=0;i num=set.num; } int main() { int a[10]={1,3,2,4,6,5,19,89,9,45}; int b[20]={1,2,4,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; Set s1; Set s2(a,10); Set s3(b,20); Set s4; s1.disp(); cout<<\ s2.disp(); cout<<\ s4=s2.intersection(s3); s4.disp(); cout<<\ s4.empty(); cout<<\ s4.disp(); cout<<\ s4=s2.merge(s3); s4.disp(); cout<<\ s1.copy(s2); s1.disp(); cout<<\ s2.del(89); s2.disp(); cout<<\ s2.add(104); s2.disp(); cout<<\ return 0; 24 } 六、用户使用说明(输入 / 输出规定) 无输入,测试输出时用横线隔开。 七、调试分析&运行结果 输出: 没有元素 ----------- 1 3 2 4 6 5 19 89 9 ----------- 1 3 2 4 6 5 19 9 ----------- ----------- 没有元素 ----------- 1 3 2 4 6 5 19 89 9 18 20 ----------- 1 3 2 4 6 5 19 89 9 ----------- 1 3 2 4 6 5 19 9 45 ----------- 1 3 2 4 6 5 19 9 45 ----------- Press any key to continue 45 45 7 8 45 104 25 10 11 12 13 14 15 16 17 实验四 继承和派生实验 一、实验目的 继承与派生是面向对象的特性,是面向对象程序设计模拟客观世界的手段之一,通过实验要求掌握: 1. 掌握类的继承与派生关系及实现方法,理解类的层次结构。 2. 掌握派生类构造函数初始化基类成员和对象成员的方法。 3. 灵活运用继承和派生的相关知识进行综合程序设计。 二、实验知识点概念 类的继承是新的类从已有类那里得到已有的特性。从已有的类产生新类的过程就是类的派生。在继承过程中,原有的类或已经存在的用来派生新类的类称为基类或父类,而由已经存在的类派生出的新类则称为派生类或子类。 根据派生类所拥有的基类数目不同,可以分为单继承和多继承。一个类只有一个直接基类时,称为单继承;而一个类同时有多个直接基类时,则称为多继承。 三、实验题目 编写一个程序实现小型公司的工资管理。该公司主要有4类人员:经理、兼职技术人员、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元,兼职技术人员按每小时100元领取月薪,销售员按该当月销售额的4%提成,销售经理即拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5%。 四、程序思路 26 27 五、程序源代码 People.h: #ifndef PEOPLE #define PEOPLE 0 class People { private: char *name; char *num; int salary; public: People(); People(char *name,char *num); char * getName(); char * getNum(); virtual int getSalary()=0; void setName(char * n); void setNum(char * n); ~People(); }; #endif Manager.h: #ifndef MANAGER #define MANAGER 0 class Manager: public People { public: Manager(char *name,char *num); int getSalary(); 28 }; #endif Salesman.h: #ifndef SALESMAN #define SALESMAN 0 class Salesman:public People { private: float saleroom; public: Salesman(char * name,char * num,float saleroom); int getSalary(); }; #endif Salesmanager.h: #ifndef SALESMANAGER #define SALESMANAGER 0 class SalesManager:public People { private: float T_saleroom; public : SalesManager(char *name,char *num,float T_saleroom); int getSalary(); }; #endif 29 Technician.h: #ifndef TECHNICIAN #define TECHNICIAN 0 class Technician:public People { private: int workHour; public : Technician(char *name,char *num,int workHour); int getSalary(); }; #endif People.cpp: #include #include \#include \#include \#include \#include \ People::People() { name= new char[7]; strcpy(name,\ num= new char[2]; strcpy(num,\ salary=0; } People::People(char *name,char *num) 30 { this->name=new char[strlen(name)+1]; strcpy(this->name,name); this->num=new char[strlen(num)+1]; strcpy(this->num,num); salary=0; } char * People::getName() { return name; } char * People::getNum() { return num; } void People::setName(char * n) { delete name; this->name=new char[strlen(n)+1]; strcpy(this->name,n); } void People::setNum(char * n) { delete num; this->num=new char[strlen(n)+1]; strcpy(this->num,n); } People::~People() { delete name; delete num; } Manager::Manager(char *name,char *num):People(name,num) { } int Manager::getSalary() 31 { return 8000; } Technician::Technician(char*name,char*num,int workHour):People(name,num) { this->workHour=workHour; } int Technician::getSalary() { return 100*workHour; } Salesman::Salesman(char*name,char*num,float saleroom):People(name,num) { this->saleroom=saleroom; } int Salesman::getSalary() { return (int)(0.04*saleroom); } SalesManager::SalesManager(char*name,char*num,float T_saleroom):People(name,num) { this->T_saleroom=T_saleroom; } int SalesManager::getSalary() { return 5000+(int)(0.05*T_saleroom); } 32 int main() { SalesManager sma(\ Salesman sm(\ Technician tn(\ Manager m(\ People *p=&m; cout< 六、用户使用说明(输入 / 输出规定) 无 七、调试分析&运行结果 输出: ysj 001 8000 zz 101 10000 ss 201 40 yy 302 5615 Press any key to continue 33 实验五 多态性和虚函数实验 一、实验目的 1. 了解多态性在C++中的体现。 2. 掌握虚函数的应用。 3. 了解抽象类。 二、实验知识点概念 ? 多态性 ? 多态是指同样的消息被不同类型的对象接收时导致不同的行为,所谓消息是指对类的成员函数调用,不同的行为是指不同的实现,也就是调用了不同的函数。 ? 多态性可分为四类:重载多态、强制多态、包含多态和参数多态。 ? 多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。编译时的多态性是在编译的过程中确定了同名操作的具体操作对象,也就是通过重载函数来实现的。运行时的多态性是在程序运行过程中才动态地确定操作所针对的具体对象,就是用虚函数来实现的。 ? 虚函数 ? 虚函数是重载的另一种表现形式,它是一种动态的重载方式,它提供了一种更为灵活的多态性机制。虚函数允许函数调用与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,即所谓的“动态连接”。 ? 一般虚函数成员的定义语法是: ? virtual 函数类型 函数名(形参表) ? 虚函数的定义实际就是在原有的普通函数成员前面使用virtual关键字来限定,虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员的函数体中。 ? 运行过程中的多态需要满足三个条件,首先类之间应满足赋值兼容规则,其二是要声明虚函数,第三是要由成员函数来调用或者是通过指针、引用来访问虚函数。 三、实验题目 编写一个程序实现图书和杂志销售管理。当输入一系列图书和杂志销售记录后,将销售良好(图书每月售500本以上,杂志每月售2500本以上)的图书和杂志名称显示出来。 四、程序思路 1. 编写book基类,并派生出sbook类和magzine类。 2. 在book基类中编写纯虚函数printifCan(),并在sbook类和magzine类 中分别实现它。 3. 在主函数中声明一个book *p的基类指针,分别把它指向多个已经初始 34 化的sbook类和magzine类,并调用printifCan函数。 五、程序源代码 book.h: #ifndef BOOK #define BOOK 1 class Book { protected: char *name; int sellAmount; public: Book(); Book(char *n,int a); Book(const Book &b); char *getName(); virtual int printIfCan()=0; void setName(char *n); void setAmount(int a); virtual ~Book(); }; #endif 35 Sbook.h: #include \ #ifndef SBOOK #define SBOOK 1 class SBook:public Book { public: SBook(char *n,int a); int printIfCan(); virtual ~SBook(); }; #endif Magzine.h: #include \ #ifndef MAGZINE #define MAGZINE 1 class Magzine:public Book { public: Magzine(char *n,int a); int printIfCan(); }; #endif 36 Ysj_book.cpp: #include 37 void Book::setAmount(int a) { sellAmount=a; } Book::~Book() { cout<<\ delete name; } SBook::SBook(char *n,int a):Book(n,a) {} int SBook::printIfCan() { if(sellAmount>500) { cout< SBook::~SBook() { cout<<\ } Magzine::Magzine(char *n,int a):Book(n,a) {} 38 int Magzine::printIfCan() { if(sellAmount>2500) { cout< int main() { SBook b1(\ SBook b2(\ SBook b3(\ Magzine m1(\ Magzine m2(\ Book *b=&b1; b->printIfCan(); b=&b2; b->printIfCan(); b=&b3; b->printIfCan(); b=&m1; b->printIfCan(); b=&m2; b->printIfCan(); b=&b2; b2.setAmount(900); b2.setName(\ b->printIfCan(); return 0; } 39 六、用户使用说明(输入 / 输出规定) 由于有初始化,所以无特殊规定 SBook b1(\ SBook b2(\ SBook b3(\ Magzine m1(\ Magzine m2(\ 七、调试分析&运行结果 c++ jsp earth jspjsp Press any key to continue 40 实验六 Windows程序开发实验 一、实验目的 1、掌握使用Visual C++开发Windows程序的基本方法 2、理解Windows程序原理。 3、了解MFC类库及MFC应用程序框架。 二、实验知识点概念 1、Windows程序设计是基于事件驱动的程序设计模式。 2、类库是一个可以在应用程序中使用的互相关联的C++类的集合。与一般类库不同,Microsoft基本类库(MFC)是一个Windows应用程序框架,它定义了应用程序的结构并实现了标准的用户接口。MFC提供了管理窗口、菜单、对话框的代码,可以实现基本的输入/输出和数据存储。 二、实验题目 1. 利用MFC应用程序向导分别生成单文档、多文档、对话框应用程序,观察三种应用程序分别有哪些类组成?这些类有什么作用,分别继承哪些MFC基类? 单文档: CAboutDlg 继承自CDialog 显示信息 CMainFrame 继承自CFrameWnd 程序窗口的框架 C***App 继承自CWinApp 程序运行的主程序 C***Doc 继承自CDocument 文档类 C***View 继承自CView 试图类 多文档: CAboutDlg 继承自CDialog 显示信息 CMainFrame 继承自CFrameWnd 程序窗口的框架 CChildFrame继承自CFrameWnd 程序的字窗口框架 C***App 继承自CWinApp 程序运行的主程序 C***Doc 继承自CDocument 文档类 C***View 继承自CView 试图类 对话框: CAboutDlg 继承自CDialog 显示信息 C***App 继承自CWinApp 程序运行的主程序 C***Dlg 继承自CDialog 控制程序的主对话框 41 2. 创建一个单文档工程项目,在该项目中添加一个口令对话框(如图所示),口令为自己设定的一个值,以防止非法用户侵入。 口令对话框 (1)设计思路与步骤 1.设计和插入一个新的对话框资源,并设计好编辑框。 2. 为对话框关联一个类,并为编辑框关联一个成员变量m_key,并声明为public。 3.在App中的initInstance(),中增加代码。 (2)源代码(只写明自己添加的代码) CMyDlg dlg; //声明对话框变量 if(dlg.DoModal()==IDOK&&dlg.m_key==\ { if (!ProcessShellCommand(cmdInfo)) return FALSE; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } else { AfxMessageBox(\密码错误!\ return FALSE; } 42
正在阅读:
VC++实验报告01-04
杨鹏长难句11-18
华为(H12-211)中文题库05-07
威图WT-2000使用手册10-04
大众点评网模式特点10-18
最新高中全程复习方略数学(文)课时作业:第一章 集合与常用逻03-20
张悟本中医健康讲座04-22
外研社三年级起点四年级上册M7U1There is a horse in this photo.教学设计10-17
秦巴雾毫02-19
触摸式防盗报警器实验报告04-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 实验
- 报告
- VC
- 冷敷敷料医疗器械产品技术
- 浅谈初中地理教学与信息技术的整合
- 2016里约奥运会中国体育代表团完整名单公布汇总
- 高中物理第3章恒定电流第1节电流课前预习学案鲁科版选修3 11003326
- 开题报告
- 嘉兴学院2012-2013第一学期奖学金公示
- 夏天到了,冠心病患者千万不要喝冷饮!
- 具备履行合同所必需的设备和专业技术能力的承诺书
- 车间一线员工绩效考核管理制度 - 图文
- 晒男朋友红包的说说
- 连云港市远程教育网考试中心2014年4月信息技术考试
- “体教结合型”竞技体育后备人才培养模式探究
- 郭鹏精确管理模式课程精确管理知识汇总
- 硝普钠联合多巴胺治疗顽固性心衰的疗效研究
- 2017-2022年中国仿古家具市场发展前景预测研究报告(目录) - 图文
- 人教版六年级数学上册期中检测卷
- 铝厂备用供电线路安装
- 2019年人生目标的名言警句大全-word范文模板(3页)
- 500kV带电跨越220kV
- 观看警示教育片《警醒》心得体会