VC++单文档程序的设计(1)

合集下载

vc模板制作教程

vc模板制作教程

vc模板制作教程
当制作VC模板时,可以遵循以下教程来创建一个没有标题的
模板,并确保文中不存在重复的标题文字。

1. 打开VC模板编辑软件,如Adobe After Effects或Final Cut Pro等。

2. 创建一个新的项目,并选择适合的分辨率和帧速率。

3. 在画面中央或其他合适位置放置一个适当大小的文本框,用于显示标题。

4. 在文本框中输入要显示的标题文本。

5. 适当调整文本框的大小和位置,以确保标题显示在合适的位置。

6. 根据需要选择合适的字体、字号和颜色,以使标题看起来吸引人且容易阅读。

7. 使用软件的动画功能,如缩放、淡入淡出、滚动等,为标题添加一些动态效果,增加视觉吸引力。

8. 可以添加背景、图像、视频片段或其他视觉元素来进一步增强模板的效果。

9. 调整动画的速度和时长,确保标题的显示时间在合适的范围内。

10. 导出模板为视频文件或其他可用格式,以便在需要时使用。

使用这个教程,你可以制作一个没有标题的VC模板,并避免
在文中出现重复的标题文字。

记住,模板的创意和设计可以根据个人喜好和需求进行调整和修改。

第八章 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做文本编辑器(单文档模式)

用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# 软件开发基础

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单文档例子以下是一个简单的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篇:图书阅读器

【初学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单文档中画图

VC单文档中画图
dc.SelectObject(pBrush); 这两行的代码就可以实现这样的效果。
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程序设计任务书及标准封面

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)要求界面美观、操作方便,界面风格自定。

程序设计相关概念CCVC及VC使用

程序设计相关概念CCVC及VC使用
采用自顶向下逐步细化采用自顶向下逐步细化面向对象程序设计方法面向对象程序设计方法当当cc程序达到一定的规模程序达到一定的规模2500025000行以上行以上后维护修改相后维护修改相当困难引入了面向对象程序设计的内容当困难引入了面向对象程序设计的内容c汇编语言
程序
要让计算机按照人们的愿望工作,必须由人们事先 编制好程序,并输入到计算机,让计算机执行程序 才能产生相应的操作结果。
12
C语言
C语言是国际上广泛流行的高级语言。 系统软件、应用软件
1973年贝尔实验室的D.M.Ritchie ,设计出了C语 言,并用之改写了原来用汇编编写的UNIX。
1978年影响深远的名著《The C Programming Language》由 Brian W.Kernighan和Dennis M.Ritchie 合著,被称为标准C。
35
程序执行后,屏幕切换到输出结果的窗口,显 示输出结果。
第1行: 程序的输出 第2行:是VC++在输出完运行结果后由VC++6.0系统 自动加上的一行信息,通知用户∶“按任何一键以便 继续”。
36
计算圆面积
37
38
计算圆周长
#include <stdio.h> #define PI 3.1416 void main() {
每个逻辑步骤有可实现的语句来完成(可行性); 每个步骤间的关系是唯一的(确定性); 算法要能终止(防止死循环)(有穷性)。
3
算法的表示 ➢ 自然语言 ➢伪 代 码 ➢ 图形工具——流 程 图
4
程序流程图
概念:以特定的图形符号加上说明,表示算 法的图 ,称为流程图或框图。
符号及其意义:
流程线

VC++中MFC生成单文档程序详细过程

VC++中MFC生成单文档程序详细过程

