(已读)第十四章 单文档界面的程序
程序设计基础智慧树知到答案章节测试2023年广东工业大学
绪论单元测试1.以下对C语言程序的描述,正确的是()。
A:C语言程序从包含的第一个头文件开始执行B:C语言程序总是从main函数开始执行C:C语言程序从定义的第一个函数开始执行D:C语言程序首先执行main函数前的语句答案:B2.C语言属于()语言。
A:汇编语言B:机器语言C:面对对象语言D:高级语言答案:D3.以下对C语言程序工作过程的描述,错误的是()。
A:程序中的指令、数据均以二进制形式存储在存储器中B:程序编译链接为可执行文件后存储在磁盘中C:执行程序时通过解释器,逐行边解释为机器可理解的指令边执行这些指令D:程序执行时将按照程序指定的逻辑从存储器中获取指令,并逐条执行答案:C4.以下关于计算机语言的描述,错误的是()。
A:计算机可以不需要解析直接使用高级语言B:汇编语言中使用了助记符来帮助开发人员开发C:计算机可以直接使用机器语言D:计算机高级语言(如C语言)更具有可读性,开发效率进一步提升答案:A5.C语言的功能和用途有()。
A:编写嵌入式系统B:直接与硬件交互C:编写操作系统底层调度算法D:开发其他计算机高级语言答案:ABCD6.C语言程序中包含()。
A:main函数B:定义的变量C:助记符D:头文件答案:ABCD7.C语言程序中可以没有main函数,也可以执行。
()A:错B:对答案:A第一章测试1.以下不是算法的特征是()A:可行性B:确切性C:简洁性D:有穷性答案:C2.以下不是评价一个算法的指标()A:时间复杂度B:问题的规模C:空间复杂度D:健壮性答案:B3.以下哪种图形表示选择结构()A:B:C:D:答案:B4.变量n初始为1,以下代码中哪个n最终可以为10()A:while(n<10){n=n+1;}B:while(n<=10){n=n+1}C:while(int i=0; i<=10; i++){n=n i}D:while(int i=10; i>=0; i–){n=n i}答案:A5.实现x和y的值交换,能够实现此功能的是()A:int t; t=x; x=y; y=t;B:x=y; y=x;C:x=y;D:x=y; y=x; x=x;答案:A6.结构程序化设计不应该使用()A:自顶向下,逐步细化的方法B:模块化设计C:灵活、简洁的goto结构D:三种基本结构:顺序结构、选择结构、循环结构的编码方法答案:C7.程序的基本结构包括()A:选择结构B:逻辑结构C:顺序结构D:循环结构答案:ACD8.结构化程序设计方法包括()A:结构化编码B:逐步细化C:自顶向下D:模块化设计答案:ABCD9.算法有且只有一个输入和输出()A:错B:对答案:A10.描述算法可用自然语言、传统流程图、N-S流程图来描述()A:对B:错答案:A第二章测试1.下列定义变量的语句中正确的是:()A:int int123B:float US$C:double intD:char For答案:A2.C语言中最简单的数据类型包括:()A:整型、字符型、逻辑型B:整型、实型、逻辑型、字符型C:整型、实型、逻辑型D:整型、实型、字符型答案:D3.main(){int a=8,b=4;printf(“%d”, b=b/a);}上述程序的输出结果是()A:不确定值B:0C:1D:4答案:B4.a=125.534;a=(int)125.521%4;设a为int型变量,执行上述赋值语句后,a的取值分别是()A:125,21B:125,1C:125,31D:125.534,2答案:B5.int b=3; ++b;则b的值为()A:5B:2C:3D:4答案:D6.下列说法不正确的是()A:主函数main中定义的变量在整个文件或程序中有效B:形式参数是局部变量C:在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效D:不同函数中,可以使用相同名字的变量答案:A7.以下属于不合法赋值语句的是()A:x+y;B:x=y=200;C:–d;D:c=int(a+b);答案:AD8.以下选项是不合法常量的是()答案:AD9.¥temp是合法的变量名称()A:错B:对答案:A10.编译系统把浮点型常量都按双精度处理,分配16个字节()A:错B:对答案:A第三章测试1.main() {int a=1, b=2, c=3;if(a<c) {b=a;c=b;a=c;} else {a=0;}printf(“a=%d”, a);}上述程序的输出是()A:2B:0C:1D:3答案:C2.以下一组运算符中,优先级最低的运算符是()A:-B:>C:*D:!=答案:D3.#include<stdio.h>int main(){ int a=1,b=2,c=3,d=4,m=2,n=2; (m=a<b)||(n=c>d); printf(“%d:1 0B:0 1C:1 2D:2 2答案:C4.若int i=0,j=1,k=2 k= i++ && j++;则此时的k为多少()A:0B:2C:1D:3答案:A5.设a=1,b=2,c=3,d=4,则表达式:a>b?a:c<d?c:d的结果为()A:3B:1C:4D:2答案:A6.以下不能作为switch语句中的条件的是()A:1B:1+1C:‘A’D:3答案:B7.以下 if语句形式正确的有()A:if(表达式){若干语句;}else if{若干语句;}B:if(表达式){若干语句;}if {若干语句;}else{若干语句;}C:if(表达式){若干语句;}D:if(表达式){若干语句;}else{若干语句;}答案:CD8.以下对逻辑运算符两侧的运算对象的数据类型描述不正确的是()A:可以是整数或字符型数据B:只能是0或非0整数C:只能是0或者1D:可以是任何类型的整数答案:BC9.条件运算符?和:是一对运算符,不能分开单独使用。
单文档和多文档窗口使用方法解析
单文档和多文档窗口使用方法解析一.实验目的掌握利用开发平台创建单文档和多文档窗口方法掌握在窗口中输出文字、图形的方法及 MFC 中相关类的使用二.实验要求1 创建一个单文档窗口,在文档类定义一个整型变量,其取值范围从 0 ~ 1000 循环,在视图的中间显示该数字,当用户点击窗口的不同区域时,变量值按不同的增量增加并显示。
提示:在修改数据后,使用 Invalidate() 函数引起 MFC 对 OnDraw() 的调用,这样就可以用修改后的数据进行画图了。
关于对文档类的访问,见本实验的技术支持。
2 创建一个单文档窗口,鼠标在窗口上单击后在鼠标的位置显示一正方形,点击 20 次后清窗口,新的点击将不再增加新的正方形,而是将已输入的正方形在原位置显示,当然,在每20 单击后要重新清窗口。
(要求用 MFC 的通用类保存单击的信息,如 CList 类)知识点:画线当单击鼠标左键时,就可以获得一个点,即线条的起点。
接着按住鼠标左键并拖动一段距离后松开鼠标,此时也可以获得一个点,即线条的终点。
也就是说,我们需要捕获两个消息,一个是鼠标左键按下消息(WM_LBUTTONDOWN),在该消息响应函数中可以获得将要绘制的线条的起点;另一个是鼠标左键弹起来的消息(WM_LBUTTONUP),在该消息响应函数中可以获得将要绘制的线条的终点。
有了这两个点就可以绘制出一条线。
利用SDK全局函数实现画线功能为了进行绘图操作,必须获得一个设备描述表(DC),因此,首先定义一个HDC类型的变量:hdc,接着调用全局函数GetDC获得当前窗口的设备描述表。
因为CWnd类有一个成员变量(m_hWnd),而CView类派生于CWnd类,因此该类也有这样的一个成员变用于保存窗口句柄,而GetDC函数可以直接把这个成员变量作为参数来使用。
利用MFC的CDC类实现画线功能该类提供一个数据成员m_hDC类用来保存与CDC相关的DC句柄。
其道理与CWnd 类提供成员变量m_hWnd保存与窗口相关的窗口句柄是一样的。
单文档应用程序设计7
设置控件属性
ID属性 Caption(标题)属性
Visible属性
Disable属性
Tab键移动顺序
Tabstop属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
ID属性 Caption(标题)属性
Visible属性
Disable属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
控件的标识符
ID属性 Caption(标题)属性
Visible属性
Disable属性
Tabstop属性
Group属性
第10章 单文档应用程序设计
10.9.2 对话框模板资源设计
设置控件属性
添加成员变量
利用ClassWizard创建添加成员变量。
对话框的主要功能是输出和输入数据,因此,需要有一 组成员变量来存储数据。在对话框中,控件用来表示或输入
数据,因此,存储数据的成员变量应该与控件相对应。
第10章 单文档应用程序设计
10.9.3 对话框类设计
添加成员变量
利用ClassWizard创建添加成员变量。
第10章 单文档应用程序设计
10.9 概念 一种用户界面,用于输出/输入信息。 对话框
与控件是密不可分的,依靠这些控件 与用户进行交互。
第10章 单文档应用程序设计
10.9 主要内容
对话框
基本概念 对话框模板资源设计 对话框类设计 非模态对话框 标签式对话框 公用对话框
单文档显示
《一》MFC单文档应用程序显示图像摘要: 1 利用VS2010向导创建一个MFC单文档应用程序MFCTest 2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象 #include <atlimage.1 利用VS2010向导创建一个MFC单文档应用程序MFCTest2 在MFCTestView.h中引用<atlimage.h>,并创建一个CImage对象#include <atlimage.h>private:CImage image;3 打开资源文件,选中Menu下面的IDR_MAINFRAME,添加一个新的菜单项“打开图像”,修改其ID为IDM_OPEN,再点击鼠标右键,添加事件处理程序,在弹出的对话框的列表中选择CMFCTestView4 添加事件处理函数OnOpen的代码void CMFCTestView::OnOpen(){// TODO: 在此添加命令处理程序代码CFileDialog dlg(TRUE, _T(".bmp"), _T("*.bmp"), OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT, _T("位图文件(*.bmp)|*.bmp|JPEG文件(*.jpg)|*.jpg||"));if(dlg.DoModal() == IDOK){if(!image.IsNull()){image.Destroy();}image.Load(dlg.GetPathName());Invalidate();}}5 在MFCTestView中加入图像显示的代码void CMFCTest2View::OnDraw(CDC* pDC) {CMFCTest2Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码 if(!image.IsNull()){image.Draw(pDC->GetSafeHdc(), 0, 0);}}《二》MFC单文档应用程序显示图像1.工程建好后,右击文档类选择建立类向导,选择虚函数中的OnOpenDocument,编辑在文档类里面添加Mat img;和string path;同时需要添加头文件#include<opencv2/opencv.hpp>;BOOL CsplitDoc::OnOpenDocument(LPCTSTR lpszPathName){if (!CDocument::OnOpenDocument(lpszPathName))return FALSE;// TODO: Add your specialized creation code herepath = CT2A(lpszPathName);// TODO: Add your specialized creation code hereimg = cv::imread(path);if (img.empty()){MessageBox(NULL, lpszPathName, _T("did't load the pic"), MB_OK);}return TRUE;}方法一,进入视图类,编辑OnDraw函数同时要包含头文件#include<opencv2/opencv.hpp>void CsplitView::OnDraw(CDC* pDC){CsplitDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;cv::Mat newImage;if (pDoc->img.channels() == 1){cv::cvtColor(pDoc->img, newImage, CV_GRAY2BGRA);}else if (pDoc->img.channels() == 3){cv::cvtColor(pDoc->img, newImage, CV_BGR2BGRA);}else{newImage = pDoc->img;}// TODO: add draw code for native data hereif (!pDoc->img.empty()){CImage image;int cx, cy;CRect rect;std::wstring str;std::string path1 = pDoc->path;StringToWString(path1, str);image.Load((LPCTSTR)str.c_str());CImage image2 = image;//获取图片的宽高SetRect(rect, 0, 0, newImage.cols, newImage.rows);pDC = GetDC();//获取picture control的DCimage.Draw(pDC->m_hDC, rect);ReleaseDC(pDC);}}方法一中用到的StringToWString函数如下这个函数使用的时候要位置要放在OnDraw 函数的前面即可;BOOL StringToWString(const std::string &str,std::wstring &wstr){int nLen = (int)str.length();wstr.resize(nLen,L' ');int nResult =MultiByteToWideChar(CP_ACP,0,(LPCSTR)str.c_str(),nLen,(LPWSTR)wstr.c_str(),nLen);if (nResult == 0){return FALSE;}return TRUE;}方法二:1.打开视图类里面的OnDraw函数void CAgainTestView::OnDraw(CDC* pDC){CAgainTestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;// TODO: 在此处为本机数据添加绘制代码cv::Mat newImage;if (pDoc->img.channels() == 1){cv::cvtColor(pDoc->img, newImage, CV_GRAY2BGRA);}else if (pDoc->img.channels() == 3){cv::cvtColor(pDoc->img, newImage, CV_BGR2BGRA);}else{newImage = pDoc->img;}Gdiplus::Bitmap bitmap(newImage.cols, newImage.rows, newImage.step1(), PixelFormat32bppARGB, newImage.data);Gdiplus::Graphics graphics(pDC->GetSafeHdc());graphics.DrawImage(&bitmap, 0, 0);// TODO: add draw code for native data hereGdiplus::Bitmap bitmap1(newImage.cols, newImage.rows, newImage.step1(), PixelFormat32bppARGB, newImage.data);graphics.DrawImage(&bitmap1, newImage.cols, 0);CSize scroll_size;scroll_size.cx = newImage.cols * 2;scroll_size.cy = newImage.rows;SetScrollSizes(MM_TEXT, scroll_size);ReleaseDC(pDC);}然后进入APP头文件中添加#include<gdiplus.h>using namespace Gdiplus;class CAgainTestApp : public CWinAppEx{public:CAgainTestApp();GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;然后进入APP的.cpp中添加如下// The one and only window has been initialized, so show and update it m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);return TRUE;}int CAgainTestApp::ExitInstance(){//TODO: handle additional resources you may have addedAfxOleTerm(FALSE);GdiplusShutdown(gdiplusToken);return CWinAppEx::ExitInstance();}《三》OpenCV的Mat与MFC的CImage 1.Mat 转化为Imagevoid 你的类名::MatToCImage(Mat& mat, CImage& cimage){if (0 == mat.total()){return;}int nChannels = mat.channels();if ((1 != nChannels) && (3 != nChannels)){return;}int nWidth = mat.cols;int nHeight = mat.rows;//重建cimagecimage.Destroy();cimage.Create(nWidth, nHeight, 8 * nChannels);//拷贝数据uchar* pucRow; //指向数据区的行指针uchar* pucImage = (uchar*)cimage.GetBits(); //指向数据区的指针int nStep = cimage.GetPitch(); //每行的字节数,注意这个返回值有正有负if (1 == nChannels) //对于单通道的图像需要初始化调色板{RGBQUAD* rgbquadColorTable;int nMaxColors = 256;rgbquadColorTable = new RGBQUAD[nMaxColors];cimage.GetColorTable(0, nMaxColors, rgbquadColorTable);for (int nColor = 0; nColor < nMaxColors; nColor++){rgbquadColorTable[nColor].rgbBlue = (uchar)nColor;rgbquadColorTable[nColor].rgbGreen = (uchar)nColor;rgbquadColorTable[nColor].rgbRed = (uchar)nColor;}cimage.SetColorTable(0, nMaxColors, rgbquadColorTable);delete []rgbquadColorTable;}for (int nRow = 0; nRow < nHeight; nRow++){pucRow = (mat.ptr<uchar>(nRow));for (int nCol = 0; nCol < nWidth; nCol++){if (1 == nChannels){*(pucImage + nRow * nStep + nCol) = pucRow[nCol];}else if (3 == nChannels){for (int nCha = 0 ; nCha < 3; nCha++){*(pucImage + nRow * nStep + nCol * 3 + nCha) = pucRow[nCol * 3 + nCha];}}}}}2.Image 转化为Matvoid 你的类名::CImageToMat(CImage& cimage, Mat& mat){if (true == cimage.IsNull()){return;}int nChannels = cimage.GetBPP() / 8;if ((1 != nChannels) && (3 != nChannels)){return;}int nWidth = cimage.GetWidth();int nHeight = cimage.GetHeight();//重建matif (1 == nChannels){mat.create(nHeight, nWidth, CV_8UC1);}else if(3 == nChannels){mat.create(nHeight, nWidth, CV_8UC3);}//拷贝数据uchar* pucRow; //指向数据区的行指针uchar* pucImage = (uchar*)cimage.GetBits(); //指向数据区的指针int nStep = cimage.GetPitch(); //每行的字节数,注意这个返回值有正有负for (int nRow = 0; nRow < nHeight; nRow++){pucRow = (mat.ptr<uchar>(nRow));for (int nCol = 0; nCol < nWidth; nCol++){if (1 == nChannels){pucRow[nCol] = *(pucImage + nRow * nStep + nCol);}else if (3 == nChannels){for (int nCha = 0 ; nCha < 3; nCha++){pucRow[nCol * 3 + nCha] = *(pucImage + nRow * nStep + nCol * 3 + nCha);}}}}}。
C++课后习题
C++课后习题第一章1.选择题(1) 应用程序向导AppWizard的作用是,通过类向导可以增加消息映射和成员变量。
(2) 项目工作区窗格一般在集成开发环境的左侧,他展示一个项目的几个方面,他们分别是类视图、资源视图和文件视图。
(3)用户可以通过项目工作区窗格的资源视图来查看资源。
(4)项目工作区文件的扩展名为.dsw(5)菜单选择可以通过两种方法来进行:一种是鼠标选择;另一种是键盘选择(6)编译程序的快捷键是Ctrl+F7 ,链接程序的快捷键是F7 ,运行程序的快捷键是Ctrl+F5(7)编译微型条工具栏最右边按钮的功能是Insert/Remove Breakpoint(8)快捷键或菜单及相关资料符号的前缀是IDR2.选择题(1)用应用程序向导AppWizard创建C++源文件,应选择(A )选项卡。
A.FilesB.ProjectsC.WorkspacesD.Other Documents(2)项目文件的扩展名( B )。
A. .exeB. .dspC. .dswD. .cpp(3)Standard 工具栏中最左边按钮与(C )菜单命令的功能一样。
A.NewB.New FileC.New Text FileD.New Workspace(4)Windows资源提供的资料编辑器不能编辑(C )。
A.菜单B.工作栏C.状态栏D.位图3.判断题(1)通过应用程序向导AppWizard建立的程序不能被立即执行。
(×)(2)打开一个项目,只需打开对应的项目工作区文件。
(√)(3)用户可以通过选择T ools | Customize菜单命令设置集成开发环境的工具栏。
(√)(4)在同一项目中,Visual C++在内部用来标识资源的资源符号不能重复。
(√)(5)在Windows环境下,资源与程序源代码紧密相关。
(×)4.简答题(1)什么是项目?它是由什么组成的?(2)解释项目工作区中各个视图的功能。
word单项操作题目操作步骤现用图解说明书(全)(2010版本新)
类型一:页面设置1、在考生文件夹Paper子文件下,建立文档“比赛信息.docx”,由三页组成。
要求:(1)第一页中第一行内容为“足球”,样式为“标题1”;页面垂直对齐方式为“居中”;页面方向为纵向、纸张大小为16开;页眉内容设置为“football”,居中显示;页脚内容设置为“成绩不行”,居中显示。
(2)第二页中第一行内容为“篮球”,样式为“标题2”;页面垂直对齐方式为“顶端对齐”;页面方向为横向、纸张大小为A4;页眉内容设置为“basketball”,居中显示;页脚内容设置为“成绩还行”,居中显示;对该页面添加行号,起始编号为“1”。
(3)第三页中第一行内容为“乒乓球”,样式为“正文”;页面垂直对齐方式为“底端对齐”;页面方向为纵向、纸张大小为B5;页眉内容设置为“table tennis”,居中显示;页脚内容设置为“成绩很好”,居中显示。
操作难点简要说明:1、先插入2个分隔符中分节符中下一页,再分别设置各页面,设置第2、3页页眉页脚时,注意单击链接到前一条页眉,取消链接到上一节。
2、行号添加。
页面布局---页面设置,展开页面设置版式后,版式----行号—把添加行号打上勾----确定。
3、。
2、在考生文件夹Paper子文件下,建立文档“考试信息.docx”,由三页组成。
其中:(1)第一页中第一行内容为“语文”,样式为“标题1”;页面垂直对齐方式为“居中”;页面方向为纵向、纸张大小为16开;页眉内容设置为“90”,居中显示;页脚内容设置为“优秀”,居中显示。
(2)第二页中第一行内容为“数学”,样式为“标题2”;页面垂直对齐方式为“顶端对齐”;页面方向为横向、纸张大小为A4;页眉内容设置为“65”,居中显示;页脚内容设置为“及格”,居中显示;对该页面添加行号,起始编号为“1”。
(3)第三页中第一行内容为“英语”,样式为“正文”;页面垂直对齐方式为“底端对齐”;页面方向为纵向、纸张大小为B5;页眉内容设置为“58”,居中显示;页脚内容设置为“不及格”,居中显示。
Web前端开发技术知到章节答案智慧树2023年成都文理学院
Web前端开发技术知到章节测试答案智慧树2023年最新成都文理学院第一章测试1.浏览器针对于HTML文档起到了什么作用()。
参考答案:浏览器用于展示HTML文档2.HTML指的是()。
参考答案:超文本标记语言(Hyper Text Markup Language)3.Web 标准的制定者是()。
参考答案:万维网联盟(W3C)4.网站首页默认的文件名一般有()。
参考答案:index.asp;default.ht;index.html;index.htm5.WWW是什么意思()。
参考答案:万维网第二章测试1.哪个标记用于表示HTML文档的开始和结束()。
参考答案:HTML2.以下标记符中,没有对应的结束标记的是()。
参考答案:br3.下面有关html描述正确的是()。
参考答案:HTML就是超文本标记语言的简写,是最基础的网页语言4.使用HTML编写网页代码的基本格式是()。
参考答案:<html><head></head><body></body></html>5.下列关于HTML语言的描述不正确的是()。
参考答案:不懂HTML语言的人无法制作网站第三章测试1.空格对应的html实体是哪个()。
参考答案:& nbsp ;2.下面哪一项是换行符标签()。
参考答案:br3.创建最小的标题的文本标签是()。
参考答案:<h6></h6>4.下面可以显示粗体的标签是()。
参考答案:<b>ITCAST</b>;ITCAST5.在 HTML中,标记<pre>的作用是()。
参考答案:预排版标记第四章测试1.定义有序列表<ol>的()属性,可以决定有序列表项目符号的类型。
()。
参考答案:type2.关于有序列表的描述,下列说法正确的是()。
参考答案:有序列表按顺序排列并通过type属性定义序号样式3.下列选项中,属于定义列表标记的是()。
2024版word教学课件ppt完整版
word教学课件ppt完整版目录•Word基础操作与界面介绍•文档创建、打开与保存•文本输入、编辑与格式化•插入对象及编辑处理•表格制作与数据处理•高级功能应用及技巧分享•总结回顾与课程延伸PART01Word基础操作与界面介绍启动与退出Word启动Word通过开始菜单或桌面快捷方式启动Word应用程序。
退出Word点击Word窗口右上角的关闭按钮,或选择“文件”菜单中的“退出”选项。
界面组成及功能显示当前文档的名称和Word应用程序的图标。
包含多个选项卡,每个选项卡下有一组相关的命令按钮,用于执行各种操作。
用于输入、编辑和排版文档内容的区域。
显示当前文档的状态信息,如页数、字数、视图方式等。
标题栏功能区文档编辑区状态栏可以通过“文件”菜单中的“选项”来自定义功能区的选项卡和命令按钮。
自定义功能区自定义快捷键快速访问工具栏在Word 中,可以通过“文件”菜单中的“选项”来自定义快捷键,提高操作效率。
将一些常用的命令按钮添加到快速访问工具栏中,方便快速执行这些命令。
030201自定义界面与快捷键PART02文档创建、打开与保存点击Windows 开始按钮,在搜索栏输入“Word”并选择打开,然后点击“新建”按钮创建新文档。
通过开始菜单创建同时按下Ctrl+N 组合键,可以快速创建一个新的Word 文档。
使用快捷键创建Word 提供了丰富的模板供用户选择,用户可以根据需求选择合适的模板创建文档。
从模板创建新建文档方法打开现有文档技巧通过文件菜单打开在Word中点击“文件”菜单,选择“打开”选项,浏览到文档所在位置并打开。
使用快捷键打开同时按下Ctrl+O组合键,可以快速打开现有文档。
从最近使用过的文档打开Word会自动记录用户最近使用过的文档,用户可以从文件菜单中的“最近使用过的文档”列表中选择并打开。
保存文档格式和位置选择保存文档格式Word支持多种格式保存,如.docx、.doc、.pdf等。
用户可以根据需求选择合适的格式进行保存。
Opencascade建立单文档
Opencascade建立OCAF单文档图1为MFC单文档应用程序界面;图2为OCAF单文档应用程序界面。
图1图2基于MFC单文档建立OCAF单文档的步骤:1、创建一个MFC单文档应用程序。
在项目的头文件(或包含文件)和库文件路径里添加Open cascade 的所有头文件和库文件路径(具体操作参见<<Opencascade 6.60调试总结>>文档);将需要使用的头文件添加到stdafx.h里;打开工程属性,在链接器选项卡中的输入项的附加依赖项中添加OpenCascade 库文件;2、APP类中OpenCascade图形设备环境变量添加和设置。
在SWFZ.h头文件里添加:#include<Standard_Macro.hxx>#include<Graphic3d_GraphicDriver.hxx>CSWFZApp类中添加成员和用法:protected:Handle_Graphic3d_GraphicDriver myGraphicDriver;Handle_Graphic3d_GraphicDriver GetGraphicDriver() const{return myGraphicDriver;}CSWFZApp类的构造函数添加:try{Handle(Aspect_DisplayConnection) aDisplayConnection;myGraphicDriver = Graphic3d::InitGraphicDriver (aDisplayConnection);}catch (Standard_Failure){ExitProcess(1);}注意:需要注释//#ifdef _DEBUG//#define new DEBUG_NEW//#endif原因是因为OpenCascade对New操作符进行了重载,与VS中的定义存在冲突。
Word2024实用操作培训教程
打开需要协同编辑的文档,点击顶部菜 单栏中的“共享”选项卡。
在“共享”组中,点击“共享文档”按 钮,将文档链接分享给其他协作者。
PART 06
高级功能应用与拓展学习
邮件合并功能实现批量处理
邮件合并功能介绍
01
通过邮件合并功能,可以快速将同一份文档发送给多个收件人
插入SmartArt图形
点击“插入”选项卡中的“SmartArt”按钮,选择合适的图形类 型,然后根据需要添加和编辑文本和形状。
图片样式设置及调整
调整图片大小
选中图片后,拖动图片边角上的 控制点可调整图片大小。
裁剪图片
选中图片后,点击“图片工具” 中的“裁剪”按钮,可对图片进
行裁剪操作。
设置图片样式
输入文字及特殊符号方法
打开Word2024,选择新建文 档,在文档编辑区域输入文字 。
对于特殊符号的输入,可以点 击插入菜单中的“符号”选项 ,在弹出的符号库中选择需要 的符号进行插入。
另外,也可以通过组合键的方 式输入一些常用的特殊符号, 例如Ctrl+C和Ctrl+V分别代表 复制和粘贴操作。
在“审阅”选项卡中,选择“批注”组中的“上一条”或“下一条” 按钮可查看不同批注,选择“编辑批注”可对批注进行编辑操作。
多媒体元素(音频、视频)插入方法
插入音频
点击“插入”选项卡中的“音频”按钮,从文件或在线资源 中选择所需音频文件进行插入。插入后可通过播放控件进行 播放和控制。
插入视频
在“插入”选项卡中,选择“视频”按钮,从文件或在线资 源中选择所需视频文件进行插入。插入后可通过播放控件进 行播放和控制,同时可对视频进行格式设置和编辑操作。
sw14
软件定义开发与测试的关系
可行性研究 运行
需求分析
确认测试
概要设计
组装测试
详细设计
单元测试
2013-1-5
编码与试调
14
14.3软件测试策略
14.3.1 单元测试
单元测试的对象是软件设计的最小单位——模块。 单元测试的依据是详细设计描述,单元测试应对模 块内所有重要的控制路径设计测试用例,以便发现 模块内部的错误。 单元测试多采用白盒测试技术,系统内多个模块可 以并行地进行测试。
2013-1-5
16
14.3软件测试策略
1. 自顶向下集成
自顶向下集成是构造程序结构的一种增量式方式, 它从主控模块开始,按照软件的控制层次结构,以深 度优先或广度优先的策略,逐步把各个模块集成在 一起。 深度优先策略首先把主控制路径上的模块集成在一 起,至于选择哪一条路径作为主控制路径多少带点 随意性,一般根据问题的特性确定。
2013-1-5
15
14.3软件测试策略
14.3.2 综合测试
综合测试是组装软件的系统测试技术,按设计要求 把通过单元测试的各个模块组装在一起之后,进行 综合测试以便发现与接口有关的各种错误。 某些软件设计人员习惯于把所有模块按设计要求一 次全部组装起来,然后进行整体测试,这称为非增量 式集成。这种方法容易出现混乱。 与之相反的是增量式集成方法,程序一段一段地扩 展,测试的范围一步一步地增大,错误易于定位和纠 正,界面的测试亦可做到完全彻底。
1、等价分类法; 2、边界值分析法; 3、对比测试法。
2013-1-5
12
第十四章 软件测试
第十四章 单文档界面的程序
第十四章单文档界面的程序用VC++的AppWizard生成的程序有三种样式的界面,它们是单文档、多文档和对话框界面。
前面各章我们都生成对话框样式的界面,这可以方便我们学习各种常用控件的设计,本章要学习如何生成一个单文档界面的应用程序,以及文档类和视图类的概念和相互关系。
本章要点1 用AppWizard生成单文档界面的操作方法2 文档类和视图类的概念3 如何保持文档和视图的同步关联。
14.1 生成单文档界面的文本编辑器用AppWizard生成单文档界面的操作方法和生成对话框界面的操作方法稍有不同,我们通过建立一个“文本编辑器”应用程序MyNote.exe来演示,具体过程如下:1 打开应用程序向导,在d:\myVC\CH14创建应用程序MyNote。
2 在Step1中选择“单文档”和“文档/视图支持”,如图chap14-01.图chap14-013 在step2和step3对话框中都用默认的。
在step4中如图chap14-02选择前五项,当然也可以按你的需要选择。
图chap14-024 在Step5中选择MFC标准、加备注和静态连接库。
图chap14-03图chap14-035 在step6中选择视图的基类(base class),因为我们需要的是文本编辑器,所以要选类CEditView作为基类。
点击[完成]按纽,应用程序的框架就创建好了。
14.2 文档类和视图类的概念向导工作完成以后马上编译和连接,运行后就可以看到一个已经能够使用的文本编辑器,它不仅可以输入文字,还可以保存或打开文件,与Windows的记事本差不多了,只是没有设置字体的功能。
图chap14-04是它运行时的窗口。
chap14-04菜单和工具栏的响应函数都已经生成了相应的代码,我们没有做任何编写工作就得到了一个“完整”的应用程序,甚至还创建了一个帮助文件呢。
这就是VC++开发环境的巨大威力!我们从上图中可以看到,编辑菜单中的复制和剪切都已经有效了。
J14FrontPage
电气信息学院 计算机系
网页制作:插入表格
在表格中插入图片 选择“插入”菜单下的“图片”下面的 “来自文件”命令,
电气信息学院 计算机系
网页制作:超链接
在浏览器中通过点击网页中的超链接, 可以很方便地打开另外一个网页,或者 是图片、文件、邮件地址等。一个网页 中的链接分成两个部分:包含链接的载 体和链接的目标地址。链接的载体就是 在网页中文字和图片,凡是包含链接的 文字和图片都称为超链接。 1、文本超链接 2、图片超链接
计算机基础教程
第14章FrontPage
电气信息学院 计算机系
最初人们曾经利用HTML语言制作网页。 为了让一般的Internet爱好者也能参与网页 制作,专业人员开发了各种各样的网页编 辑器。 FrontPage 2003是一套完整的站点和网 页开发与制作工具。它不但提供了创建Web 站点的各种快捷方法,而且提供了“所见 即所得”的网页编辑环境。
电气信息学院 计算机系
网页制作:插入表格
在表格中编辑表格
文字输入以后网页显得比较单调,需要插 入几张图片才比较美观。 (1)选择“表格”菜单下的“绘制表格”命 令,弹出“表格”工具栏
电气信息学院 计算机系
网页制作:插入表格
(2)选择“绘制布局表格” 工具,在需要插入的地方 拖拽,画出一个单元格, 调整该单元格的大小。这 里我们需要插入两张图片, 所以需要画出两个单元格。
网站。所以,制作网页就是在制作网站
电气信息学院 计算机系
网站的素材的准备
选择路径在电脑上建立一个“个人网站” 将准备好的素材复制到“个人网站”文件夹 中
电气信息学院 计算机系
网页制作
电气信息学院 计算机系
网页制作:网页属性设置
sw14
2013-1-5
27
14.3软件测试策略
2. 安全测试
安全测试检查系统对非法侵入的防范能力。安全测 试期间,测试人员假扮非法入侵者,采用各种办法 试图突破防线。 例如,(1)想方设法截取或破译口令;(2)专门定 做软件破坏系统的保护机制;(3)故意导致系统失 败,企图趁恢复之机非法进入;(4)试图通过浏览 非保密数据,推导所需信息等等。 理论上讲,只要有足够的时间和资源,没有不可进 入的系统。因此系统安全设计的准则是,使非法侵 入的代价超过被保护信息的价值。此时非法侵入者 已无利可图。
2013-1-5
6
假设每运行一个测试用例平均花费1毫秒,则总共需多长时间才 能穷尽所有测试? 最多有1014个逻辑路径,总共需3170年才能穷尽所有测试。
2013-1-5 7
14.1基本概念
白盒测试
白盒测试法密切关注处理细节,针对程序的每一条 逻辑路径都要分别设计测试用例,检查分枝和循环 的情况。 穷举测试不可取,一般选用少量“最有效”,即最有 可能暴露错误的路径进行测试。 测试的目的是为了找出错误,所以无论采用黑盒法 还是白盒法,设计测试用例时总是期望用尽可能少 的时间和代价发现尽可能多的错误。
2013-1-5 28
14.3软件测试策略
3. 强度测试
强度测试检查程序对异常情况的抵抗能力。 强度测试总是迫使系统在异常的资源配置下运行。 例如:
(1)当中断的正常频率为每秒一至两个时,运行每秒产生 十个中断的测试用例; (2)定量地增长数据输入率,检查输入子功能的反映能力; (3)运行需要最大存储空间(或其他资源)的测试用例; (4)运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动 的测试用例;等等。
第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类所派生。 类所派生。 类所派生
Word--基础教程
(三)设置段落间距和行间距
段落间距:自然段之间旳距离叫行间距,又分为段前间距和段后间 距。默以为0。 行间距:两行之间旳距离叫行间距。默以为单倍行距,实际为12磅, 相当于宋体5号字。
假如不能满足需要,还能够选择自定义大小,进行设定。
2、设置每页行数、每行字数及正文排列 对于每一种固定旳纸型,其行数、每行字数及行间距、字间距是有一
定默认值旳,但假如有必要,顾客可另行设定。 ❖ 在文件菜单中单击页面设置选项,打开对话框; ❖ 单击文档网格页面,默认只指定行网格,此时可变化行数和行间距; ❖ 若选定指定行网格和字符网格可同步修改每页行数和每行字数,以及 行间距和字间距。
② 调整表格行高度 ❖ 拖动垂直标尺上旳行标识。(若同步按【ALT】键,则可显示出各行高数值) ❖ 拖动表格横线。 ❖ 用对话框参数指定。
③ 自动调整 ❖ 在表格菜单中单击平均分布各行或平均分布各列选项; ❖ 在表格上方单击鼠标右键,出现快捷菜单,可平均分布各列或各行。 ❖ 在表与边框工具栏中也能够选 用此功能。
环节: ① 选定段落或全文; ② 在格式菜单中单击段落选项,打开对话框; ③ 在行距下拉列表框中选择行距类型,设定详细磅数; ④ 在间距框中设定段落前后旳距离; ⑤ 单击拟定。
(六)设置分栏 文档内容在版面上提成若干列,这在排版上称作分栏。 选定段落,在格式菜单中单击分栏选项,弹出对话框; 在预设框中选定分栏数; 在宽度和间距框中出现默认旳栏宽和栏间距,可修改其参数; 单击拟定按钮,实现分栏。
所以,可在找到第一种信息后用快捷键【SHIFT+F4】进行反复 查询。
单文档应用程序设计2
AfxThrowResourceException();
CMenu *pPopupMenu=ContextMenu.GetSubMenu(0); ASSERT(pPopupMenu!=NULL); ClientToScreen(&point); pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y,this); CView::OnRButtonDown(nFlags, point); }
第10章 单文档应用程序设计
10.4.3 上下文菜单
单击鼠标右击时激活的菜单,称为上下文菜单
加入上下文菜单,一般分三步进行:
编辑菜单资源,设置菜单属性(包括菜单Caption和ID) 使用ClassWizard,映射鼠标右键消息 在鼠标右键消息映射函数中利用Cmenu类创建上下文菜单
第10章 单文档应用程序设计
第10章 单文档应用程序设计
10.4.3 上下文菜单 实例代码
void CMenuView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default CMenu ContextMenu; if(!ContextMenu.LoadMenu(IDR_CONTEXTMENU))
AfxThrowResourceException();
CMenu *pPopupMenu=ContextMenu.GetSubMenu(0); ASSERT(pPopupMenu!=NULL); ClientToScreen(&point); pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x,point.y,this); CView::OnRButtonDown(nFlags, point); }
多文档界面(MDI)系统框架-C#完整版(一)[vjsdn]
多⽂档界⾯(MDI)系统框架-C#完整版(⼀)[vjsdn]/******************************************************/多⽂档界⾯(MDI)系统框架-C#完整版Programming by:Jonny Sun(易学原创)all righrights reserved./******************************************************/说明:Windows应⽤程序的⽤户界⾯主要有两种形式:单⽂档界⾯(Single Document Interface,SDI )和多⽂档界⾯( Multiple Document Interface,MDI )。
单⽂档界⾯并不是指只有⼀个窗体的界⾯,⽽是指应⽤程序的各窗体是相互独⽴的,⽤户只能操作当前活动的窗体,不能同时操作其它窗体,这是单⽂档界⾯程序主要特性。
单⽂档界⾯如安全卫⼠360。
多⽂档界⾯由多个窗体组成,但这些窗体不是独⽴的。
其中有⼀个窗体称为MDI⽗窗体,其他窗体称为MDI⼦窗体。
可以把MDI⽗窗体理解为⼀个容器,⼦窗体的活动范围限制在MDI⽗窗体这个容量内,永远不能将其移动到MDI窗体之外。
MDI程序遍布在各个⾓落,如:Microsoft Word程序。
多⽂档界⾯(MDI)系统框架运⾏如下:[图⼀]MDI程序主要特点是由⽗窗体可以控制所有⼦窗体的操作。
我们在设计上需要抽象出⼀个公共接⼝来规范⼦窗体的操作。
但是不能限制和固化⼦窗体的功能。
有些⼦窗体具有独特的功能⽽其它⼦窗体没有。
接⼝设计只关⼼⼦窗体的共性。
那我们如何实现那些独特的功能呢? 我们⽤过很多MDI软件,如Ms.Word,VisualStudio,当切换⼦窗体时主窗体上的按钮也随之改变。
通过观察不难看出,按钮状态是与⼦窗体紧密相关的。
所以得出⼀个简单的设计理论:当⼦窗体获得焦点时更新主窗体的按钮.先看⼀段代码:代码//⼦窗体获取焦点时注册⼦窗体的按钮。
Java Web程序设计任务教程第14章 传智书城前台程序设计
14.2 购物车模块
在电子商务网站中购物车模块是必不可少的,也是最重要的模块之一。本节中
将学习如何实现传智书城项目的购物车模块。在开发购物车模块之前,首先应 该熟悉该模块实现的功能以及整个功能模块的处理流程。下面通过一幅图来展 示购物车模块实现的所有功能,具体如下图所示。
用户注册功能,请查看教材【任 务14-1】。
14.1 用户注册和登录模块
【任务目标】 用户注册并成功激活之后,该用户便可以在传智书城前台网站进行登录操作。 【实现步骤】 ①编写登录页面
②创建Servlet
③编写Service层方法 ④创建DAO
14.1 用户注册和登录模块
案例代码
任务案例
接下来,通过具体代码实现
进入主页 用户
选购商品 继续购物 提示页面 否 是否登录 清空购物车 是 查看购物车 结算入口 填写订单信息 生成订单信息 在线支付
14.2 购物车模块
【任务目标】 通过所学知识和购物车功能及流程的描述,实现在购物车中添加商品和删除购 物车中指定商品的功能。 【实现步骤】
①向购物车中添加商品
②删除购物车中指定商品
14.3 图书信息查询模块
【任务目标】 根据商品类型的不同,将图书分为文学类、生活类、计算机类等。单击导航栏 上不同的类型,显示该类型下所有的图书,当单击“全部商品目录”时,查询 的是所有的图书。 【实现步骤】 ①编写页面功能代码 ②创建Servlet
14.3 图书信息查询模块
案例代码Biblioteka 任务案例14.1 用户注册和登录模块
用户注册是用户参与网站活动最直接的桥梁。通过用户注册可以有效地采集用 户信息,并将合法的用户信息保存到指定的数据表中。成功注册并激活的用户 登录后,可以使用网站的更多功能,例如购物车、提交和支付订单、查看个人 账户等等。接下来本节将针对用户注册和登录模块进行详细的讲解。。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十四章单文档界面的程序
用VC++的AppWizard生成的程序有三种样式的界面,它们是单文档、多文档和对话框界面。
前面各章我们都生成对话框样式的界面,这可以方便我们学习各种常用控件的设计,本章要学习如何生成一个单文档界面的应用程序,以及文档类和视图类的概念和相互关系。
本章要点
1 用AppWizard生成单文档界面的操作方法
2 文档类和视图类的概念
3 如何保持文档和视图的同步关联。
14.1 生成单文档界面的文本编辑器
用AppWizard生成单文档界面的操作方法和生成对话框界面的操作方法稍有不同,我们通过建立一个“文本编辑器”应用程序MyNote.exe来演示,具体过程如下:
1 打开应用程序向导,在d:\myVC\CH14创建应用程序MyNote。
2 在Step1中选择“单文档”和“文档/视图支持”,如图chap14-01.
图chap14-01
3 在step2和step3对话框中都用默认的。
在step4中如图chap14-02选择前五项,当然也可以按你的需要选择。
图chap14-02
4 在Step5中选择MFC标准、加备注和静态连接库。
图chap14-03
图chap14-03
5 在step6中选择视图的基类(base class),因为我们需要的是文本编辑器,所以要选类CEditView作为基类。
点击[完成]按纽,应用程序的框架就创建好了。
14.2 文档类和视图类的概念
向导工作完成以后马上编译和连接,运行后就可以看到一个已经能够使用的文本编辑器,它不仅可以输入文字,还可以保存或打开文件,与Windows的记事本差不多了,只是没有设置字体的功能。
图chap14-04是它运行时的窗口。
chap14-04
菜单和工具栏的响应函数都已经生成了相应的代码,我们没有做任何编写工作就得到了一个“完整”的应用程序,甚至还创建了一个帮助文件呢。
这就是VC++开发环境的巨大威力!我们从上图中可以看到,编辑菜单中的复制和剪切都已经有效了。
图中的窗口是主框架,对应于类CMainFrame,而其中的“编辑区域”叫用户区,对应于视图类CMyNoteView,而被编辑的文本对应于一个文档类CMyNoteDoc。
另外,每个程序还有一个对应于应用程序本身的类,本例中是CMyNoteApp。
这四个类就是向导自动生成的应用程序框架类,打开工作区的类classView页区,就可以看到,如图chap14-05。
展开视图类,可以找到一个函数GetDocument(),它是使视图(的内容)和文档保持同步关联的纽带。
它返回一个CMyNoteDoc类型的对象指针m_pDocument。
使用它在视图中访问文档的内容。
在文档类中有一个OnNewDocument()函数,在“新建文件”和程序第一次运行时被调用,它打开一个新文档供用户编辑。
我们来看一下它的代码:
BOOL CMyNoteDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
((CEditView*)m_viewList.GetHead())->SetWindowText(NULL);
return TRUE;
}
if语句调用其父类的同名函数,第二个语句设置编辑区的文本为空白。
你试着用“这是一个新文档”来代替NULL,重新编译和运行,那每次打开时编辑区会出现这句话。
文档类中还有一个叫Serialize,把它系列化对象CArchive& ar设置为按行系列化,这是纯文本文件存取时所需要的。
下面是它的代码。
void CMyNoteDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);
}
在下一节中,我们将通过一个例程来演示,如何在文档对象和视图对象之间互相访问和交换数据。
14.3 Circle程序的界面和功能
Circle程序的功能是:用鼠标左键在用户区域任意的点一下,就以这一点为圆心画一个半径为50的圆。
程序的界面和上例一样,都是单文档程序的基本形式么。
但是其客户区年输入文字,是画图形式的。
图chap14-06
下面我们就来制作这一程序。
1 创建工程
打开应用程序向导,在d:\myVC\CH14创建应用程序Circle。
选择“单文档”,后面的应答与上例一样。
不同的是最后一步视图基类的选择,不是选CEditView而是选CView。
CEditView 类是CView类的子类,适合于需要文字编辑的场合。
2 添加变量
画圆需要与圆心和半径,为了文档和视图的同步,我们需要给两者都引进三个变量m_PosX、m_PosY和m_Reduse。
定义要写在他们的构造函数中:
public:
int m_PosX, m_PosY;
int m_Reduse ;
3 编写代码
(1)函数OnDraw(CDC* pDC)的功能是在客户区画图,我们用它以试图中的变量值来画圆,代码如下:
void CCircleView::OnDraw(CDC* pDC)
{
CCircleDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//Draw a circle
RECT rect;
rect.left= m_PosX - m_Reduse ;
rect.top = m_PosY - m_Reduse ;
rect.right = m_PosX + m_Reduse ;
rect.bottom= m_PosY + m_Reduse ;
pDC->Ellipse(&rect);
}
其中pDC是由参数表传递过来的屏幕设备对象,可以画图。
RECT是表示举行的数据结构。
是画图圆需要的参数。
(2)变量m_PosX等的值在初始更新函数OnInitialUpdate()中给定,而值是从文档的同名函数中传递过来的。
???
CCircleDoc* pDoc = GetDocument();
m_PosX = pDoc->m_PosX ;
m_PosY = pDoc->m_PosY ;
m_Reduse = pDoc->m_Reduse ;
(3)要求当“按下鼠标时画圆”,就要添加OnLButtonDown函数,其中使用Invalidate(),它会调用函数OnDraw重新画客户区,其代码如下:
void CCircleView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_PosX = point.x ;
m_PosY = point.y ;
Invalidate();
CCircleDoc* pDoc = GetDocument();
pDoc->m_PosX = m_PosX;
pDoc->m_PosY = m_PosY;
pDoc->SetModifiedFlag(TRUE);
CView::OnLButtonDown(nFlags, point);
}
变量point对应的是鼠标当前点的位置,传递给视图的变量,然后画圆;再把它传递给文档,这就保证视图和文档数据的一致性。
语句
pDoc->SetModifiedFlag(TRUE);
设置文档已经被修改的标志,这使得程序在退出时会询问“是否要保存?”。
(4)在文档类中有一个函数OnNewDocument(),它是在按“文件/新建”时被调用的。
我们用它给出圆的初始值:
m_PosX = 100;
m_PosY = 100;
m_Reduse = 50 ;
需要的代码就这些了,现在可以编译和运行之。
思考和练习
1 文档类应用程序是如何保持视图和文档数据的一致性的?
2 在MyNote程序中添加菜单及其代码,扩展它的功能。
例如,增加文字的大小和颜色等。
3 在Circle程序中添加菜单及其代码,扩展它的功能。
例如,可变的半径,画不同的图形等。