C++:面向对象程序设计第九章 单文档界面和多文档界面

合集下载

C_Winform程序设计1Windows窗体介绍

C_Winform程序设计1Windows窗体介绍
• • • • • •
创建窗体 为窗体添加控件 创建继承窗体 组织窗体上的控件 窗体的用途:自定义窗口 窗体的用途:创建多文档界面应用程序

Windows 窗体和 Web 窗体
创建窗体 设置窗体属性 窗体生命周期 处理窗体事件 Windows 窗体设计器生成的代码
特点
部署 图形
平台 编程模型 安全性
在其代码访问安全性实现中使用 通过验证请求者的凭据, 粒度权限,以保护计算机资源和 按URL控制获得访问Web应用 敏感信息 程序资源的授权

创建一个新的项目的同 时也创建了一个窗体
创建一个新窗体
1.

在解决方案资源管理 器中右键点击 “项 目”
单击“添加” 单击“添加Windows 窗体”
Windows窗体
可不必改注册表运行 GDI+
Web窗体
不需要下载和安装 交互或动态图形的更新需 要往返于服务器
响应
为需要交互的应用程序提供最快 可以利用浏览器的动态 的响应速度 HTML(DHTML)功能来创建丰 富的用户界面(UI)
要求在客户计算机上运行 .NET Framework 基于客户端Win32消息模式 只需浏览器 通过HTTP调用应用程序组 件
SDI
MDI
只有一个文档是可见的 打开一个文档之前,你必须关 闭另一个
同时显示多个文档 每个文档显示在它自己的窗口 中
• 创建一个父窗体
– 创建一个新项目 – 设置IsMdiContainer属性为True – 添加一个菜单项,来触发子窗体
• 创建一个子窗体
– 向项目添加一个新的窗体
• 从父窗体调用子窗体
2. 3.

窗体名:项目中窗体的名称

第八章 VC++文档和视图

第八章 VC++文档和视图

第8章文档和视图精讲MFC应用程序的核心是文档/视图结构。

在前面章节的学习中,已经接触了不少文档/视图结构的应用程序,本章将详细分析其结构和原理,并进一步学习使用复杂的文档结构、构造更加丰富的视图。

8.1 文档/视图概述使用MFC的AppWizard可以创建三种类型的应用程序:(1)单文档界面的应用程序(SDI:Single Document Interface)(2)多文档界面的应用程序(MDI:Multiple Documents Interface)(3)基于对话框的应用程序(Dialog based)基于对话框的应用程序框架非常简单,由应用程序类、对话框类构成。

通过应用程序类的InitInstance()函数,构造一个模式对话框对象;调用DoModal()函数,让Windows对话框处理程序象通常情况一样接受和分配消息;用户退出对话框后,程序也就结束了。

我们已经知道SDI应用程序由应用程序类(CWinApp)、框架窗口类(CFrameWnd)、文档类(CDocument)、视图类(CView)和文档模板类(CSingleDocTemplate)共同作用。

MDI应用程序与SDI 应用程序的主要差别在于:MDI有CMDIFrameWnd和CMDIChildWnd两个框架窗口类,前一个派生CMainFrame类,负责菜单等界面元素的主框架窗口管理;后一个派生CChildFrame类,负责相应的文档及其视图的子框架维护。

而SDI由框架窗口类CFrameWnd 派生CMainFrame类。

一个文档可以有多个视图,但一个视图只能对应一个确定的文档。

因此,MDI应用程序需要解决的问题是多个文档的数据管理方法。

在MDI应用程序中,文档模板只支持主窗口。

每打开一个新文档时,都调用文档类的成员函数OnNewDocument(),建立一个由CMDIChildWnd派生的新的MDI子窗口,在子窗口中保存已打开的文档,所有这些细节都由MFC库来处理。

等级考试chap7_等级考试辅导题

等级考试chap7_等级考试辅导题

等级考试辅导题一.选择题1.在VFP中,若把表单设置为子表单,应设置的属性即属性值为A.设置ShowWindow属性值为2B.设置ShowWindow属性值为0或1,设置Desktop属性值为.F.C.设置ShowWindow属性值为0或1,设置Desktop属性值为.T.D.设置ShowWindow属性值为2,设置Desktop属性值为.T.2.在运行表单时,下列有关表单事件的引发次序正确的是A.Destroy—Init—Load B. Destroy—Load—InitC. Init—Destroy—LoadD. Load—Init—Destroy3.在下列几组VFP基类中,均具有ControlSource属性的是A. ListBox、Label、OptionButtonB. ComboBox、EditBox、GridC. ComboBox、Grid、TimerD. EditBox、CheckBox、OptionButton4.下列表单的哪个属性设置为真时,表单运行时将自动居中A.AutoCenter B.AlwaysOnTop C.ShowCenter D.FormCenter5.下列控件中,在运行时一定不可见。

A.OptionButton B.Page C.OptionGroup D.Timer6.当用鼠标单击正在运行的表单中一个未被禁用的文本框对象时,文本框发生的三个事件的顺序为。

A.GotFocus—When—Click B. When—GotFocus—ClickC. Click—GotFocus—WhenD. Click—When—GotFocus7.如果ComboBox对象的RowSourceType设置为6,以一个表的字段为行数据源,则_____ A)在数据环境中添加此表,运行时用户从下拉列表中选择数据,将移动此表的记录指针B)在数据环境中添加此表,运行时可使用AddItem方法,对列表增加新项C)在数据环境中不必添加此表,ComboBox会找到表文件D)下拉列表不能使用多列方式8.如果ListBox对象的RowSourceType设置为3,则在RowSource属性中写入的SELECT语句,通常包含_____子句A) GROUP BY B)ORDER BY C)INTO TABLE D)INTO CURSOR9.如果要在列表框中一次选择多个项(行),必须设置_____属性为.t.A)MultiSelect B)ListItem C)Controlsv D)Enabled10.确定列表框内的某个条目是否被选定以及确定第几列数据和Value属性进行绑定,应使用的属性是_______A)selected ColumnCount B)selected BoundColumnC)list ColumnCount D)list BoundColumn11.如果表单中有一命令按钮组,命令按纽组包含若干命令按纽,现设定了命令按纽组的Click事件代码,但没有设定命令按纽的Click事件代码。

C 面向对象程序设计(2010年清华大学出版社出版的图书)

C  面向对象程序设计(2010年清华大学出版社出版的图书)
除了发表过大量的学术论文,Savitch教授还编写了多部非常畅销的计算机教材。
第1章计算机和C++编程入门 概述 1.1计算机系统 1.2编程和问题求解 1.3 C++入门 1.4测试和调试 小结 自测题答案 编程项目 第2章 C++基础知识 概述
图书五
内容简介
图书目录
《C++面向对象程序设计》从实际应用出发,系统地介绍C++面向对象程序设计的原理、方法和技巧。重点突 出,叙述清楚,深入浅出,论述详尽,使读者既能深刻领会面向对象程序设计的思想,了解面向对象程序设计的 特征,又能掌握C++语言的编程与应用。全书共8章,主要包括:面向对象程序设计语言概述、C++语言基础知识、 类和对象、对象成员和友员、继承和派生、多态性和运算符重载、模板、C++的输入/输出流。在每一章的知识点 后面,都给出了相应的程序设计实例,这些实例不仅有助于读者巩固知识点的内容,而且更有助于读者创新能力 的培养。
图书一
内容提要
目录
C++面向对象程序设计本书介绍了C++面向对象程序设计的基本知识和编程方法,以及C++面向对象的基本特征。 针对初学者的特点,本书力求通过大量实例、习题和上机实验题,以通俗易懂的语言讲解复杂的概念和方法,使读 者能深刻理解和领会面向对象程序设计的特点和风格,掌握其方法和要领,以期帮助读者尽快地迈入面向对象程 序设计的大门。
Savitch教授的研究领域包括复杂性理论、形式语言理论、计算语言学和计算机教材的开发。他因为对复杂 性理论所做的贡献而声名远扬,其中包括他提出的第一个完整语言(complete1anguage)范例。这个奠基性的