实验内容:
� � � 按前面所学的编码规范进行程序编写 将前面基于控制台的应用程序改为基本桌面的应用程序 可采用基于对话框的应用程序也可采用基于单文档的应用程序
图书管理系统参考界面
- 11 -
一. 快速建立 MFC 应用:
在VC6.0 的集成开发环境的“File”菜单下有“New”命令,用来建立各种新的内容。 选择“File”菜单下的“New”命令,弹出“New”对话框,如图1-1 所示。
-1-
哈尔滨工业大学软件学院
程序设计实践
图 1-1 项目建立窗口
1.选择应用程序界面的类型
在“MFC AppWizard – Step 1”对话框中,主要是选择应用程序界面的类型和应用程序 资源的语言种类,如图1-2 所示。
2.程序编辑管理界面
图 1-3 应用程序编辑窗口 程序说明,在MFC 应用程序的文档/视图结构 � CHelloApp:应用程序类 � CMainFrame:主框架窗口类 � CHelloDoc:文档类,文档类用来完成应用程序数据的存取工作。 � CHelloView:视图类, 视图类完成显示数据和与使用者交互的工作。s � CAboutDlg:版本信息对话框类 。 InitInstance()函数最后的工作就是显示和更新应用程序的窗口。 如果InitInstance() 函数中所有的初始化工作均正确地进行,函数将返回TRUE。在执行完初始化工作后,应用程 序将进入消息循环,接收和处理系统发送来的各种消息,直到应用程序被关闭。 ※ 详细信息请参考“VC++简明教程.PDF”文件中第29-39页。 下面是自动生成的程序运行界面。
如图 3-1 程序运行界面 2.获取编辑框中输入的内容 有两种方式获取文本,一种是通过定义变量的方式,另一种是直接使用命令。下面简单 说一下直接使用命令的方式。

MFC单文档窗体类的创建过程

MFC单文档窗体类的创建过程

MFC单文档窗体类的创建过程MFC(Microsoft Foundation Classes)是微软公司提供的一种面向对象的程序开发工具,用于简化Windows操作系统的应用程序开发。

MFC 提供了丰富的类库和框架,使开发人员能够更快速地创建Windows程序。

在MFC中,窗体类是常用的一种类,用于创建窗体应用程序。

本文将详细介绍MFC单文档窗体类的创建过程。

在MFC中,创建单文档窗体类的过程可以分为以下几个步骤:1.创建一个新的MFC应用程序项目首先,需要使用MFC应用程序向导创建一个新的MFC应用程序项目。

打开Visual Studio,选择“文件”->“新建”->“项目”,在“新建项目”对话框中选择“Visual C++”->“MFC”->“MFC应用程序”,并填写项目名称和保存路径,点击“确定”按钮。

接下来,按照向导的指引,选择“单文档”应用程序类型,并点击“完成”按钮。

2.添加对话框资源在MFC应用程序项目创建完成后,需要添加对话框资源。

在资源视图中,选择“添加”->“资源”->“对话框”,在弹出的对话框中输入对话框名称,并点击“确定”按钮。

此时,会自动生成一个对话框资源,可以在其中添加所需的控件。

3.创建窗体类在MFC应用程序项目中,会自动生成一个CWinApp类和一个CMainFrame类。

我们需要创建一个新的窗体类,用于承载对话框资源。

在Solution Explorer中,右击“源文件”->“添加”->“类”,在弹出的“添加类”对话框中选择“MFC”->“MFC类”->“单文档视图”,并填写类名称和保存路径,点击“添加”按钮。

此时,会自动生成一个新的窗体类,可以在其中添加处理逻辑。

4.修改窗体类代码打开新生成的窗体类的头文件和源文件,可以看到自动生成的代码。

在头文件中,需要包含所需的头文件,并声明成员变量和成员函数。

在源文件中,需要实现窗体类的构造函数、析构函数和其他成员函数。

单文档应用程序

单文档应用程序

单文档多文档1.CMainFrame类是MFC的CFrameWnd类的派生类,它主要负责创建标题栏、菜单栏、工具栏和状态栏。

AssertValid 诊断CMainFrame对象是否有效,调试用。

Dump 输出CMainFrame对象的状态信息,调试用。

Oncreate 创建工具栏和状态栏。

视图窗口是由基类Cframewnd的成员函数oncreate通过调用oncreateclient函数创建。

2. Doc文档是MFC的cdocument类的派生类,他主要负责应用程序数据的保存和装载,实现文档的序列化功能。

OnNewDocument 当用户执行File菜单中New命令时,MFC应用程序框架会调用此函数来完成新建文档的工作。

Serialize 负责文档数据的磁盘读写操作。

注意:由于单文档应用程序只处理一个文档对象,当执行New命令时,文档对象已经生成,因此文档类的构造函数不会再调用,所以不会在构造函数中进行文档对象成员变量的初始化,而应在OnNewDocument函数中。

在重载时首先需要调用基类CDocument的OnNewDocument函数。

3.View视图是负责客户区文档数据的显示,以及如何进行人机交互(从CDocument派生的类接受信息并向用户显示,同时用户的输入信息通过它向由CDocument派生的类传递)。

