SDI(单文档界面)
第8章通用对话框、菜单、多文档界面

两种方法: 1、菜单:工程—部件,在对话框中选“Microsoft Common
Dialog Control 6.0 ” 2、快捷:工具箱单击鼠标右键,在快捷菜单中选“部件”,在
对话框中选“Microsoft Common Dialog Control 6.0 ”
8.3.1 单文档界面
1.添加窗体 三种方法:
A.选择“工程”菜单的“添加窗体”子菜单 B.选择工具栏的添加窗体按钮 C.在工程资源管理窗口单击鼠标右键,在出现的快捷菜单 中选择“添加”菜单中的“添加窗体”菜单
8.1.2 通用对话框的使用
通用对话框控件没有事件,只有方法和属性。 通过方法或Action属性值显示标准对话框。 通用对话框控件中的每一个标准对话框都有自己的属性。
方法名称 ShowOpen ShowSave ShowColor ShowFont ShowPrinter ShowHelp
Action属性值 1 2 3 4 5 6
8.2.2 弹出菜单
例8-6 在例8-5的文本框中点击鼠标右键时,在鼠标当前位置弹出编辑
菜单项。 '显示编辑的弹出菜单 Private Sub Text1_MouseUp(Button As Integer, Shift As Integer,
X As Single, Y As Single) '在文本框对象上鼠标弹起事件
程序代码
.FontBold = Dlog.FontBold
.ForeColor = Dlog.Color
End With
End Sub
8.1.7 “打印”对话框
打印对话框通过ShowPrint方法或Action属性设为5打开。 打印对话框仅供用户对打印参数进行设置,要实现打印功能还需要通过对
联机窗体布局

1.Windows 窗体布局选项如果曾经使用过基于 Windows 的应用程序,您可能已注意到并非所有用户界面的外观或行为都相同。
有三种主要样式:∙单文档界面 (SDI)∙多文档界面 (MDI)∙资源管理器样式界面SDI 界面的一个示例是 Microsoft Windows 中包括的“写字板”应用程序。
在“写字板”中,只能打开一个文档;必须先关闭一个文档才能打开另一个文档。
写字板,单文档界面 (SDI) 应用程序Microsoft Excel 是 MDI 界面的一个示例;它允许同时显示多个文档,每个文档在其自己的窗口中显示。
通过是否在程序中包含“窗口”菜单且该菜单中具有用于在窗口或文档之间进行切换的命令,即可识别 MDI 应用程序。
Microsoft Excel,多文档界面 (MDI) 应用程序在确定哪种界面样式最适合时,需要考虑应用程序的用途。
处理保险索赔的应用程序可能适合于 MDI 样式,因为职员可能一次处理多份索赔或需要对两份索赔进行比较。
而日历应用程序最适合于 SDI 样式,因为需要一次打开多个日历的可能性不大;在极少数情况下需要这样做时,可打开 SDI 应用程序的第二个实例。
SDI 样式是 Windows 应用程序较常用的布局选项。
创建 MDI 应用程序时有许多独特的注意事项和技巧,这些注意事项和技巧将在多文档界面 (MDI) 应用程序中讲述。
第三种界面样式“资源管理器样式”界面的使用也日益广泛。
资源管理器样式界面是包含两个“窗格”或区域的单个窗口,通常由左侧的树或分层视图以及右侧的显示区域组成,与“Mi crosoft Windows 资源管理器”一样。
此类界面适合于定位或浏览大量的文档、图片或文件。
Windows 资源管理器,资源管理器样式界面。
SDI窗体和MDI窗体

1.1 单文档界面 SDI
SDI:每次只能打开一个数据窗口 制作SDI时窗体的创建、添加、属性、方法和事件和第3
章中的窗体相同 单窗体的记事本程序设计
1.2 多文档窗体
MDI:包含多个文档窗口,根据需要可同时打开多个文 档文件
多个文档窗口中,其中一个是主窗口(或者叫作父窗 口),其余的都是子窗口,主窗体用作放置其它窗体的 背景,它就像一个容器,可以包含一个或多个子窗体, 子窗体只能在父窗体的范I窗体 添加子窗体 添加装入新窗体的过程 多文档界面的文本编辑器实例
程序设计
MFC类库的基本类

