VC++单文档程序的设计(1)
vc模板制作教程

vc模板制作教程
当制作VC模板时,可以遵循以下教程来创建一个没有标题的
模板,并确保文中不存在重复的标题文字。
1. 打开VC模板编辑软件,如Adobe After Effects或Final Cut Pro等。
2. 创建一个新的项目,并选择适合的分辨率和帧速率。
3. 在画面中央或其他合适位置放置一个适当大小的文本框,用于显示标题。
4. 在文本框中输入要显示的标题文本。
5. 适当调整文本框的大小和位置,以确保标题显示在合适的位置。
6. 根据需要选择合适的字体、字号和颜色,以使标题看起来吸引人且容易阅读。
7. 使用软件的动画功能,如缩放、淡入淡出、滚动等,为标题添加一些动态效果,增加视觉吸引力。
8. 可以添加背景、图像、视频片段或其他视觉元素来进一步增强模板的效果。
9. 调整动画的速度和时长,确保标题的显示时间在合适的范围内。
10. 导出模板为视频文件或其他可用格式,以便在需要时使用。
使用这个教程,你可以制作一个没有标题的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库来处理。
用VC++MFC做文本编辑器(单文档模式)

用VC++MFC做文本编辑器(单文档模式)原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下:1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。
2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放:class CTextview_1Doc : public CDocument{......public:CStringArray m_strContent;}然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序:void CTextview_1Doc::Serialize(CArchive& ar){CString str;if (ar.IsStoring()){// TODO: add storing code hereint nLines = (int)m_strContent.GetSize();for ( int i=0; i<nLines; i++ ){str = m_strContent.GetAt( i );ar.WriteString( str ); // 将字符串集合类对象中文本保存到硬盘}}else{// TODO: add loading code herewhile ( ar.ReadString( str ) ){m_strContent.Add( str ); // 将行文本添加到字符串集合类对象中}}}然后鼠标在CTextview_1Doc 上点击右键,在弹出菜单里面选择:Add Virtual Function,在弹出的窗口中选中DeleteContents,点击“添加和编辑”按钮。
在生成的程序中添加以下代码:void CTextview_1Doc::DeleteContents(){// TODO: Add your specialized code here and/or call the base classm_strContent.RemoveAll(); // 清除集合类对象中的内容CDocument::DeleteContents();}3,在系统自动生成的CTextview_1View类里面增加一个编辑器的控件指针成员,用于在界面中生成文本编辑器:class CTextview_1View : public CView{......public:CEdit* m_ctrlEdit;}该指针成员在类建立时要设置初始化值为NULL,否则运行起来就会出错,如下:CTextview_1View::CTextview_1View(): m_ctrlEdit(NULL) //添加这一行初始化代码{// TODO: add construction code here}用第2点介绍的类似步骤,为CTextview_1View类重写其OnInitialUpdate函数,添加内容如下:void CTextview_1View::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: Add your specialized code here and/or call the base classCRect rcClient;GetClientRect( rcClient ); // 获取当前视图的客户区大小// if ( m_ctrlEdit ) delete m_ctrlEdit;m_ctrlEdit = new CEdit();m_ctrlEdit->Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE| WS_HSCROLL | ES_AUTOHSCROLL // 自动水平滚动| WS_VSCROLL | ES_AUTOVSCROLL , // 自动垂直滚动rcClient, this, 201); // 创建多行编辑控件CTextview_1Doc* pDoc = GetDocument(); // 获取与视图相关联的文档指针// 以下是将文档中的m_strContent内容全部赋给strCString str;int nLines = (int)pDoc->m_strContent.GetSize();for ( int i=0; i<nLines; i++ ){str = str + pDoc->m_strContent.GetAt( i );str = str + "\r\n"; // 换行}m_ctrlEdit->SetTabStops( 16 ); // 设置Tab符大小m_ctrlEdit->SetWindowText( str ); // 将文档内容传给控件}4,现在运行一下,文本编辑器就做好了。
VisualC#程序设计教程 第1章 Visual C# 软件开发基础

1.2 C#程序的基本结构
1.2.3资料链接:Console类
1.3 图书管理系统项目分析初步
知识目标: 1.理解图书管理系统程序的功能设计 2.了解对象的设计 技能目标: 初步掌握项目分析方法
1.3 图书管理系统项目分析初步
1.3.1功能模块分析
图书管理系统主要包括用户登录、借书、还书、用户管理、 图书查询和读者查询等五个主要操作模块 登录模块
5.属性
1.1 Visual Studio 2005开发环境
6.工具箱
1.1 Visual Studio 2005开发环境
7.错误列表
1.1 Visual Studio 2005开发环境
1.1.2创建Windows应用程序
1.启动Visual Studio 2005后,选择“创建项目”,打开“新建项目” 对话框,如图1-10所示,选择Windows应用程序,输入项目和解决方 案的名称,并输入文件的路径,单击“确定”。 2.在工具栏中拖动Label和Button控件至Form中,如图1-11,这时在 From中添加了两个控件Label1 和Button1,修改Label1的Text属性为 “Hello World”,ForeColor属性设为“Red”,修改Button1的Text属 性为“确定”。双击Button1,即注册了按钮的click事件,并打开 form.cs文件,在代码编辑器中添加以下代码: private void button1_Click(object sender, EventArgs e) { label1.Text = "这是第一个C#程序"; } 3.单击运行按钮或按F5键,运行程序,单击“确定”按钮,可以看到 程序执行效果。
mfc单文档例子

mfc单文档例子以下是一个简单的MFC单文档(SDI)应用程序的示例:1. 首先,创建一个新的MFC应用程序项目。
在Visual Studio中,选择“文件”菜单,然后选择“新建”->“项目”。
在“新建项目”对话框中,选择“MFC应用程序”,然后输入项目名称和位置,并单击“确定”。
2. 在“MFC应用程序向导”中,选择“单文档”作为应用程序类型,并单击“完成”按钮。
3. 在生成的代码中,找到`CMainFrame`类。
这是应用程序的主窗口类。
4. 在`CMainFrame`类的`OnCreateClient`函数中,添加以下代码:```cppvoid CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext pContext){// 创建视图窗口m_(_T("My View"), WS_CHILD WS_VISIBLE WS_BORDERWS_HSCROLL WS_VSCROLL, CRect(0, 0, 800, 600), this,ID_VIEW_WIN);}```5. 在`CMainFrame`类的`OnCreate`函数中,添加以下代码:```cppBOOL CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;// 创建工具栏和状态栏CToolBarCtrl tb;CRect rect(0, 0, 800, 24);(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPERCBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(WS_CHILD WS_VISIBLE CBRS_TOP CBRS_GRIPPER CBRS_TOOLTIPS CBRS_FLYBY, rect, this, ID_VIEW_TB);m_(this);m_(0, ID_VIEW_STATUSBAR, SBPS_STRETCH, 0);m_(1, ID_VIEW_STATUSBAR2, SBPS_STRETCH, 0);m_(2, ID_VIEW_STATUSBAR3, SBPS_STRETCH, 0);m_(0, SBPS_NORMAL);m_(1, SBPS_NORMAL);m_(2, SBPS_NORMAL);m_(0, _T("Ready"));m_(1, _T("Ready"));m_(2, _T("Ready"));return TRUE;}```6. 编译并运行应用程序。
【初学VC讲稿】第10篇:图书阅读器

图书阅读器1,单文档应用程序Reader,视图类从CeditView派生,用向导设置Main frame caption为:“图书阅读器”。
2,修改主窗口图标IDR_MAINFRAME,自己喜爱的图标。
3,设置启动时自动打开的文档,在CReaderApp::InitInstance()函数中:BOOL CReaderApp::InitInstance(){……………………………………m_pMainWnd->DragAcceptFiles();OpenDocumentFile("Readme.txt");return TRUE;}4,在Toolbar上添加ID_PRE,ID_NEXT,在视图类中添加其响应函数分别如下:void CReaderView::OnPre(){CString sFilename(GetDocument()->GetPathName());// 得到当前打开文档的路径名CString sTitle(GetDocument()->GetTitle()); // 得到当前打开文档的文件名int nTitle=atoi(sTitle);if(nTitle>1){sTitle.Format("%d",nTitle-1);int nFind=sFilename.ReverseFind('\\');if(nFind>0){// 得到将要打开的前一个文件名并且打开CString sNewFilename(sFilename.Left(nFind)+"\\"+sTitle+".txt");AfxGetApp()->OpenDocumentFile(sNewFilename);}}elseAfxMessageBox("没有上一文件了!");}void CReaderView::OnNext(){CString sFilename(GetDocument()->GetPathName());// 得到当前打开文档的路径名CString sTitle(GetDocument()->GetTitle()); // 得到当前打开文档的文件名int nTitle=atoi(sTitle);if(nTitle>0){sTitle.Format("%d",nTitle+1);int nFind=sFilename.ReverseFind('\\');if(nFind>0){// 得到将要打开的后一个文件名并且打开CString sNewFilename(sFilename.Left(nFind)+"\\"+sTitle+".txt");AfxGetApp()->OpenDocumentFile(sNewFilename);}}elseAfxMessageBox("没有下一文件了!");}5, 设置自动滚动屏幕功能:(1)在视图类中添加成员变量private:int m_nScroll; //滚动行数UINT_PTR m_nTimer; //定时器中断句柄(2)初始化成员变量CReaderView::CReaderView():m_nScroll(1) {}(3)重载视图类的OnCreate 函数:int CReaderView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CEditView::OnCreate(lpCreateStruct) == -1)return -1;m_nTimer=SetTimer(1,3000,NULL);// 设置定时中断并且存储中断句柄return 0;}(4)重载视图类的OnDestroy()void CReaderView::OnDestroy(){CEditView::OnDestroy();this->KillTimer(m_nTimer);//根据中断句柄关闭定时中断}(5)WM_TIMER 消息处理函数OnTimer(UINT nIDEvent):void CReaderView::OnTimer(UINT nIDEvent){GetEditCtrl().LineScroll(m_nScroll);// 滚动设定的行数CEditView::OnTimer(nIDEvent);}6, 菜单设计及处理:(1)(2)“滚动设置”对话框IDD_DIALOG_SCROLL ,并为其构建新类CscrollDlg ,为滑Visual C++ WangDemi 2006-10-26块控件邦定变量CSliderCtrl m_Slider;和int m_nScroll;(3)修改BOOL CScrollDlg::OnInitDialog(){CDialog::OnInitDialog();m_Slider.SetRange(1,5); // 设定滑块范围为1-5m_Slider.SetPos(m_nScroll); // 设定滑块当前值return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }(4)修改void CScrollDlg::OnOK(){this->m_nScroll=this->m_Slider.GetPos(); //得到当前滑块值CDialog::OnOK();}(5)菜单[滚动设置ID_SCROLL_SET]的处理函数:void CReaderView::OnScrollSet(){CScrollDlg dlg;dlg.m_nScroll = this->m_nScroll;if(dlg.DoModal()==IDOK){ // 如果点击OK的话更改自动滚动的行数this->m_nScroll=dlg.m_nScroll;}}7,程序运行结果。
VC单文档中画图

3. 创 建 一 个 对 话 框 ( Setting ) 用 来 设 置 画 图 的 线 宽 。 同 时 在 ResourceView 中添加一个成员变量用来保存线宽。 添加一个静态文本以及一个编辑框。如图
为该对话框添加命令响应 当单击设置的时候,弹出 Setting 对话框对线宽进行设置。当再次打 开线宽设置的时候,保存上次所设置的线宽 void CGraphicView::OnSetting() {
m_nDrawType=3; }
void CGraphicView::OnEllipse() {
// TODO: Add your command handler code here m_nDrawType=4; } 开始画图要为鼠标左键按下和鼠标左键弹起添加 Windows Message Handler
鼠标左键按下去画图时我们要保存一个点。故添加一个成员变量来保 存这个点,并初始化。 CGraphicView::CGraphicView() {
// TODO: add construction code here m_nDrawType=0;//初始化画图类型 m_ptOrigin=0;//初始化鼠标左键原点 m_nLineWidth=0;//初始化线宽 } void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_ptOrigin=point; CView::OnLButtonDown(nFlags, point); } 鼠标左键弹起,画图 在前面添加了命令响应,m_nDrawTyoe=1 时,画图为点,2 为直线, 3 为矩形,4 为椭圆。下面,利用 switch 语句进行画图。 void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this);//创建画图 dc 对象
VC程序设计任务书及标准封面

武汉科技大学机械自动化学院2009.9任务一开发一个计算器程序1. 软件功能与目标开发一个计算器软件,要求是基于对话框的应用程序,至少具有加、减、乘、除四个基本功能。
在此基础上扩展平方、开方、三角函数等功能。
2. 具体要求(1)使用Visual C++ 的MFC开发一个基于对话框的应用程序软件;(2)要有数据输入和结果显示窗口(或者数据的输入和显示共用一个窗口);(3)对话框字体采用“楷体”小四号字体;(4)窗口要有“最小化”按钮,同时屏蔽掉“最大化”按钮;(5)界面上设置一个按钮,点击后弹出一个消息窗口,显示软件开发者的姓名、班级、学号等信息,按钮位置自定;(6)要求界面美观、操作方便,风格自定。
3. 软件设计说明书撰写要求软件设计说明书应按规定要求和格式撰写。
(1)软件目标:说明所开发软件的目标和具体功能;(2)软件设计:基于何种模式开发;基本操作流程;何种界面风格;软件功能模块等简要说明;(3)实现过程:根据照软件开发的过程按步骤分条叙述,界面上设置的控件应说明其控件ID号,主要属性,对应的变量名称与类型;自定义的函数、消息映射等应说明;实现过程中的主要代码应列出;(可参考上课所讲例题的流程)(4)软件界面:给出1~2幅软件最终界面截屏图片。
4. 软件提交存档将最终软件源程序与可执行文件打包后统一提交至任课老师处。
任务二开发一个画图程序1. 软件功能与目标开发一个画图软件,要求是基于单文档或多文档的应用程序,能绘制点、直线、矩形、圆、椭圆等基本几何图形。
在此基础上扩展多边形、扇形、贝赛尔曲线以及文字输出等功能。
2. 具体要求(1)使用Visual C++ 的MFC开发一个基于单文档或多文档的应用程序软件;(2)(可选项)如果是多文档,要求具有切分窗口,其中一侧窗口为数据显示及输入窗口,另一侧窗口为图形显示窗口,且两个窗口的大小均能动态改变;(3)程序要能够绘制点、直线、矩形、圆、椭圆等基本几何图形;(4)既可以从菜单中点击子菜单项来绘制图形,也可以从对应的工具栏按钮中点击按钮进行绘制;(5)在状态栏中显示当前操作命令;(6)在程序“帮助”菜单的“About”对话框中用静态文本控件显示软件开发者的姓名、班级、学号等信息;(7)要求界面美观、操作方便,界面风格自定。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材 VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室)计算机应用教研室课时授课计划课次序号:一、课题: ch5 单文档程序编程(1)字体与绘图二、课型:讲授三、目的要求:1、理解设备环境类CDC及其派生类的功能与使用方法。
2、理解图形设备接口GDI类的功能及使用方法。
3、学会字体设置和文本输出。
4、学会简单的图形绘制方法。
四、重点、难点:重点容:字体设置与文本输出、图形绘制。
难点:正确理解CDC类和GDI类的功能与使用方法。
五、教学方法及手段:采用案例教学,在实例中理解CDC类和GDI类的使用,重点讲解其中的几个功能,其他的要求学生课下逐步深入学习,达到举一反三的目的。
六、参考资料:《VC++实用教程》(第二版)阿奇编著,电子工业第8章《C++面向对象程序设计》涛编著,高等教育,第10章七、作业:简答:习题5.1 , 5.2 , 5.6设计:(1) 5.9(2)单文档实验容1:编写单文档应用程序,当用户双击鼠标左键时,能在客户区画一个椭圆,并用45度交叉线填充。
八、授课记录:九、授课效果分析:十、教学进程(教学容、教学环节及时间分配等)1、复习单文档应用程序的特点:应用程序类、主框架类、文档类、视图类文档与视图的关系2、导入课题如何再单文档窗口中按照需要输出文本、绘制图形呢?利用CDC类和GDI接口类,它封装了绘图所需要的所有函数,是用户编写图形和文字处理程序必不可少的。
3、教学容ch5.1 概述一、设备环境类:1、CDC类:设备环境是Windows保存的一个数据结构,该结构包含应用程序向设备输出时所需要的信息,例如图形是在屏幕上输出还是在打印机上输出。
为了让用户使用一些特殊的设备环境,MFC还提供了CDC类的派生类,CPaintDC、CClientDC、CwindowDC、 CmetaFileDC其中,前两个较常用。
2、CDC类的主要功能:SelectObject():选择绘图对象,返回被替代的对象的指针,常用于选择画笔、画刷、字体、图片等。
MoveTo():移动当前位置LineTo():从当前位置画线Ellipse():画椭圆TextOut():用当前字体在指定位置输出文本二、颜色和颜色对话框的使用绘图和显示文本时都要按照指定的(或默认的)颜色执行。
常用的颜色空间右RGB和YUV两种。
其中,RGB颜色空间选用红、绿、蓝三种颜色的分量配比来表示,即三基色原理。
而YUV颜色空间用亮度(Y)和色差(V、U)表示。
在MFC中采用RGB颜色空间。
编程设置颜色的方法有两种:方法一、通过程序代码直接设置,比如可以将颜色表示为:RGB(int r,int g,int b); 或 COLORREF clr;方法二、利用MFC的颜色对话框选择设置:MFC的CColorDialog类提供了颜色选择通用对话框,供用户选择颜色。
具体用法: CColorDialog dlg;If(dlg.DoModal==IDOK)COLORREF myColor=dlg.GetColor();颜色对话框举例:在单文档视图中用选定的颜色输出一句话“这是我自己选的颜色!”。
实现:在单文档程序的视图类的OnDraw()中添加如下代码:void CEx_colordlgView::OnDraw(CDC* pDC){ CEx_colordlgDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCOLORREF myColor;CColorDialog dlg;if(dlg.DoModal()==IDOK)myColor=dlg.GetColor();pDC->SetTextColor(myColor); //设置文本的颜色值pDC->TextOut(20,50," 这是我自己选的颜色!");}若改用RGB()直接设置:COLORREF myColor =RGB(0,0,250);则文字以蓝色显示。
三、通用对话框使用说明:MFC提供了许多通用对话框类,比如颜色设置对话框、字体设置对话框(CFontDialog)、查找替换对话框(CFindReplaceDialog)、打印对话框(CPrintDialog)、页面设置对话框(CPageSetupDialog)、文件对话框(CfileDialog,打开或保存文件)。
[它们的使用方法类似,课下尝试练习]ch5.2 字体一、字体的结构与字体类:1、字体结构中包含了字体的属性,比如高度、宽度、相对页面的角度、重量(如粗体)、斜体、下划线、删除线、字符集、字体名称等。
详见教材P174结构体LOGFONT的定义。
[熟悉或了解即可]2、字体类:Cfont3、字体对象的使用步骤:[同GDI对象,包括定义字体对象、创建字体对象、选入设备环境、使用、删除、恢复等]二、创建字体对象的方法:1、在程序中设定字体的各个属性值,利用CreateFont(); 创建字体对象。
比如,5.1.3示例 P182~183 [要求:了解使用方法]2、调用字体设置对话框类取的用户选择的字体,保存在LOGFONT类型的变量中,然后调用CreateFontIndirect(const LOGFONT *lpLF);创建字体对象。
3、CreatePointFont(); //简单方法,只能设定字体大小三、字体应用:功能:在单文档程序的客户区双击鼠标,在鼠标指定位置按照设定的字体显示一句话“字体随意设,简单吧!”。
其中,字体设置功能是通过在主菜单中添加一个菜单项“字体设置”,单击该菜单项,打开字体设置对话框,共用户设置字体、字号等属性。
单击确定后新的字体有效。
实现方法:(1)创建单文档应用程序ex_font(2)在视图类中添加变量:LOGFONT m_lfText;int m_xPos, m_yPos; //表示当前鼠标点击的坐标(3)添加菜单项:在资源视图中打开Menu 资源中的IDR_MAINFRAME,在最后的空白项上右击,添加一个新菜单项的名称、ID号(ID_FONT_TEST)。
(4)在类向导中为新的菜单项添加COMMAND命令映射函数:OnFontTest() void CEx_fontView::OnFontTest(){ // TODO: Add your command handler code hereCFontDialog dlg;if(dlg.DoModal()==IDOK)dlg.GetCurrentFont(&m_lfText); //获取当前选择的字体对象}}(5)在类向导中添加视图类双击鼠标的WM_LBUTTONDBLCLK消息映射函数:void CEx_fontView::OnLButtonDblClk(UINT nFlags, CPoint point){ // TODO: Add your message handler code here and/or call defaultm_xPos=point.x;m_yPos=point.y;Invalidate(); //调用OnDraw()重画窗口CView::OnLButtonDblClk(nFlags, point);}(6)在视图类的OnDraw()中添加代码:CFont cf; //定义字体对象cf.CreateFontIndirect(&m_lfText); //创建字体CFont * oldFont=pDC->SelectObject(&cf); //选定字体到当前设备环境pDC->TextOut(m_xPos,m_yPos," 字体随意设,简单吧!"); //输出文本cf.DeleteObject(); //删除字体对象pDC->SelectObject(oldFont); //恢复原来的字体(7)运行:单及“字体设置”,设置字体,然后双击客户区。
反复进行。
小结:字体的使用方法(定义字体对象、创建字体对象、选入设备环境、使用、删除、恢复等),结合实例理解并熟练掌握。
ch5.3 简单图形绘制Windows系统为应用程序的绘图操作提供了一个图形设备接口,用于处理来自应用程序的图形函数调用。
一、图像设备接口GDIMFC将各种绘图工具(如画笔、画刷、字体等)封装成GDI类,比如:CPen CBrush CFont CBitmap Cpalette CRgn二、使用GDI对象绘图的步骤:(1)定义一个GDI对象,比如:CPen m_pen;(2)调用该对象的成员函数创建对象,比如:m_pen.CreatePen(PS_SOLID,2,RGB(0,0,0)); //创建画笔(3)将该对象选入当前设备环境中,同时注意保存原来GDI对象。
比如:CPen * pOldPen=pDC->SelectObject(&m_pen);(4)绘图结束后,恢复当前设备环境中原来的GDI对象。
比如:pDC->SelectObject(pOldPen);三、画笔的创建:CPen::CreatePen(int nPenStyle, int nWidth, COLORREF crColor)参数1:画笔的风格,如实线、虚线、点线等。
参数2:线宽参数3:颜色四、画刷的创建1、//创建固定颜色的画刷BOOL CBrush::CreateSolidBrush(COLORREF crColor);2、创建指定颜色和风格的画刷BOOL CBrush:: CreateHatchBrush(int nIndex,COLORREF crColor);// nIndex指定画刷的风格,如HS_VERTICAL为垂直阴影线3、创建以8*8位图为模板的画刷BOOL Cbrush::CreatePatternBrush(Cbitmap * pBitmap);五、应用GDI实现简单的绘图:功能要求:在单文档程序主菜单中添加“画刷”、“画笔”两个菜单项,当单击“画刷”时,在客户区画一个椭圆(垂直阴影线填充);当单击“画笔”时,在客户区画实线。
实现过程:(1)创建单文档程序ex_pen_brush(2)在资源视图中为IDR_MAINFRAME主菜单资源添加菜单项(名称、ID:ID_PEN、ID_BRUSH)(3)在视图类中添加一个用于识别“画笔”和“画刷”菜单项的变量:enum {PEN,BRUSH}m_GdiType;(4)在视图类中添加两个菜单项的命令函数:void CEx_pen_brushView::OnBrush(){ m_GdiType=BRUSH; Invalidate(); }void CEx_pen_brushView::OnPen(){ m_GdiType=PEN; Invalidate();}(5)在OnDraw()函数中添加绘图代码:CPen newPen,*pOldPen; //定义画笔对象switch(m_GdiType){case PEN:newPen.CreatePen(PS_SOLID,2,RGB(0,0,255)); //创建画笔pOldPen=pDC->SelectObject(&newPen);pDC->MoveTo(20,20);pDC->LineTo(300,20);pDC->SelectObject(pOldPen); //恢复系统画笔break;case BRUSH:CBrush newBrush, *pOldBrush;newBrush.CreateHatchBrush(HS_VERTICAL,RGB(0,255,255));pOldBrush=pDC->SelectObject(&newBrush);pDC->Ellipse(40,40,300,300);pDC->SelectObject(pOldBrush);}(6)运行。