GetDoument 用于获取当前文档对象的指针OnDraw 虚函数,扶着文档对象的数据在用户视图区的显示输出。

4.WinMain函数5.Mfc应用程序运行机制调用CWinApp的构造函数-》程序入口函数winmain接受控制-》WinMain函数调用应用程序类的InitInstance函数-》WinMain函数今天消息循环-》程序终止。

单文档实现多视图

单文档实现多视图
Step 1:使用VC 6.0新建一个Project,命名为:MultiView。除选择单文档属性外,一切使用“默认”方式。于是你可以获得五个类:CMainFrame,CMultiViewApp,CMultiViewDoc,CMultiViewView,和CAboutDlg;
Step 2:新建一个新的视图View,添加一个新的MFC Class(Insert->New Class),基类为CView(或者CView的派生子类,如CEditView等)。类的名字为CAnotherView,这就是新的视图;并为CAnotherView添加GetDocument的实现:
{
// TODO: Add your command handler code here
UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID);
::SetWindowLong(m_pAnotherView->m_hWnd, GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID));
void CMultiViewApp::OnShowFirstview()
{
// TODO: Add your command handler code here
UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID);
::SetWindowLong(m_pAnotherView->m_hWnd,GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID));

VC++程序设计大作业之绘制矩形

VC++程序设计大作业之绘制矩形

武汉轻工大学VC++程序设计大作业鼠标点击绘制矩形院系电气与电子工程学院班级学号 1204姓名日期 2013.11.221题目编写MFC下的单文档程序,通过鼠标点击选择两个点,作为矩形左上角、右下角,然后绘制矩形。

(对应12题)2思路首先点击鼠标,选中左上角,然后拖动鼠标,在右下角拿起,这样矩形就就可以实现了。

3程序实现过程首先建立MFC单文档程序然后建立类向导添加鼠标事件添加CPoint成员变量m_OrigPoint4关键代码// RectangleView.cpp : implementation of the CRectangleView class //#include "stdafx.h"#include "Rectangle.h"#include "RectangleDoc.h"#include "RectangleView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CRectangleViewIMPLEMENT_DYNCREATE(CRectangleView, CView)BEGIN_MESSAGE_MAP(CRectangleView, CView)//{{AFX_MSG_MAP(CRectangleView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CRectangleView construction/destructionCRectangleView::CRectangleView(){// TODO: add construction code here}CRectangleView::~CRectangleView(){}BOOL CRectangleView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////// // CRectangleView drawingvoid CRectangleView::OnDraw(CDC* pDC){CRectangleDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data here}///////////////////////////////////////////////////////////////////////////// // CRectangleView printingBOOL CRectangleView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CRectangleView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) {// TODO: add extra initialization before printing}void CRectangleView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}///////////////////////////////////////////////////////////////////////////// // CRectangleView diagnostics#ifdef _DEBUGvoid CRectangleView::AssertValid() const{CView::AssertValid();}void CRectangleView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CRectangleDoc* CRectangleView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRectangleDoc)));return (CRectangleDoc*)m_pDocument;}#endif //_DEBUG///////////////////////////////////////////////////////////////////////////// // CRectangleView message handlersvoid CRectangleView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultthis->m_OrigPoint=point;CView::OnLButtonDown(nFlags, point);}void CRectangleView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);dc.Rectangle(CRect(m_OrigPoint,point));CView::OnLButtonUp(nFlags, point);}5输入输出情况及截图6总结体会通过前期对VC++的学习和这次大作业,我对VC++有了进一步的认识,而且熟悉了如何建立单文档程序,多文档等程序,对Visual C++ 6.0 开发环境有了进一步了解,最重要的一点是我知道自己还有很多VC++知识要学,目前学到的知识只是一点皮毛而已,以后一定会更加努力,虽然VC++不是我的专业课,我们对它的要求也不是特别高,但是我觉得我以后还是会学一学这个的,多掌握一门编程语言,而且VC++在图形化编程里面用的还是比较广泛的,对我们的未来的发展只有好处,没有坏处!。

C语言程序设计 文档

C语言程序设计 文档

是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。

显然,在HLL平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。

HLL中又因C语言的可移植性最佳而成为首选。

因此,支持C语言几乎是所有微控制器设计的一项基本要求。

µ‟nSP™指令结构的设计就着重考虑了对C语言的支持。