MFC类库是一个层次结构,主要有CObject类、应用程序类、可视对象类、绘图和打印类、通用类、数据库类、Internet和网络类、OLE类。
(1)CObject类CObject类是MFC的抽象基类,MFC中的大多数类是从CObject类派生出来的。
它是MFC 中多数类和用户自定义的根类,该类为程序员提供了希望融入所编写程序的许多公共操作,包括对象的建立和删除、串行化支持、对象诊断输出、运行时信息以及集合类的兼容等。
CObject类的声明在Afx.h中。
(2)应用程序结构类该类主要用于构造框架应用程序的结构,提供了多数应用程序公用的功能.编写程序的任务是填充框架,添加应用程序专有的功能。
1.应用程序和线程支持类CWinThread类是所有线程的基类,窗口应用程序类CWinApp类就是从该类中派生来的。
每个应用程序有且只有一个应用程序对象,在运行程序中该对象和其他对象相互协调,该对象从CWinApp中派生出来。
该类封装了初始化、运行、终止应用程序的代码。
2.命令相关类CCmdTarget类是CObject的子类,它是MFC所有具有消息映射属性的基类。
消息映射规定了当一对象接收到消息命令时,应调用哪个函数对该消息进行处理。
程序员很少需要从CCmdTarget类中直接派生出新类,往往都是从它的子类中派生出新类。
如窗口类(CWnd)、应用程序类(CWinApp)、文档模板类(CDocTemplate)、视类(CView)及框架窗口类(CFrameWnd)等。
3.文档类文档对象由文档对象模板创建,用于管理应用程序的数据。
视图对象表示一个窗口的客户区,用于显示文档数据并允许读者与之交互。
有关文档/视结构的类如下:①CDocTemplate类:文档模板的基类。
文档模板用于协调文档、视图和框架窗口的创建。
②CSingleDocTemplate类:单文档界面(SDI)的文档模板。
③CMultiDocTemplate类:多文档界面(MDI)的文档模板。
MFC的窗口分割实例以及CSplitterWnd类