VB程序设计教程课后参考答案概要

VB程序设计教程课后参考答案概要

VB程序设计教程课后参考答案习题一一、填空题1.对象、事件驱动2.窗体、控件3.属性4.属性窗口、编程设置5.事件过程6.对象名、下划线、事件名7.Form_click8.Print form1.print “我的VB”9.主窗口、属性、工具箱、代码、窗体、工程资源管理10.菜单、快捷键二、选择题1.C 2. A 3. B 4. B 5. D 6. B C 7. A 三、简答题(略)习题二一、选择题1. D2. C3. C4. B5. C6. B7. C8. B 9. A 10. B 11. B 12. C 13. D 14. B15. A 16. A 17. A 18. A 19. B 20. C 21. A22. B 23. B 24. A 25. C 26. A 27. B 28. B29. C 30. B 31. D 32. D 33. C二、填空题1.Controlbox、Maxbutton、Minbutton2.Multiline TRUE3.******4.单文档界面(SDI)多文档界面(MDI)5.窗体显示6.Passwordchar7._change()三、编程题(略)习题三一、基础知识题(略)二、填空题1.整型、长整型、单精度、双精度2.(x mod 10)*10+x\103.Sin(3.14*15/180)+sqr(x+exp(3))/abs(x-y)-log(3*x)4.(a+b)/(1/(c+5)-c*d/2)5.X mod 5=0 or x mod 9=06.False7.-4、3、-3、3、-4、48.CDEF10.TRUE11.变量、属性12.‘_ :13.(略)14.“”#15.Public、通用/模块、Dim、static、private16.+ 、&、+17.Now() 、time()、日期18.Inputbox()、字符串、val()19.Msgbox()三、选择题1.B 2. C 3. A 4. B D此题有误 5. B 6. A7. D 8. B 9. B 10. C 11. D 12. B13. C 14. B 15. A 16. C 17.A 18. D19. A 20. D 21. A 22. C 23. C 24. D25. A 26. D 27. D 28. B 29. C 30. B31. C 32. B 33. C D此题有误34. C 35. A36. D 37. C 38. A 39. B 40. A 41. C42. C 43. D 44. C 45. D 46. A四、编程题1.Option ExplicitPrivate Sub Command1_Click()Dim a%, b%, c%, delta%Dim x1#, x2#, x#a = Val(InputBox("please input data to a:", "info", 1))b = Val(InputBox("please input data to b:", "info", 1))c = Val(InputBox("please input data to c:", "info", 1))If a = 0 And b <> 0 Thenx = -c / bPrint "所构成的方程是:" & b & "x" & "+" & c & "=0"Print "该一元一次方程的根是:", xEnd IfIf a = 0 And b = 0 ThenPrint "很抱歉,不能构成合法的方程!"End IfIf a <> 0 Thendelta = b * b - 4 * a * cIf delta >= 0 Thenx1 = (-b + Sqr(delta)) / (2 * a)x2 = (-b - Sqr(delta)) / (2 * a)Print "所构成的方程是:" & a & "x2" & "+" & b & "x" & "+" & c & "=0"Print "该方程的根是:"Print "第一个根是:", x1Print "第二个根是:", x2Else2Print "该方程有两个虚根:"Print "第一个虚根是:" & -b / (2 * a) & "+" & Sqr(Abs(delta)) / (2 * a) & "i"Print "第二个虚根是:" & -b / (2 * a) & "-" & Sqr(Abs(delta)) / (2 * a) & "i" End IfEnd IfEnd Sub2.Option ExplicitPrivate Sub Command1_Click()Dim i%, s%s = 0For i = 1 To 99 Step 2s = s + iNextPrint sEnd Sub3.Option ExplicitPrivate Sub Command1_Click()Dim i%Dim s#s = 0For i = 1 To 100s = s + 1 / i * (-1) ^ (i + 1)NextPrint sEnd Sub4.Option ExplicitPrivate Sub Command1_Click()Dim i%, n%Dim t#, s#n = Val(InputBox("please input data:", "info", 5))s = 0t = 1For i = 1 To nt = t * is = s + tNextPrint sEnd Sub5.Option ExplicitPrivate Sub Command1_Click()Dim a%, b%, c%Dim p#, s#a = Val(InputBox("please input data to a:", "info", 3))b = Val(InputBox("please input data to b:", "info", 4))c = Val(InputBox("please input data to c:", "info", 5))If (a + b > c And Abs(a - b) < c) Or (a + c > b And Abs(a - c) < b) Or ((b + c) > a And Abs(b - c) < a) Thenp = (a + b + c) / 2s = Sqr(p * (p - a) * (p - b) * (p - c))Print "三角形的面积是:" & sElsePrint "很抱歉,不能构成合法的△三角形!"End IfEnd Sub6.Option ExplicitPrivate Sub Command1_Click()Dim ji%, tu%For ji = 1 To 27For tu = 1 To 27If ji * 2 + tu * 4 = 78 And ji + tu = 27 ThenPrint "鸡的个数是:" & jiPrint "兔的个数是:" & tuEnd IfNextNextEnd Sub7.Option ExplicitPrivate Sub Command1_Click()Dim i%Dim s#, t#s = 10t = 10For i = 1 To 7t = t * 0.4s = s + t * 2NextEnd Sub8.Option ExplicitPrivate Sub Command1_Click()Dim i%, fs%, max%, min%, s%Dim ave#fs = Val(InputBox("please input score:", "info", 90))s = fsmax = fsmin = fsFor i = 2 To 7fs = Val(InputBox("please input score:", "info", 90))If max < fs Thenmax = fsEnd IfIf min > fs Thenmin = fsEnd Ifs = s + fsNextave = (s - max - min) / 5Print "该运动员的平均成绩是:" & aveEnd Sub9. ‘同学们,这道题方法很多,主要考察你对选择结构的理解,我给出其中一种方法。

计算机图形学 使用VC开发绘图程序的基本方法

计算机图形学  使用VC开发绘图程序的基本方法

七、思考题(尽量做,计入成绩) :
1、为什么要用 CDC 定义一个对象来作图? Windows 使用与设备无关的图形设备环境进行显示 。MFC 基础类库定义了设备环境对象类----CDC 类。 因为使用的是 mfc,如果是 sdk 的话就得用 dc,这个 cdc 想当是一个给设备画画的笔。 2、如果要绘制多条直线,应该如何编程?
4、 VC 中编程环境中,工程(project)是什么意义?为什么要用 project 的方式管理代码?
Project 文件的扩展名是 dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息, 每个工程都对应有一个 dsp 类型的文件。 clw 为扩展名的文件是用来存放应用程序中用到的类和资源的信 以 息的,这些信息是 VC 中的 ClassWizard 工具管理和使用类的信息来源。 因为用 project 的方式管理代码比较方便,可以看成是在一个文件夹下进行的。
3、 在 MyView.cpp 文件的 OnDraw 函数中加入如下代码。 pDC->MoveTo(100,100); pDC->LineTo(200,200); CPen *pOldPen; CPen dashPen; dashPen.CreatePen(PS_DASH,1,RGB(255,0,0)); pOldPen = pDC->SelectObject(&dashPen); pDC->LineTo(300,100); pDC->SelectObject(pOldPen); pDC->LineTo(400,200);
实验(No. 1
)题目:使用 VC 开发绘图程序的基本方法
实验目的及要求:
一、实验目的:
编写一个具有一定功能的 MFC 类库应用程序 (引入简单的视图/文档概念) 掌握 GDI 画图的基本方法, , 并调用系统函数画直线。