GCC是一种针对µ‟nSP™操作平台的ANSI-C编译器,1 µ’nSP™支持的C语言算逻操作符(#)在µ‟nSP™的指令系统算逻操作符与ANSI-C算符大同小异,见表4.6。

2 C语言支持的数据类型µ‟nSP™支持ANSI-C中使用的基本数据类型如表4.7所示。

3 程序调用协议由于C编译器产生的所有标号都以下划线(_)为前缀,而C程序在调用汇编程序时要求汇编程序名也以下划线( _ )为前缀。

模块代码间的调用,是遵循µ‟nSP™体系的调用协议(Calling Convention)。

所谓调用协议,是指用于标准子程序之间一个模块与另一模块的通讯约定;即使两个模块是以不同的语言编写而成,亦是如此。

调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则。

调用协议包括以下一些相关要素:1) 调用子程序间的参数传递;2) 子程序返回值;3) 调用子程序过程中所用堆栈;4) 用于暂存数据的中间寄存器。

µ‟nSP™体系的调用协议的内容如下:1. 参数传递参数以相反的顺序(从右到左)被压入栈中。

必要时所有的参数都被转换成其在函数原型中被声明过的数据类型。

但如果函数的调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据类型转换的。

2. 堆栈维护及排列函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。

VC语言程序设计第4次实验_菜单、工具栏和状态栏

VC语言程序设计第4次实验_菜单、工具栏和状态栏
(6)保留默认的ID号IDC_CURSORI,用图形编辑器绘制光标图形,指定光标热点位置为(15,15)设计的光标如图T12.4所示。
5.工具按钮的更新
工具按钮的更新有如下步骤。
(1)为CMainFrame类添加一个BOOL型的成员变量m_bIsTest,在CMainFrame类构造函数中将m_bIsTest的初值设为FALSE
return TRUE;
}
(5)编译运行,看看主框架窗口的大小是否为屏幕的1/4大小,且移动到屏幕的右上角。
3.添加并设计一个工具按钮
添加并设计一个工具按钮的具体步骤如下。
(1)将项目工作区窗口切换到ResourceView页面,双击“Toolbar”项中的IDR_MAINFRAME,打开工具栏资源。
(2)在字符串列表的最后一行的空项上双击鼠标左键,弹出一个对话框,在该对话框中,指定一个字符串标识符ID_TEST_PANE,设置字符串值为“你在(1024,1024)处双击鼠标”,注意该字符串的字符个数将决定添加的状态栏窗口的大小。添加一个字符串资源的结果如图T12.5所示。
(3)关闭字符串属性对话框。
BOOL CmainFrame::onSetCursor(CWnd*pWnd,UINT nHitTest,UINT message)
{
BOOL bRes=CframeWnd::OnSetCursor(pWnd,nHitTest,message);
if(nHitTest==HTCLENT)&&(m_bIsTest))
Str.Format(“你在(%b,%d)处双击鼠标,”point..x,point.y);//格式化文本
else
Str.EmptyO;//为空字符

单文档加控件方法VC++

单文档加控件方法VC++

单文档加控件方法VC++单文档不能像对话框一样用鼠标拖控件来添加控件要在单文档中添加控件要用代码实现,函数用Create.举个例子:添加一个按钮控件1.在View类的头文件中定义个ID号:#define IDC_DYNAMICBUTTON 10012.加入成员变量public:CButton m_button;3.在OnCreate函数加创建按钮和列表框int CStyleView::OnCreate(LPCREATESTRUCT lpCreateStruct) {....// TODO: Add your specialized creation code here//创建按钮m_button.Create(//按钮标题"i am a dynimic button",//按钮风格WS_CHILD|WS_VISIBLE|WS_BORDER,//按钮大小CRect(300,40,500,80),//按钮父指针this,//该按钮对应的ID号IDC_DYNAMICBUTTON);....}4.添加处理函数//{{AFX_MSG(..)afx_msg void OnClickButton(); //按钮消息处理函数//}}AFX_MSGBEGIN_MESSAGE_MAP(...)ON_BN_CLICKED(IDC_DYNAMICBUTTON,OnClickButton) //按钮ON_BN_CLICKED消息的处理函数OnClickButton//}}AFX_MSG_MAP//现在就可以给这个按钮添加你要实现功能的代码了void CStyleView::OnClickButton(){AfxMessageBox("按钮被点到了!");}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)运行。

相关文档
最新文档