3 分割窗口ቤተ መጻሕፍቲ ባይዱ
如图 1,把窗口分成三个视图,左视图基于 CView 类,可用来作几何图形;右上视图基 于 CEditView 类,用于显示文本消息;右下视图基于 CFormView 类,在此视图中做一个文 本框及发送、清除按钮,发送按钮用来向右上视图传送消息。
图 1 设计样式 打开 Microsoft VC++ 6.0,通过 MFC AppWizard(exe)新建名为 SplitWnd 的单文档(SDI) 工程,新建工程时所有选项均按默认设定。 工程建好后,把工程中的 CSplitWndView 视图类作为左视图所对应的类(该类的实现 与本文重点无关,故不阐述,有兴趣读者可与作者联系),由于需要三个视图窗口对应三个
视图类,因此需要手动创建右上视图、右下视图对应的类,可以通过 MFC 向导向应用程序 添加两个 MFC 类(菜单“Insert | New Class>”),因为在右上视图用于显示文本,故其基类选 CEditView,类名为 CLeftTopView;另一个 MFC 类的基类选 CFormView 类,取类名为 CLeftBttmView,该类即对应右下视图(由于该类基于 CFormView 类,需要有对话框与之对 应,故应先在资源中新建对话框,对话框中的控件如图 1)。
void CLeftBttmView::OnSendMsg() { UpdateData();//更新控件变量数据,文本框对应的变量为 m_sText //通过 CMainFrame 类中的 m_wndSplitterRight 变量获得右上视图类指针 CMainFrame * pMainFrm = (CMainFrame *)AfxGetApp()->GetMainWnd(); CWnd * pWnd = pMainFrm->m_wndSplitterRight.GetPane(0, 0); CLeftTopView* pLeftTopView = DYNAMIC_DOWNCAST(CLeftTopView, pWnd); pLeftTopView ->GetMsg( m_sText + "\r\n" );//CLeftTopView 成员函数,接收数据 } 右上视图类 CLeftTopView 的成员函数 GetMsg 则需保存接收到的消息并显示,主要代 码如下: void CLeftTopView::GetMsg(CString sMsg) { m_sAllMsg += sMsg; // m_sAllMsg 为成员变量,记录所有消息 int nTextLen = GetWindowTextLength(); GetEditCtrl().SetSel(nTextLen, nTextLen); GetEditCtrl().ReplaceSel( sMsg );//显示新消息 } 有了上面两个函数就可以实现右上视图类 CLeftTopView 与右上视图类 CLeftBttmView 之间的简单通讯,类似地,可以实现所有视图之间任意的数据传递。
AUTOCAD中几个特殊的系统变量或命令概要

AUTOCAD中几个特殊的系统变量或命令AUTOCAD的版本一跃千里,版本已更新到2004,平时在使用中有些变量或命令如能熟练掌握,也可为我们解决许多意想不到的麻烦。
下面就来详细介绍几个。
1、MBUTTONPAN 系统变量控制定点设备第三按钮或滑轮的动作响应。
0 支持菜单 (.mnu 文件定义的动作1 当按住并拖动按钮或滑轮时,支持平移操作默认为平移操作。
IntelliMouse 或其他滑轮鼠标IntelliMouse 是一种双按钮鼠标,在两个按钮之间有一个滑轮。
左右按钮的功能和标准鼠标一样。
滑轮可以转动或按下。
不用任何 AutoCAD 命令而直接使用滑轮就可以缩放和平移图形。
默认情况下,缩放比例设为 10%;每次转动滑轮都将按 10% 的增量改变缩放级别。
ZOOMFACTOR 系统变量控制滑轮转动(无论向前还是向后)的增量变化。
其数值越大,增量变化就越大。
下表列举了 AutoCAD 支持的 IntelliMouse 动作。
2、MINSERT 命令在矩形阵列中插入一个块的多重引用。
使用 MINSERT 命令插入的块不能被分解。
注意:在插入过程中,不能象使用INSERT 命令那样在块名的前面用星号来分解块对象。
在指定插入点位置之前,插入点处的选项将预置块的比例和旋转角。
对于使用 1 和 0 之外的比例因子和旋转角来拖动块,预置非常有用。
其它相关命令:INSERT、ADCENTER、REFEDIT。
3、XPLODE 命令将合成对象分解成它的部件对象。
合成对象由多个(一个以上)AutoCAD 对象组成。
例如,块就是一个合成对象。
可以同时分解多个合成对象并分别修改每个对象的颜色、图层和线型,或者全局性的修改整个选择集。
可以指定颜色、图层线宽和线型,或者从被分解的对象中继承这些属性。
可以使用绝对值相等的缩放比例分解块。
绝对值相等表示如果将缩放比例值前的负号 (- 删除,则比例值相等。
例如,可以使用值分别为 1、-1、1 的X、Y、Z 比例因子分解块,包括被镜像的块。
原创]C++builder组件属性详解
![原创]C++builder组件属性详解](https://img.taocdn.com/s3/m/59568a3b580216fc700afddc.png)
原创]C++builder组件属性详解尽管C++Builder的组件种类繁多,每种组件又都有许多不同的属性,但是在这些众多的属性中有相当一部分是大多数组件所共有的。
因此我们应当主要掌握这些共有组件。
在设计时设置属性一般是通过属性窗口来进行的。
在属性窗口设置组件属性的操作步骤如下:1)打开相应对象的属性窗口。
2)从属性列表中选定属性名称。
3)在属性窗口的右列输入或选择新的属性值。
注意:有些属性在设置值右侧有…按钮,单击该按钮会出现相应的设置对话框,设置值需要在对话框中选定。
在代码中设置组件属性的方法是:对象名称->属性名称=设置值;下面我们来介绍一些主要组件的主要属性。
窗体form的属性:1.Caption:标题。
是窗体和各种可视化控件的共有属性,用来指定窗体标题栏中的说明文字,默认与控件名相同,但程序员可以在对象监视器和代码中修改。
在代码中修改的格式为:Form->Caption = "da";// da表示程序员输入的标题。
通常,对于Windows系统中的多文档界面( MDI )应用程序,当主框架窗口中的子窗口以最大化显示的时候,应用程序的标题栏中显示的内容为“ <应用程序名> - <打开的文档名>”;当子窗口以非最大化窗口显示的时候,主框架窗口中只显示应用程序的名称,子窗口有自己的标题栏,其中显示该窗口打开的文件名。
所以,当窗体的显示方式发生了改变后,应该立即改变标题栏中的内容。
2.Name:变量名。
是窗体和所有控件的共有属性,系统给予其默认名字,但程序员可以在对象监视器修改,不要在代码中修改。
通常,应该在系统开发的设计阶段就将整个工程中所有窗体的名称确定,然后在编程阶段,根据设计文档修改窗体的Name属性。
一般情况下,不要在程序运行期间通过代码修改Name属性。
3.Enabled:可操作性。
决定了对象在运行时是否允许用户进行操作。
它是逻辑型:true表示允许用户操作并可对其操作作出响应;false表示禁止用户操作,此时对象呈灰色。
单文档与多文档解析