第九章多文档界面(MDI)

第九章多文档界面(MDI)
创建画笔有两种方法: 一是使用CPen::CreatePen(int nPenStyle,int nWidth,DWORD crColor) 进行初始化。 第一个参数是笔的风格。 nPenStyle可选值有: PS_SOLID 实线 PS_DOT 虚线
PS_INSIDEFRAME 在一个封闭形状的框架内画线,若设定的颜 色不能在调色板种找到且线宽大于1,Windows会使用一种混色。 PS_NULL 空的画笔,什么也不画
9.1多文档界面窗口
MDI 框架窗口为层叠、平铺、排列子窗口和新建子窗口等一些 标准窗口操作提供了缺省的菜单响应。 在响应新建子窗口命令时,框架调用 CDocTemplate::CreateNewFrame() 为当前活动文档创建一个子窗口。 CreateNewFrame() 不仅创建子窗口,还创建与文档相对应的视 图。 下面,我们结合一个绘图程序例子,介绍多文档界面技术。 在此之前,我们首先要介绍一下如何在Windows 中绘图以及 Windows 的图形设备接口(GDI )。
CClientDC(客户区设备上下文)用于客户区的输出,它在构造 函数中封装了GetDC(),在析构函数中封装了ReleaseDC()函数。 一般在响应非窗口重画消息(如键盘输入时绘制文本、鼠标绘图) 绘图)时要用到它。
用法是:
CClientDC dc(this); //this一般指向本窗口或当前活动视图
9.2 图形设备接口(GDI)
光栅输出 光栅图形的输出是指光栅图形函数对以位图形式存储的数据进行 操作,它包括各种位图和图标的输出。 在屏幕上表现为对若干行和列的像素的操作,在打印机上则是若 干行和列的点阵的输出。 光栅图形输出的优点是速度很快,它是直接从内存到显存的拷贝 操作。 缺点是需要额外的内存空间。 Windows在绘制界面时使用了大量的光栅输出。

第11章单文档与多文档

第11章单文档与多文档