使用AppWizard创建 SDI和MDI界面的应 用程序的过程几乎完 全一样 主 要 差 别
在创建SDI界面的应用程序时,不生成 CChildFrame类,CMainFrame类的基类 为CFrameWnd
在创建MDI界面的应用程序时, CMainFrame类的基类为 CMDIFrameWnd
3
视图是文档的不同表现形式,一个*.html 语言的文件,在浏览器里和在记事本中打 开的表现形式是不同的但它们操作的是同 一个文件这就是一个文档对应两视图
Doc/View框架虽然可以调用成百上千个不 同的类,但是核心类只有五个: CWinApp CDocument CView CDocTemplate CFrameWnd
10
11.2.1 CWinApp 类
CWinApp类代表主程序,CWinApp本身是不可见的,它 负责维护进程的启动、终止、消息循环、命令行参数、 资源管理
视图把数据显示 于计算机屏幕上
视图通过相关联的文档类 的成员函数将经过修改的 数据传递给文档对象
文档对象获得修改过的数据之后,对 其进行必要的修改,最后保存到永久 介质(如磁盘文件)中
用户通过与视图的 交互来查看数据并 对数据进行修改
6
SDI文档/视图应用程序示意图
7
11.1.3 SDI程序中文档、视图对象的创建过程
成员 m_pszAppName M_lpCmdLine M_pMainWnd M_pszExeName M_pszProfileName M_pszRegistrKey LoadCursor LoadIcon 描述 应用程序名 命令行参数 应用程序主窗口指针 可执行文件名 配置INI文件名 配置注册表主键值 加载光标资源 加载图标资源
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
英文全称Single Document Interface
如果使用过基于 Windows 的应用程序,也许已经注意到不是所有用户界面看上去或操作起来都一样。
用户界面样式主要有两种:单文档界面(SDI) 和多文档界面(MDI)。
SDI 界面的一个示例就是Microsoft Windows 中的WordPad(记事本)应用程序(图 6.1)。
在WordPad 中,只能打开一个文档,想要打开另一个文档时,必须先关上已打开的文档。
图记事本,一个单文档界面(SDI) 应用程序
象Microsoft Excel 和 Microsoft Word for Windows 这样的应用程序就是MDI 界面;它们允许同时显示多个文档,每一个文档都显示在自己的窗口中(图 6.2)。
按照是否包含有能在窗口或文档之间进行切换的子菜单的Windows 菜单项,就能识别出 MDI 应用程序。
图Microsoft Excel,一个多文档界面 (MDI) 应用程序
要决定哪种界面样式最好,需要看应用程序的目的。
一个处理保险索赔的应用程序可能要用多文档界面MDI 样式,一个职员很可能会同时处理一个以上索赔,或者需要对两个索赔进行比较。
另一方面,日历程序最好设成SDI(单文档界面)样式,因为不大需要同时打开一个以上日历;在极少的情况下,可以再打开一个单文档界面应用程序的实例。
SDI 样式更常用,《程序员指南》中的大多数实例都采用SDI 应用程序。
关于创建 MDI 应用程序有一些需要单独考虑的问题和技巧,放在本章后面“多文档界面 (MDI) 应用程序”一节。
除了以上两个最常用的界面样式SDI 与MDI 外,第三种界面样式变得越来越流行,这就是资源管理器样式的界面(图 6.3)。
资源管理器样式界面是包括有两个窗格或者区域的一个单独的窗口,通常是由左半部分的一个树型的或者层次型的视图和右半部分的一个显示区所组成,如在Microsoft Windows 的资源管理器中所见到的那样。
这种样式的界面可用于定位或浏览大量的文档、图片或文件。
图Windows 的资源管理器,资源管理器样式的界面
除了本章所附的 MDI 与SDI 应用程序示例,实用程序向导还提供了一种比较界面样式差别的方法。
可以用向导来为每一种样式生成一个框架,然后观察它生成的窗体与代码。
此外,在AUTO CAD绘图程序中,有SDI 口令,通过该口令可以设置CAD程序是当文档显示或多文档显示。
SDI有0、1两个值。
当设置为0时,为单文档显示;设置为1时为多文档显示,即每次打开一个图形文件,都会启动一次CAD程序。