中(而不是从存储介质 这一点与Windows消息
中)将文档中的数据取 和控件通知消息不同,
出来,然后在屏幕上 因为Windows消息和控
显示文档的数据
件通知消息就只4能被 窗口和视图处理。
文档/视图结构的工作机制
视图通过GetDocument 成员函数获得指向相关 联的文档对象的指针
通过该指针调用文 档类的成员函数来 从文档中读取数据
无论是保存文档或是打开文档,应用程序都是通过 调用文档类的Serialize串行化成员函数来完成操作的。 因此,在大多数情况下,我们都需要重载Serialize成员 函数。Serialize成员函数带有一个CArchive类型的参数, 这是一个与所打开的文件相关联的对象。一般情况下, 总是使用CArchive对象来保存和打开文档。
由于每一个文档可以有多个视图,但 每个视图只能对应于一个确定的文档
多文档程序需要解决的问题仅仅是多 个文档的数据管理方法的问题
多文档程序,最初的文档模板只支持主窗口,但每次打开一 个新文档时都调用CDocument的函数OnNewDocument,建 立一个由CMDIChildWnd派生的新的MDI子窗口,这些窗口 中保存着各种已打开的文档,所有的细节都由MFC库处理 3
建的。
每一种文档类型都有一种文档模板与之相对应,文档模
板负责创建和管理该文档类型的所有文档。
文档模板的构造函数的原型如下:
CDocTemplate
(UINT nIDResource, //与文档一同使用的各种资源的资源标识符 CRuntimeClass* pDocClass,// 指向文档派生文档类的对象的指针 CRuntimeClass* pFrameClass, //框架类的派生框架类的对象指针 CRuntimeClass* pViewClass //指向CView的派生视图类的对象指针

C++面向对象程序设计-谭浩强_完整版

C++面向对象程序设计-谭浩强_完整版

C++面向对象程序设计谭浩强编著目录第1篇基本知识 (2)第1章C++的初步知识 (2)第2章数据类型与表达式 (8)第2篇面向过程的程序设计 (22)第3章程序设计初步 (23)第4章函数与预处理 (134)第5章数组 (167)第6章指针 (187)第7章自定义数据类型 (225)第3篇基于对象的程序设计 (248)第8章类和对象 (248)第9章关于类和对象的进一步讨论 (267)第10章运算符重载 (297)第4篇面向对象的程序设计 (317)第11章继承与派生 (317)第12章多态性与虚函数 (342)第13章输入输出流 (354)第14章C++工具 (376)第1篇基本知识第1章C++的初步知识*1.1 从C到C++*1.2 最简单的C++程序1.3 C++程序的构成和书写形式1.4 C++程序的编写和实现1.5 关于C++上机实践*1.1 从C到C++计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言诞生于1954年,它是FORTRAN语言。先后出现了多种计算机高级语言。其中使用最广泛、影响最大的当推BASIC语言和C语言。BASIC语言是1964年在FORTRAN语言的基础上简化而成的,它是为初学者设计的小型高级语言。C语言是1972年由美国贝尔实验室的D.M.Ritchie研制成功的。它不是为初学者设计的,而是为计算机专业人员设计的。大多数系统软件和许多应用软件都是用C语言编写的。但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。C++是由A T&T Bell(贝尔)实验室的Bjarne Stroustrup博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C++保留了C语言原有的所有优点,增加了面向对象的机制。C++是由C发展而来的,与C兼容。用C语言写的程序基本上可以不加修改地用于C++。从C++的名字可以看出它是C的超集。C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。C++对C的“增强”,表现在两个方面:(1) 在原来面向过程的机制基础上,对C语言的功能做了不少扩充。(2) 增加了面向对象的机制。面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。不要把面向对象和面向过程对立起来,面向对象和面向过程不是矛盾的,而是各有用途、互为补充的。学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++进行面向对象的程序设计。本书既介绍C++在面向过程程序设计中的应用,也介绍C++在面向对象程序设计中的应用。*1.2 最简单的C++程序例1.1 输出一行字符: “This is a C++ program.”。程序如下:#include <iostream> //包含头文件iostreamusing namespace std; //使用命名空间stdint main( ){cout<<″This is a C++ program.″;return 0;}在运行时会在屏幕上输出以下一行信息:This is a C++ program.用main代表“主函数”的名字。每一个C++程序都必须有一个main 函数。main前面的int的作用是声明函数的类型为整型。程序第6行的作用是向操作系统返回一个零值。如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为-1。函数体是由大括号{ }括起来的。本例中主函数内只有一个以cout开头的语句。注意C++所有语句最后都应当有一个分号。再看程序的第1行“#include <iostream>”,这不是C++的语句,而是C++的一个预处理命令,它以“#”开头以与C++语句相区别,行的末尾没有分号。#include <iostream>是一个“包含命令”,它的作用是将文件iostream的内容包含到该命令所在的程序文件中,代替该命令行。文件iostream的作用是向程序提供输入或输出时所需要的一些信息。iostream是i-o-stream 3个词的组合,从它的形式就可以知道它代表“输入输出流”的意思,由于这类文件都放在程序单元的开头,所以称为“头文件”(head file)。在程序进行编译时,先对所有的预处理命令进行处理,将头文件的具体内容代替#include命令行,然后再对该程序单元进行整体编译。程序的第2行“using namespace std; ” 的意思是“使用命名空间std”。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时就需要用#include命令行),就需要用“using namespace std; ”作声明,表示要用到命名空间std中的内容。在初学C++时,对本程序中的第1,2行可以不必深究,只需知道: 如果程序有输入或输出时,必须使用“#include <iostream>”命令以提供必要的信息,同时要用“using namespace std;” ,使程序能够使用这些信息,否则程序编译时将出错。例1.2 求a和b两个数之和。可以写出以下程序:// 求两数之和(本行是注释行)#include <iostream> //预处理命令using namespace std; //使用命名空间stdint main( ) //主函数首部{ //函数体开始int a,b,sum; //定义变量cin>>a>>b; //输入语句sum=a+b;//赋值语句cout<<″a+b=″<<sum<<endl; //输出语句return 0; //如程序正常结束,向操作系统返回一个零值} //函数结束本程序的作用是求两个整数a和b之和sum。第1行“//求两数之和”是一个注释行,C++规定在一行中如果出现“//”,则从它开始到本行末尾之间的全部内容都作为注释。如果在运行时从键盘输入123 456↙则输出为a+b=579例1.3 给两个数x和y,求两数中的大者。在本例中包含两个函数。#include <iostream> //预处理命令using namespace std;int max(int x,int y)//定义max函数,函数值为整型,形式参数x,y为整型{ //max函数体开始int z;//变量声明,定义本函数中用到的变量z为整型if(x>y) z=x;//if语句,如果x>y,则将x的值赋给zelse z=y; //否则,将y的值赋给zreturn(z);//将z的值返回,通过max带回调用处} //max函数结束int main( ) //主函数{ //主函数体开始int a,b,m;//变量声明cin>>a>>b;//输入变量a和b的值m=max(a,b); //调用max函数,将得到的值赋给mcout<<″max=″<<m<<′\\n′;//输出大数m的值return 0; //如程序正常结束,向操作系统返回一个零值} //主函数结束本程序包括两个函数:主函数main和被调用的函数max。程序运行情况如下:18 25 ↙(输入18和25给a和b)max=25 (输出m的值)注意输入的两个数据间用一个或多个空格间隔,不能以逗号或其他符号间隔。在上面的程序中,max函数出现在main函数之前,因此在main函数中调用max函数时,编译系统能识别max 是已定义的函数名。如果把两个函数的位置对换一下,即先写main函数,后写max函数,这时在编译main函数遇到max时,编译系统无法知道max代表什么含义,因而无法编译,按出错处理。为了解决这个问题,在主函数中需要对被调用函数作声明。上面的程序可以改写如下:#include <iostream>using namespace std;int main( ){ int max(int x,int y);//对max函数作声明int a,b,c;cin>>a>>b;c=max(a,b); //调用max函数cout<<″max=″<<c<<endl;return 0;}int max(int x,int y)//定义max函数{ int z;if(x>y) z=x;else z=y;return(z);}只要在被调用函数的首部的末尾加一个分号,就成为对该函数的函数声明。函数声明的位置应当在函数调用之前。下面举一个包含类(class)和对象(object)的C++程序,目的是使读者初步了解C++是怎样体现面向对象程序设计方法的。例1.4 包含类的C++程序。#include <iostream>// 预处理命令using namespace std;class Student// 声明一个类,类名为Student{private:// 以下为类中的私有部分int num; // 私有变量numint score; // 私有变量scorepublic:// 以下为类中的公用部分void setdata( ) // 定义公用函数setdata{cin>>num; // 输入num的值cin>>score; // 输入score的值}void display( ) // 定义公用函数display{cout<<″num=″<<num<<endl; // 输出num的值cout<<″score=″<<score<<endl;//输出score的值};}; // 类的声明结束Student stud1,stud2; //定义stud1和stud2为Student类的变量,称为对象int main( )// 主函数首部{stud1.setdata( ); // 调用对象stud1的setdata函数stud2.setdata( ); // 调用对象stud2的setdata函数stud1.display( ); // 调用对象stud1的display函数stud2.display( ); // 调用对象stud2的display函数return 0;}在一个类中包含两种成员: 数据和函数,分别称为数据成员和成员函数。在C++中把一组数据和有权调用这些数据的函数封装在一起,组成一种称为“类(class)”的数据结构。在上面的程序中,数据成员num,score和成员函数setdata,display组成了一个名为Student的“类”类型。成员函数是用来对数据成员进行操作的。也就是说,一个类是由一批数据以及对其操作的函数组成的。类可以体现数据的封装性和信息隐蔽。在上面的程序中,在声明Student类时,把类中的数据和函数分为两大类: private(私有的)和public(公用的)。把全部数据(num,score)指定为私有的,把全部函数(setdata,display)指定为公用的。在大多数情况下,会把所有数据指定为私有,以实现信息隐蔽。具有“类”类型特征的变量称为“对象”(object)。程序中第18~24行是主函数。程序运行情况如下:1001 98.5 ↙(输入学生1的学号和成绩)1002 76.5 ↙(输入学生2的学号和成绩)num=1001 (输出学生1的学号)score=98.5 (输出学生1的成绩)num=1002 (输出学生2的学号)score=76.5 (输出学生2的成绩)1.3 C++程序的构成和书写形式C++程序的结构和书写格式归纳如下:(1) 一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译,因此,一个文件是一个编译单元。(2) 在一个程序单位中,可以包括以下几个部分:①预处理命令。上节4个程序中都包括#include命令。②全局声明部分(在函数外的声明部分)。在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义。③函数。函数是实现操作的部分,因此函数是程序中必须有的和最基本的组成部分。每一个程序必须包括一个或多个函数,其中必须有一个(而且只能有一个)主函数(main函数)。但是并不要求每一个程序文件都必须具有以上3个部分,可以缺少某些部分(包括函数)。(3) 一个函数由两部分组成:①函数首部,即函数的第一行。包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。一个函数名后面必须跟一对圆括号, 函数参数可以缺省,如int main( )。②函数体,即函数首部下面的大括号内的部分。如果在一个函数中有多个大括号,则最外层的一对{ }为函数体的范围。函数体一般包括:局部声明部分(在函数内的声明部分)。包括对本函数中所用到的类型、函数的声明和变量的定义。对数据的声明既可以放在函数之外(其作用范围是全局的),也可以放在函数内(其作用范围是局部的,只在本函数内有效)。执行部分。由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。(4) 语句包括两类。一类是声明语句,另一类是执行语句。C++对每一种语句赋予一种特定的功能。语句是实现操作的基本成分,显然,没有语句的函数是没有意义的。C++语句必须以分号结束。(5) 一个C++程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何。(6) 类(class)是C++新增加的重要的数据类型,是C++对C的最重要的发展。有了类,就可以实现面向对象程序设计方法中的封装、信息隐蔽、继承、派生、多态等功能。在一个类中可以包括数据成员和成员函数,他们可以被指定为私有的(private)和公用的(public)属性。私有的数据成员和成员函数只能被本类的成员函数所调用。(7)C++程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上。C++程序没有行号,也不像FORTRAN或COBOL那样严格规定书写格式(语句必须从某一列开始书写)。(8) 一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。C++还保留了C语言的注释形式,可以用“/*……*/”对C++程序中的任何部分作注释。在“/*”和“*/”之间的全部内容作为注释。用“//”作注释时,有效范围只有一行,即本行有效,不能跨行。而用“/*……*/”作注释时有效范围为多行。只要在开始处有一个“/*”,在最后一行结束处有一个“*/”即可。因此,一般习惯是: 内容较少的简单注释常用“//”,内容较长的常用“/*……*/ ”。1.4 C++程序的编写和实现一个程序从编写到最后得到运行结果要经历以下一些步骤。1. 用C++语言编写程序用高级语言编写的程序称为“源程序”(source program)。C++的源程序是以.cpp作为后缀的(cpp是c plus plus 的缩写)。2. 对源程序进行编译为了使计算机能执行高级语言源程序,必须先用一种称为“编译器(complier)”的软件(也称编译程序或编译系统),把源程序翻译成二进制形式的“目标程序(object program)”。编译是以源程序文件为单位分别编译的。目标程序一般以.obj或.o作为后缀(object 的缩写)。编译的作用是对源程序进行词法检查和语法检查。编译时对文件中的全部内容进行检查,编译结束后会显示出所有的编译出错信息。一般编译系统给出的出错信息分为两种,一种是错误(error);一种是警告(warning) 。3. 将目标文件连接在改正所有的错误并全部通过编译后,得到一个或多个目标文件。此时要用系统提供的“连接程序(linker)”将一个程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终形成一个可执行的二进制文件,它的后缀是.exe,是可以直接执行的。4. 运行程序运行最终形成的可执行的二进制文件(.exe文件),得到运行结果。5. 分析运行结果如果运行结果不正确,应检查程序或算法是否有问题。图1.11.5 关于C++上机实践在了解了C++语言的初步知识后,读者最好尽快在计算机上编译和运行C++程序,以加深对C++程序的认识,并初步掌握C++的上机操作。读者可以使用不同的C++编译系统,在不同的环境下编译和运行一个C++程序。但是需要强调的是,我们学习的是C++程序设计,应当掌握的是标准C++,而不应该只了解某一种“方言化”的C++。不应当只会使用一种C++编译系统,只能在一种环境下工作,而应当能在不同的C++环境下运行自己的程序,并且了解不同的C++编译系统的特点和使用方法,在需要时能将自己的程序方便地移植到不同的平台上。在本书的参考书《C++程序设计题解与上机指导》一书中简单介绍了在Visual C++ 6.0和GCC两种典型的环境下运行C++程序的方法。请读者选择一种(如能做到两种更好) C++编译系统,在该环境下输入和运行习题中的程序,掌握上机的方法和步骤。第2章数据类型与表达式2.1 C++的数据类型2.2 常量2.3 变量2.4 C++的运算符2.5 算术运算符与算术表达式2.6 赋值运算符与赋值表达式2.7 逗号运算符与逗号表达式2.1 C++的数据类型计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、浮点数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。数据结构指的是数据的组织形式。例如,数组就是一种数据结构。不同的计算机语言所允许使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。例如,对10个整数排序和对包含10个元素的整型数组排序的算法是不同的。C++可以使用的数据类型如下:C++的数据包括常量与变量,常量与变量都具有类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。C++并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,各C++编译系统根据自己的情况作出安排。书中表2.1列出了Visual C++数值型和字符型数据的情况。说明:(1) 整型数据分为长整型(long int)、一般整型(int)和短整型(short int)。在int前面加long和short分别表示长整型和短整型。(2) 整型数据的存储方式为按二进制数形式存储,例如十进制整数85的二进制形式为1010101,则在内存中的存储形式如图2.1所示。图2.1(3) 在整型符号int和字符型符号char的前面,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号,全部二进制位都用来表示数值本身。例如短整型数据占两个字节,见图2.2。图2.215-1,即32767,最小值为-32768。无符号时,能存储的最大值为216-1,即65535,有符号时,能存储的最大值为2最小值为0。有些数据是没有负值的,可以使用unsigned,它存储正数的范围比用signed时要大一倍。(4) 浮点型(又称实型)数据分为单精度(float)、双精度(double)和长双精度(long double)3种,在Visual C++ 6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float 分配4个字节,对double和long double分配8个字节。(5) 表中类型标识符一栏中,方括号[ ]包含的部分可以省写,如short和short int等效,unsigned int和unsigned等效。常量的值是不能改变的,一般从其字面形式即可判别是否为常量。常量包括两大类,即数值型常量(即常数)和字符型常量。如12,0,-3为整型常量,4.6,-1.23为实型常量,包含在两个单撇号之间的字符为字符常量,如′a′,′x′。这种从字面形式即可识别的常量称为“字面常量”或“直接常量”。2.2 常量2.2.1 什么是常量2.2.2 数值常量数值常量就是通常所说的常数。在C++中,数值常量是区分类型的,从字面形式即可识别其类型。1. 整型常量(整数)的类型在上一节中已知道: 整型数据可分为int,short int,long int以及unsigned int,unsigned short,unsigned long 等类别。整型常量也分为以上类别。为什么将数值常量区分为不同的类别呢?因为在进行赋值或函数的参数虚实结合时要求数据类型匹配。那么,一个整型常量怎样从字面上区分为以上的类别呢?(1) 一个整数,如果其值在-32768~+32767范围内,认为它是short int型,它可以赋值给short int型、int型和long int型变量。(2) 一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是long int型,可以将它赋值给一个int或long int型变量。(3) 如果某一计算机系统的C++版本(例如Visual C++)确定int与long int型数据在内存中占据的长度相同,则它们能够表示的数值的范围相同。因此,一个int型的常量也同时是一个long int型常量,可以赋给int型或long int型变量。(4) 常量无unsigned型。但一个非负值的整数可以赋值给unsigned整型变量,只要它的范围不超过变量的取值范围即可。一个整型常量可以用3种不同的方式表示:(1) 十进制整数。如1357,-432,0等。在一个整型常量后面加一个字母l或L,则认为是long int型常量。例如123L,421L,0L等,这往往用于函数调用中。如果函数的形参为long int,则要求实参也为long int型,此时用123作实参不行,而要用123L作实参。(2) 八进制整数。在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。如020表示这是八进制数20,即(20)8,它相当于十进制数16。(3) 十六进制整数。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式表示的常数。如0X20表示这是十六进制数20,即(20)16,它相当于十进制数32。2. 浮点数的表示方法一个浮点数可以用两种不同的方式表示:(1) 十进制小数形式。如21.456,-7.98等。它一般由整数部分和小数部分组成,可以省略其中之一(如78.或.06,.0),但不能二者皆省略。C++编译系统把用这种形式表示的浮点数一律按双精度常量处理,在内存中占8个字节。如果在实数的数字之后加字母F或f,表示此数为单精度浮点数,如1234F,-43f,占4个字节。如果加字母L或l,表示此数为长双精度数(long double),在GCC中占12个字节,在Visual C++ 6.0中占8个字节。(2) 指数形式(即浮点形式)1,3.14159×100,31.4159×10-1,一个浮点数可以写成指数形式,如3.14159可以表示为0.314159×10314.159×10-2等形式。在程序中应表示为: 0.314159e1,3.14159e0,31.4159e-1 ,314.159e-2,用字母e表示其后的12。数是以10为底的幂,如e12表示10其一般形式为数符数字部分指数部分上面各数据中的0.314159,3.14159, 31.4159, 314.159 等就是其中的数字部分。可以看到: 由于指数部分的存在,使得同一个浮点数可以用不同的指数形式来表示,数字部分中小数点的位置是浮动的。例如:a=0.314159e1;a=3.14159e0;a=31.4159e-1;a=314.159e-2;以上4个赋值语句中,用了不同形式的浮点数,但其作用是相同的。在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式(即浮点形式)存储的。例如不论在程序中写成314.159或314.159e0,31.4159e1,3.14159e2, 0.314159e3等形式,在内存中都是以规范化的指数形式存放,如图2.3所示。图2.3数字部分必须小于1,同时,小数点后面第一个数字必须是一个非0数字,例如不能是0.0314159。因此314.1593。存储单元分为两部分,一部分和314.159e0,31.4159e1,3.14159e2, 0.314159e3在内存中表示成0.314159×10用来存放数字部分,一部分用来存放指数部分。为便于理解,在图 2.3中是用十进制表示的,实际上在存储单元中是用二进制数来表示小数部分,用2的幂次来表示指数部分的。对于以指数形式表示的数值常量,也都作为双精度常量处理。2.2.3 字符常量1. 普通的字符常量用单撇号括起来的一个字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在内存中占一个字节。注意:①字符常量只能包括一个字符,如′AB′ 是不合法的。②字符常量区分大小写字母,如′A′和′a′是两个不同的字符常量。③撇号(′)是定界符,而不属于字符常量的一部分。如cout<<′a′;输出的是一个字母“a”,而不是3个字符“′a′ ”。2. 转义字符常量除了以上形式的字符常量外,C++还允许用一种特殊形式的字符常量,就是以“\”开头的字符序列。例如,′\n′代表一个“换行”符。“cout<<′\n′; ” 将输出一个换行,其作用与“cout<<endl; ” 相同。这种“控制字符”,在屏幕上是不能显示的。在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。常用的以“\”开头的特殊字符见书中表2.2。3. 字符数据在内存中的存储形式及其使用方法将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。如果字符变量c1的值为′a′,c2的值为′b′,则在变量中存放的是′a′的ASCII码97,′b′ 的ASCII码98,如图2.4(a)所示,实际上在内存中是以二进制形式存放的,如图2.4(b)所示。图2.4既然字符数据是以ASCII码存储的,它的存储形式就与整数的存储形式类似。这样,在C++中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。例2.1 将字符赋给整型变量。#include <iostream>using namespace std;int main( ){int i,j; //i和j是整型变量i=′A′; //将一个字符常量赋给整型变量ij=′B′; //将一个字符常量赋给整型变量jcout<<i<<′ ′<<j<<′\n′; //输出整型变量i和j的值,′\n′ 是换行符return 0;}执行时输出65 66i和j被指定为整型变量。但在第5和第6行中,将字符′A′和′B′分别赋给i和j,它的作用相当于以下两个赋值语句:i=65;j=66;因为′A′和′B′的ASCII码为65和66。在程序的第5和第6行是把65和66直接存放到i和j的内存单元中。因此输出65和66。可以看到:在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。例2.2 字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。#include <iostream>using namespace std;int main( ){char c1,c2;c1=′a′;c2=′b′;c1=c1-32;c2=c2-32;cout<<c1<<′ ′<<c2<<endl;return 0;}运行结果为A B′a′的ASCII码为97,而′A′的ASCII码为65,′b′为98,′B′为66。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII代码大32。C++符数据与数值直接进行算术运算,′a′-32得到整数65,′b′-32得到整数66。将65和66存放在c1,c2中,由于c1,c2是字符变量,因此用cout输出c1,c2时,得到字符A和B(A 的ASCII码为65,B的ASCII码为66)。4. 字符串常量用双撇号括起来的部分就是字符串常量,如″abc″,″Hello!″,″a+b″,″Li ping″都是字符串常量。字符串常量″abc″在内存中占4个字节(而不是3个字节),见图2.5。图2.5编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志。如cout<<″abc″<<endl;输出3个字符abc,而不包括′\0′。注意: ″a″和′a′代表不同的含义,″a″是字符串常量,′a′ 是字符常量。前者占两个字节,后者占1个字节。请分析下面的程序片段:char c;//定义一个字符变量c=′a′;//正确c=″a″; //错误,c只能容纳一个字符字符串常量要用字符数组来存放,见第5章。请思考: 字符串常量″abc\n″包含几个字符?不是5个而是4个字符,其中“\n”是一个转义字符。但它在内存中占5个字节(包括一个“\0”字符) 。编译系统遇到“\”时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。如果“\”后面的字符不能与“\”组成一个合法的转义字符(如″\c″),则在编译时显示出错信息。如果希望将“\”字符也作为字符串中的一个字符,则应写为″abc\\n″,此时字符包括5个字符,即a,b,c,\,n。如果有以下输出语句:cout<<″abc\\\n″<<endl;则会输出: abc\,然后换行。同理执行cout<<″I say \″Thank you!\″\n″;的输出是: I say ″Thank you!″如果在一个字符串中最后一个字符为“\”,则表示它是续行符,下一行的字符是该字符串的一部分,且在两行字符串间无空格。如cout<<″We must study C\//本行最后的“\”后面的空格和换行均不起作用++ hard!″;//本行的字符紧连在上一行最后的“\”前面字符之后则输出:We must study C++ hard!2.2.4 符号常量为了编程和阅读的方便,在C++程序设计中,常用一个符号名代表一个常量,称为符号常量,即以标识符形式出现的常量。例2.3 符号常量的使用。#define PRICE 30 //注意这不是语句,末尾不要加分号int main ( )。

《C#技术基础》试题 套试卷含答案

《C#技术基础》试题 套试卷含答案

《C#技术基础》试题1得分评卷人一、单项选择题(每小题2分,共20分)1.属于C#语言的关键字( )。

A. abstractB. camelC. SalaryD. Employ答案:A2.C#语言中,值类型包括:基本值类型、结构类型和()。

A.小数类型B.整数类型C.类类型D.枚举类型答案:D3. 假定一个10行20列的二维整型数组,下列哪个定义语句是正确的()。

A. int[]arr = new int[10,20]B. int[]arr = int new[10,20]C. int[,]arr = new int[10,20]D. int[,]arr = new int[20;10]答案:C4.在类作用域中能够通过直接使用该类的()成员名进行访问。

A. 私有B. 公用C. 保护D. 任何答案:D5. 以下正确的描述是()。

A. 函数的定义可以嵌套,函数的调用不可以嵌套B. 函数的定义不可以嵌套,函数的调用可以嵌套C. 函数的定义和函数的调用均可以嵌套D. 函数的定义和函数的调用均不可以嵌套答案:B6.小数类型和浮点类型都可以表示小数,正确说法:( )A. 两者没有任何区别B. 小数类型比浮点类型取值范围大C.小数类型比浮点类型精度高D. 小数类型比浮点类型精度低答案:C8.能作为C#程序的基本单位是( )。

A. 字符B. 语句C. 函数D. 源程序文件答案:B9. 可用作C#程序用户标识符的一组标识符是( )。

A. void define +WORDB. a3_b3 _123 YNC. for -abc CaseD. 2a DO sizeof答案:B10.引用类型主要有4种:类类型、数组类型、接口类型和()。

A.对象类型B.字符串类型C.委托类型D.整数类型答案:C得分评卷人二、填空题(每空2分,共20分)1.在switch语句中,每个语句标号所含关键字case后面的表达式必须是。

答案:常量表达式2.在while循环语句中,一定要有修改循环条件的语句,否则,可能造成 .。

C界面设计教程

C界面设计教程


本章将介绍建立Windows应用程序、使用Windows Forms常用控件、菜单和多文档界面设计等。

同时向大家展示用Windows窗体来编写程序的特点以 及技巧。
2019/3/19
3
C#程序设计实用教程
9.1 Windows应用程序的结构

集成开发环境是基于.NET Framework构建的, 该框架提供了一个有条理的、面向对象的、可扩展的 类集,它使用户得以开发丰富的Windows应用程序。 通过Windows“窗体设计器”进行设计窗体,用户就 可以创建Windows应用程序和客户机/服务器应用程 序。用户可对窗体设定某些特性并在其上添加控件, 然后编写代码以增加控件和窗体的功能。
9.1.1 计算器窗体
(1)运行,在【起始页】上单击【新建项目】按
2019/3/19
7
C#程序设计实用教程
9.1.1 计算器窗体
(2)单击“确定”按钮后就进入的主界面,如图9-2所示。
•从图9-2可以看出,当选择“Windows应用程序”作为应 用程序的模板后,系统会自动为用户生成一个空白窗体, 一般名为Form1。 •该窗体就是应用程序运行时显示给用户的操作界面,下 一步就是向窗体中添加各种控件。
2019/3/19 17 C#程序设计实用教程
9.1.3 计算器事件
private void btnDiv_Click(object sender, EventArgs e) { Button btn = (Button)sender; textBox1.Text = textBox1.Text + " " + btn.Text + " ";//空格用于分 隔数字各运算符 }

多文档(MDI)界面设计

多文档(MDI)界面设计
1.2 创建MDI父窗体与子窗体
1.2.1 多文档界面(Multiple Document Interface)
1.用户界面:单文档界面(SDI)和多文档界面(MDI)。 单文档界面:一次只能打开一个文档。 多文档界面:有一个父窗口和多个子窗口组成。 多重窗体:程序中的各个窗体是彼此独立的。
Console.readline:该函数返回读取的一行字符。 输出:Console.Write:输出指定信息。
Console.Writeline:以行的形式输出指定信息。
4.应用(ex1-5):控制台应用程序简单应用。
第1章 多文档(MDI)界面设计
1.1 多重窗体的操作
⒉ 与多重窗体程序设计有关的方法
⑴ Close方法 格式:窗体对象名.Close 作用:关闭指定的窗体,释放窗体所占用的资源。
⑵ Show方法 格式:窗体对象名.Show 作用:显示一个窗体。
(3) Hide方法 格式:窗体对象名.Hide 作用:隐藏窗体。
Form1.Hide ‘错误 : Form2.Show ‘错误
注:在中,Form2是一个类名,不是窗体名称,要 引用窗体Form2,必须建立它的实例,通过实例引用窗体。
上面的代码应改为: Dim F2 As New Form2 : F2.Show : Me.Hide
第1章 多文档(MDI)界面设计
主讲教师 刘苗苗
高级编程
课程相关:
• 教材:基于的数据库应用程序设计 • 学时分配:理论36学时 实验28学时 • 考试形式:机试
高级编程
课程主要内容:
第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章
多文档界面的设计 键盘和鼠标事件 面向对象的程序设计 文件操作 图形与多媒体程序设计 使用创建Web应用程序 数据库应用程序设计 WEB综合程序设计--留言板的制作

第9章 界面设计(2)

第9章 界面设计(2)
①在Toolbar控件中可加入按钮,每个按钮都可
以载入自己的图像,设置标题和提示字符串。
② Toolbar控件为其中的按钮提供了分组功能,
用户只需设置一个按钮的Style属性就能实现 按钮间的分组。
③ Toolbar控件还是一个容器类控件,可在其
中加入组合框、文本框等其它控件。
结束
工具栏的制作 ①添加ToolBar控件和ImageList控件 ②用ImageList控件保存要使用的图形 ③创建ToolBar控件,并将ToolBar控件与 ImageList ImageList控件相关联,创建Button对象 Button ④编写Button的Click事件过程。 单击工具栏控件时触发Click事件,单击 工具栏上按钮时触发ButtonClick事件,并返 回一个Button参数(表明按下哪个按钮)
结束
说明: 说明:
窗体有其特殊性,它既是窗体类,也是窗体对象, 与窗体上的控件具有不同的性质。 为了在程序运行时建立若干个子窗体以存取不同 的文档,我们先创建一个子窗体作为这个应用程 序文档的模板,通过对象变量来实现。 Dim Newdoc AS New MDIChildForm1 “声明并建立一个名为 声明并建立一个名为Newdoc窗体变量 声明并建立一个名为 窗体变量 Newdoc.show “显示新窗体 显示新窗体
结束
例1: 设计一个多文档记事本程序,菜单设计 如下图所示。单击“新建”能创建新的文档 窗口;单击“关闭”则关闭当前活动文档窗 口;单击退出则结事本应用程序;单击“窗 口”菜单下的某个菜单项则按要求排列所有 窗口
结束
菜单“新建”项代码: Dim n% Private Sub new_Click() Dim newform As New myform n=n+1 newform.Caption = "文档 & n 文档" 文档 newform.Show End Sub 菜单“关闭”项代码: Private Sub close_Click() Unload MDIForm1.ActiveForm End Sub

c#mdi窗体和普通窗体有什么区别

c#mdi窗体和普通窗体有什么区别

c#mdi窗体和普通窗体有什么区别
MDI窗体是和SDI窗体对应的一个名词
MDI(Multiple Document Interface)多文档界面
SDI(Single Document Interface)单文档界面
举个MDI的例子:photoshop,当我们打开一个PS工程的时候,会出现一个子窗口,当我们再开启N多个其它工程的时候,会再出现若干个其它工程窗口,只要我们在其中的选项卡中选择,就可以切换这些MDI窗体。

是否使用MDI,与我们所开发的软件想要实现什么功能有直接的关系,当然,MDI也不仅仅是像PS那样开始效果赞同的几个窗体,也可以开启功能不同的各类窗体,比如旁边的颜色面板、历史记录面板等等,都可以把它说成了MDI
MDI最大的一个特点是,你所新建的MDI窗体是移不出主窗体之外的,它就像是嵌套在了你的主程序之中的一个小程序,它与主程序之间建立数据通讯要比独立的SDI窗体之间容易许多,这涉及到程序安全问题了,一般一个简单的委托就可以实现。

而SDI窗体一般是小型项目,要实现一个简单的功能,没必要弄出多少窗口就可以完成的时候,可以使用SDI,当然,你也可以使用多个SDI开发一个程序,比如主程序有一个“浏览”按钮,我一点这个按钮就再开一个SDI来浏览所需要的信息,而这个新打开的用于浏览的窗口并不需要与主窗体之间进行通讯,这时候使用SDI就比使用MDI好多了。

好了,就说这么多吧,具体的东西还需要你多多去搜索一下,看看别人的教程和博客,你会受益良多。

C#程序设计及应用教程(第2版)第9章 人民邮电出版社

C#程序设计及应用教程(第2版)第9章 人民邮电出版社
1
第9章 与数据操作
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 简介 数据库与数据库访问工具 数据访问对象 数据绑定技术 DataGridView控件 数据处理 存储过程 语言集成查询(LINQ)
9.1 简介
是在ADO(ActiveX Data Objects)基础上发展 的新一代数据存取技术,是微软.NET平台下提出的新的数 据访问模型。设计了一系列对各类数据的访问形式,
12
9.3.1
SqlConnection对象(续)
string connectionString =@"Data Source=.\SQLEXPRESS; AttachDbFilename=|DataDirectory|\MyDataBase.mdf; " + "Integrated Security=True; Connect Timeout=60; User Instance=True";
2
并提供了对应的类,类中提供了与对应数据交互的属性和
方法,我们可以通过这些属性和方法对各种数据进行存取 操作。
3
数据访问操作的发展
采用ODBC(开发式数据互连)数据访问形式。这种访问方式的前 提是,只要公司提供某个数据库的数据驱动程序,就可以在程序 中对这个数据库操作。但是这种方式只能对结构化数据操作,对 于非结构化数据无能为力。
9.3.2
SqlCommand对象(续)
16
3. ExecuteScaler() 该方法用于执行SELECT查询,得到的返回结果为一个值 的情况,比如使用count函数求表中记录个数或者使用sum
函数求和等。
17
SQL语句中使用参数

第9章 单文档界面和多文档界面1

第9章 单文档界面和多文档界面1

2011-12-1
2
9.1 文档对象和视图对象
文档和视图的关系
文档用于数据处理和维护, 视图则用于数 文档用于数据处理和维护,而视图则用于数 数据处理 据的显示 在文档/视图结构的应用程序编程中 显示, 视图结构的应用程序编程中, 据的显示,在文档 视图结构的应用程序编程中, 主要的工作就是用代码操作文档对象 视图对象。 操作文档对象与 主要的工作就是用代码操作文档对象与视图对象。 在关于文档对象与视图对象的代码中一般要 调用方法Cview::GetDocument(),通过 调用方法 , GetDocument()可以返回指向联系的视图对象, 可以返回指向联系的视图对象 可以返回指向联系的视图对象, 一般地,当视图为人机交互界面时, 一般地,当视图为人机交互界面时,如果用户在 视图中对文档数据进行编辑, 视图中对文档数据进行编辑,视图将接收到此消 再发送消息通知文档对象更新文档数据, 息,再发送消息通知文档对象更新文档数据,这 时可用GetDocument()得到被操作的文档对象。 得到被操作的文档对象。 时可用 得到被操作的文档对象
2011-12-1
பைடு நூலகம்
5
习题
1.MFC中文档和视图的关系是什么? . 中文档和视图的关系是什么? 中文档和视图的关系是什么 2.文档的主要作用是什么? .文档的主要作用是什么? 3.视图的主要作用是什么? .视图的主要作用是什么?
2011-12-1
6
第9章 单文档界面和多文档界面 章
内 容 提 要
1
文档对象和视图对象
2
单文档界面
3
多文档界面
2011-12-1
1
9.1 文档对象和视图对象
文档对象:文档对象用于存储程序数据, 文档对象 文档对象用于存储程序数据,在 文档对象用于存储程序数据 应用程序中,要使数据存放到文档对象中, 应用程序中,要使数据存放到文档对象中, 就应将存储的数据作为文档对象的成员变 的文档类由Cdocument类所派生。 量。MFC的文档类由 的文档类由 类所派生。 视图对象:显示文档数据以及接受用户的输 视图对象 显示文档数据以及接受用户的输 入和编辑, 入和编辑,视图对象的一个非常重要的成 函数, 员函数是OnDraw()函数,每当窗口需要重 员函数是 函数 画时就将调用此函数, 画时就将调用此函数,MFC的视图类由 的视图类由 Cview类所派生。 类所派生。 类所派生

面向对象程序设计(共13张PPT)

面向对象程序设计(共13张PPT)
9.2.2 对象的使用
对象的使用主要体现在对其成员的引用上,对 象只能访问公有成员,一般格式为:
<对象名> . <公有成员数据名>
<对象名> . <公有成员函数名>(<参数表>)
prev
next
back
第5页,共13页。
9.2 类的使用
9.2.2 对象的使用
成员选择运算符 这里的符号“.”称为 对象数组的元素通过缺省构造函数而得到初始化。
4. 一个类的对象可作为另一个类的成员,
prev
称为对象成员。
next
back
第7页,共13页。
9.2 类的使用
9.2.3 对象数组和对象指针
定义一维对象数组的一般格式为:
《存储类型》<类名> <对象数组名>[<常量表达式
>];
对象数组中的每个元素可以象一般的对 象使用。
注意,在说明对象数组时,不能对它进 行初始化。对象数组的元素通过缺省构
第12页,共13页。
9.2 类的使用
9.2.5 类实现数据的封装
对象的封装性是指将对象的属性(成员数据)和 作用于这些属性上的操作(成员函数)封装在一 起,对象的使用者只能通过提供给它的接口
(公有成员函数)使用这个对象。
类通过对其成员设计不同的访问权限实现数据的
封装。公有成员是类的外部表现(在类外可以对 其进行访问和修改),而私有和保护成员则被 隐藏了。
prev
在定义类时,通常将该类的所有属性(成员数
据)和只供内部调用的操作(成员函数)定义为私
next
有成员或保护成员。
例9.5
back
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FIQ IRQ
0x14
0x10 0x0C 0x08 0x04 0x00
(Reserved) Data Abort
Prefetch Abort
Software Interrupt Undefined Instruction
3
MFC 编程
Reset
2015-3-14
ARM Vector Table 主讲教师:四川大学计算机学院
2015-3-14
C++:
单文档界面与多文档界面
高 级 • 单文档界面:单文档应用程序执行时,在同一时刻只 语 能打开一个窗口,每次只能打开一个文档,只有将当 言 前处理的文档存盘后,才能调入其它文件。 程 序 设 • 多文档界面:在Visual C++ 6.0中,多文档界面应用 计
II
程序在执行时可同时打开多个窗口,每个窗口中都可 打开一个文档。
• 2.文档的主要作用是什么? • 3.视图的主要作用是什么?
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
2015-3-14
主讲教师:四川大学计算机学院 ***
10

C++: :
文档和视图的关系
• 文档用于数据处理和维护,而视图则用于数据 的显示,在文档/视图结构的应用程序编程中, 主要的工作就是用代码操作文档对象与视图对 象。
高 级 语 言 程 序 设 计 II
• 在关于文档对象与视图对象的代码中一般要调 用方法Cview::GetDocument(),通过 GetDocument()可以返回指向联系的视图对象, 四 一般地,当视图为人机交互界面时,如果用户 川 在视图中对文档数据进行编辑,视图将接收到 大 此消息,再发送消息通知文档对象更新文档数 学 据,这时可用GetDocument()得到被操作的文 精 品 档对象。 课
• 视图对象:显示文档数据以及接受用户 的输入和编辑,视图对象的一个非常 重要的成员函数是OnDraw()函数,每 当窗口需要重画时就将调用此函数, MFC的视图类由Cview类所派生。
主讲教师:四川大学计算机学院 ***
5
四 川 大 学 精 品 课 程
2015-3-14

II
面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
C++: :
习题
• 课后习题、作业
• 习题1
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
2015-3-14
主讲教师:四川大学计算机学院 ***
8

面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
C++:
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
1
主讲教师: *** 个人主页:***
:
2015-3-14
主讲教师:四川大学计算机学院 ***

面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
四 川 大 学 精 品 课 程
***
4

面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
C++: :
文档对象和视图对象

高 级 文档对象:文档对象用于存储程序数据,语 在应用程序中,要使数据存放到文档 言 对象中,就应将存储的数据作为文档 程 序 对象的成员变量。MFC的文档类由 设 计 Cdocument类所派生。

主讲教师:四川大学计算机学院 ***
6
2015-3-14

面 向 对 象 程 序 设 计
主 四 编 川 李 • 用AppWizard生成单文档应用程序时,派生出文档类、 大 涛 视图类、主窗口类和应用程序类。生成多文档应用程 学 高 序,它有一个主窗口和嵌在该窗口中的子窗口,具有 精 教 CChildFrame类,每个窗口可以使用不同的文档模板。品 出 课 版 程 社 主讲教师:四川大学计算机学院 *** 7 :
C++: :
测试题
• http://211.83.120.3在线测试
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
2015-3-14
主讲教师:四川大学计算机学院 ***
9


面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
C++: :
习题
• 1.MFC中文档和视图的关系是什么?
C++:
教材:《C++面向对象程序设计》
李涛 主编 游洪跃 陈良银 李琳等编 高等教育出版社
2006年2月出版
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
:
2015-3-14
主讲教师:四川大学计算机学院 ***
2

面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
:
2015-3-14
主讲教师:四川大学计算机学院 ***

提纲
面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
C++: :
第9章 单文档界面和多文档界面
1
Windows 程序运行机制
高 级 语 言 程 序 设 计 II
2
0x1C 0x18
Windows API 编程
C++:
本书内容
第1 章 第2章 第3章 第4 章 第5章 第6章 第7章 第8章 第9 章 第10章 实验 绪论 C++类和对象 继承 多态性 模板 C++常见问题 Visual C++编程基础 对话框、常用消息、菜单和工具条 单文档界面和多文档界面 图形设备接口 (待安排)
3
高 级 语 言 程 序 设 计 II 四 川 大 学 精 品 课 程
相关文档
最新文档