最新VC++6.0使用MFC创建应用程序框架操作步骤
- 格式:ppt
- 大小:2.10 MB
- 文档页数:7
一走进Visual C++Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。
Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。
本光盘教学软件的目的就是为了让你学会在Visual C++环境下,利用微软的基本类库MFC开发出功能强大的Windows应用程序。
在本章节的内容当中,我们将向您介绍使用VC开发软件需要用到的一些基本概念,使用MFC进行编程的基本特点,以及VISUAL C++集成开发环境提供的一系列编程辅助工具——WIZARD的使用方法。
1 理解VC工程Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。
在使用Visual C++开发应用程序的过程中,系统为我们生成了大量的各种类型的文件,在本节中将要详细介绍Visual C++中这些不同类型的文件分别起到什么样的作用,在此基础上对Visual C++如何管理应用程序所用到的各种文件有一个全面的认识。
首先要介绍的是扩展名为dsw的文件类型,这种类型的文件在VC中是级别最高的,称为Workspace文件。
在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它们进行统一的协调和管理。
与dsw类型的Workspace文件相配合的一个重要的文件类型是以opt为扩展名的文件,这个文件中包含的是在Workspace文件中要用到的本地计算机的有关配置信息,所以这个文件不能在不同的计算机上共享,当我们打开一个Workspace文件时,如果系统找不到需要的opt类型文件,就会自动地创建一个与之配合的包含本地计算机信息的opt文件。
上面提到Project文件的扩展名是dsp,这个文件中存放的是一个特定的工程,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。
VC6的使用流程1. 准备工作在开始使用VC6进行开发之前,需要准备以下工作:•安装VC6软件,确保已经正确安装。
•确保已经安装了适当的编译器和调试器。
•确保已经安装了所需的库文件和依赖项。
2. 创建项目VC6中创建项目的方法如下:1.打开VC6软件。
2.在菜单栏中选择“文件” -> “新建” -> “项目”。
3.在弹出的对话框中选择“Win32应用程序”或其他合适的模板。
4.输入项目的名称和保存路径。
5.点击“确定”按钮创建项目。
3. 设置项目属性在创建项目后,需要设置项目的属性以满足开发需求。
以下是设置项目属性的一般步骤:1.在VC6的“项目视图”中,选择项目文件。
2.在菜单栏中选择“项目” -> “设置”。
3.在弹出的对话框中,选择需要设置的属性,如“C/C++”、“链接器”等。
4.根据需求进行属性设置,例如指定包含目录、库文件路径等。
5.点击“确定”按钮保存设置。
4. 编写代码在VC6中,可以使用C或C++语言编写代码。
以下是编写代码的一般步骤:1.在“资源视图”中,选择需要编辑的源文件。
2.在代码编辑器中编写代码。
3.可以使用VC6提供的自动完成、语法高亮等功能来提升编码效率。
4.完成代码编写后,保存文件。
5. 编译和调试在代码编写完成后,可以进行编译和调试。
以下是编译和调试的一般步骤:1.在菜单栏中选择“生成” -> “全部重新生成”或“生成” -> “生成解决方案”。
2.编译器将会编译代码,并生成可执行文件。
3.在VC6中可以进行单步调试、断点设置等操作,以便于调试代码。
4.调试完成后,可以查看调试结果并进行必要的修正。
6. 运行和发布在完成编译和调试后,可以运行和发布项目。
以下是运行和发布的一般步骤:1.点击菜单栏中的“调试” -> “开始执行”或使用快捷键F5,运行程序。
2.程序将会在VC6中启动,并在控制台或窗口中显示运行结果。
3.如果需要发布项目,可以通过“生成”菜单中的“发布…”选项来进行发布设置。
第1章Visual C++ 6.0程序设计快速入门Visual C++ 6.0(以下简称VC 6.0)是一个功能强大、对Windows程序进行可视化开发的编程开发环境,是一个相当优秀的集成开发环境(Integrated Developing Environment,IDE)。
它集代码编辑、调试、向导、编译和可视化资源编辑等功能于一体,所提供的MFC 基本类库对Windows API函数做了很好的封装,简化了程序人员的开发过程。
本章简单介绍VC 6.0的开发环境,并演示如何通过MFC应用程序创建向导创建应用程序。
1.1 Visual C++ 6.0开发环境简介VC 6.0集成开发环境的主窗口由标题栏、菜单栏、工具栏、工作区、客户区、输出窗口和状态栏等组成。
主界面如图1.1所示。
`图1.1 VC 6.0集成开发环境标题栏:用于显示应用程序名和当前打开的文件名。
工作区:用于显示当前打开工程的有关信息,包括工程的类、资源以及文件组成等内容。
客户区:用于文本编辑器、资源编辑器等进行文件和资源的编辑。
输出窗口:用于输出编译信息、调试信息和一些查询结果信息等。
状态栏:用于显示菜单栏、工具栏等的简单说明信息以及文本编辑器中当前光标所在的行列号等。
用户可以通过鼠标拖动,将菜单栏、工具栏、工作区、客户区和输出窗口等随意更换第1章 Visual C++ 6.0 程序设计快速入门·3·位置,也可以隐藏其中的某些窗口。
1.2 创建Visual C++ 6.0应用程序本节主要演示如何通过应用程序创建向导创建应用程序,也对MFC 应用程序创建向导可以创建的3种应用程序类型进行了简单的对比。
实例001 创建第一个C++应用程序【实例介绍】 本例通过空项目创建一个普通的C++程序,这个创建过程很重要,对于以后的很多例子,都是基于这种创建方法,也是学习C++语言理论进行实验的基本前提。
【开发过程】(1)创建一个新工作区,单击【文件】-》【新建】菜单,弹出下图所示对话框图1-1 新建工作区对话框在【Workspace name:】标签下的文本框中输入对应的工作区名称(这里输入的是:Chapter1)。
mfc创建项目MFC(Microsoft Foundation Classes)是一种用于开发Windows桌面应用程序的框架。
它提供了包含UI控件、消息处理、文件I/O等功能的库,简化了Windows应用程序的开发过程。
本文将介绍如何使用MFC创建项目,并详细讲解其中的步骤和注意事项。
一、创建MFC项目1. 打开Microsoft Visual Studio(建议使用最新版本),点击“创建新项目”。
2. 在弹出的对话框中,选择“Visual C++”下的“MFC应用程序”模板,并指定项目名称和保存路径。
3. 点击“确定”后,会出现一个向导对话框,用于配置项目的属性。
4. 在向导的第一个页面上,选择“应用程序类型”。
根据实际需求,选择“单文档应用程序”、“多文档应用程序”或“对话框应用程序”等。
5. 在下一个页面上,选择额外的选项,如支持OLE(对象链接与嵌入)或ActiveX控件等。
根据项目需求进行选择。
6. 在接下来的页面上,指定应用程序的名称和窗口类名称,可以保持默认设置。
点击“完成”按钮,Visual Studio会自动生成MFC项目的基本结构。
二、项目结构解析1. MFC项目通常包含以下几个文件夹:Resource Files、Header Files 和Source Files。
- 在Resource Files文件夹中,包含了应用程序的资源文件,如图标、位图、对话框等。
- Header Files文件夹中,保存了头文件(.h文件),其中定义了各种类和函数的声明。
- Source Files文件夹中,保存了源文件(.cpp文件),其中包含了具体的函数实现和代码逻辑。
2. 在MFC项目中,主要的代码逻辑集中在CWinApp类和CWinMain函数中。
- CWinApp类是MFC应用程序的入口类,通过重写CWinApp的虚函数,可以实现应用程序的初始化和退出等操作。
- CWinMain函数是整个应用程序的入口函数,程序在此处开始执行。
1、单击File(文件)菜单,选中New(新建),创建新工程。
2、选择工程栏中MFC AppWizard[exe]应用程序,并命名工程名称为calculator.(如图)3、选择MFC应用程序为“基于对话框”类型,其他选项默认。
单击完成(如图)4、修改界面。
经过前3步骤,VC6.0生成的工作界面如图所示。
先将对话框中的“TODO:在这里设置对话控制”静态文字控件和“确定”按钮控件删除,再使用工具箱将界面拖动控件修改为如图所示的界面。
该图所示是使用工具箱的控件拖放制作的计算器初始界面。
由于这些控件都有默认的名字,所以我们要对控件进行改名,右击Button1按钮,选中Properties(属性)选项以修改控件的属性,如图所示。
在弹出的对话框中,将Button1按钮的Caption(标题)属性修改为“+”,此时初始界面同时变成相应的“+”如下图所示。
修改后的界面如图所示,控件的Caption属性就是控件显示出来的值。
按照前文所讲述的方式,将界面上的按钮控件和静态文本控件的Caption属性都做相应的修改,修改后的界面如图所示。
5、为Edit(编辑)控件添加类的成员变量。
首先,右击Edit控件,选择ClassWizard(建立类向导)选项,如下图所示。
在弹出的对话框中,选择上方MemberVariables选项卡,选中DIC_EDIT1,然后单击单击右侧的Add Variable按钮,如图所示。
单击Add Variable按钮后会跳出,如图所示的对话框,该对话框是设置成员变量的命名和数据类型,在此可以命名为m_data1.注意:控件的ID只是标记一个控件,程序中不能直接控制ID,只能通过修改变量来改变控件的状态。
00相应的,再将另外两个Edit控件命名,本项目就将这3个Edit控件命名为:●IDC_EDIT1:m_data1,类型为double.●IDC_EDIT2:m_data2,类型为double.●IDC_EDIT3:m_result,类型为double.6、添加按钮控件的消息处理函数。
Visual C++6.0操作指南Visual C++6.0强大的操作界面会令人眼花缭乱,但它同样强大的编程工具AppWizard (应用程序向导)的和Class wizard(类向导)使得编程变得非常简单,可视化(Visual)真正体现了面向对象的特征,很多人称之为点击编程,它使程序员的主要精力不是放在美化界面的设计上,而是致力于源代码本身。
这里介绍如何编写——个简单的应用程序,并介绍怎样在对话框窗口中增加一个命令按钮控制。
一、生成一个Hello应用程序生成一个只弹出一个窗口,但无任何实际应用的Hello应用程序。
操作步骤如下:1)进入Visual C++6.0的工作台,如图1所示。
图1 Visual C++6.0的工作界面2)从顶部“File”菜单中选“New”选项,出现一对话框,该窗口中有四个标签:File、Project、Workspace、Other Docments。
3)选择Project 标签,在该页左边的编辑框中选择MFC AppWizard(exe)项,即要用生成一个可执行文件。
4)在Project Name编辑框中输入要创建的工程文件的名字,在此命名为“Hello”。
5)在Location编辑框中选择存放该工程文件的路径和位置。
6)由于这是第一个工程文件,必须创建一个新的工作区,故“Create New Workspace ”选项必须选中。
7)在Platforms编辑框中选择win32。
表示我们使用的Visual C++ 6.0是在32位操作系统下运行的。
8)确定工程文件的类型、名称和路径选项后按OK按钮,就可以开始创建该工程文件了。
见图2所示。
图2 New 对话框下面将在Visual C++6.0 MFC APP Wizard的可视化指导下,根据自已的设计来生成应用程序的工程文件和应用程序的框架文件。
V isual C++6.0显示出—个MFC App Wizard-Step1的窗口,如图3所示。
VC6.0编的“文件读写”的两种方式(MFC和基于对话框)软件实验三:基于对话框的MFC程序实现文件读写操作实例一:操作步骤:1、新建“MFC APPWIZARD(EXE)”,选择文件路径,输入文件名,选择应用程序类型为“基本对话框”,按上图添加各控件2、按下表修改各控件的ID号,添加成员函数和消息函数控件的ID号,选择mumber variables面板,单击add variable按钮,添加成员变量,并选择变量类型。
3、写入文件1)在“基于对话框的文件读写Dlg.h”文件中定义变量(粗体字为此处添加的代码)class CMyDlg : public CDialog{// Constructionpublic://定义变量CString strFileName;//文件名CString strFilePath;//文件路径BOOL IsTextFile(CString& rFile);//判断文件类型是否正确CMyDlg(CWnd* pParent = NULL); // standard constructor………}2)双击下压按钮“写入文件”,编写“写入文件”的消息处理函数void CMyDlg::OnButtonWrite() //单击“写入到文件”按钮{// TODO: Add your control notification handler code hereUpdateData(true);CFile file;CFileDialog filedlg(0,//1-文件打开,0-文件另存为".txt|*.*",NULL,OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);if(filedlg.DoModal()==IDOK)strFileName=filedlg.GetFileName();//获得文件名if(strFileName==""){AfxMessageBox("请输入文件名");return;}file.Open(strFileName,CFile::modeCreate|CFile::modeWrite);//将数据写入文件int length=m_WriteString.GetLength();//获取文件长度file.Write((LPCTSTR)m_WriteString,length);//获取有关文件的信息CString AfxMessageBox("已保存到文件:"+strFileName+"!");//保存结束提示strFilePath=file.GetFilePath();//获得文件的路径file.Close();//关闭文件}4、查看文件路径双击下压按钮“查看文件路径”,编写“查看文件路径”的消息处理函数void CMyDlg::OnButtonFilepath() //查看文件路径{// TODO: Add your control notification handler code herem_FilePath=strFilePath;UpdateData(false);}5、读入文件1)定义判断文件类型是否正确的函数(粗体字为此处添加的代码)class CMyDlg : public CDialog{// Constructionpublic://定义变量CString strFileName;//文件名CString strFilePath;//文件路径BOOL IsT extFile(CString& rFile);//判断文件类型是否正确CMyDlg(CWnd* pParent = NULL); // standard constructor………}2)编写IsTextFile函数BOOL CMyDlg::IsTextFile(CString &rFile)//判断文件类型是否正确{CStringList strList;CString str(rFile);strList.AddHead(".TXT");strList.AddHead(".SYS");strList.AddHead(".BA T");strList.AddHead(".DA T");str=str.Right(4);//文件名的右边四位字符str.MakeUpper();//转换成大写return(strList.Find(str))?TRUE:FALSE;}3)在“基于对话框的文件读写Dlg.cpp”文件开头添加头文件#include "fstream.h"//添加的头文件4)单击下压按钮“读入文件”,编写下压按钮“读入文件”的消息函数void CMyDlg::OnButtonRead(){// TODO: Add your control notification handler code herefstream f1;//定义文件流对象char s[200];CFileDialog filedlg(1,//1-文件打开,0-文件另存为".txt|*.*",NULL,OFN_OVERWRITEPROMPT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);if(filedlg.DoModal()==IDOK){UpdateData(true);strFileName=filedlg.GetFileName();//获得文件名if(!IsTextFile(strFileName))//判断文件类型是否正确{AfxMessageBox("文件类型不正确");return;}f1.open(strFileName,ios::in|ios::nocreate);while(!f1.eof()){f1.getline(s,255);m_strRead=m_strRead+"\r\n"+s;//添加文件中的文本到编辑框UpdateData(false);}AfxMessageBox(strFileName+"文件读入完毕");//保存结束提示f1.close();//关闭文件流}}6、运行程序1)在写入文件的编辑框中输入内容,单击“写入文件”按钮,并可选择路径保存该文件。
在VS2024下如何建立一个MFC应用程序1. 打开Visual Studio 2024、选择“文件”(File)菜单,点击“新建”(New)。
2. 在“新建项目”对话框中,选择“Visual C++”下的“MFC”项目类型。
3. 在右侧面板中选择“应用程序向导(Application Wizard)”。
4. 在“应用程序向导”对话框中,选择“单文档”(Single Document)或“多文档”(Multiple Document)项目类型,然后点击“完成”(Finish)按钮。
5.在下一个对话框中,可以选择MFC应用程序模板的属性,如应用程序名称、位置、解决方案名称等。
在这里可以根据自己的需求进行设置。
6. 点击“确定”(OK)按钮后,Visual Studio将会自动生成MFC应用程序的基本框架。
7. 在应用程序的框架中,可以添加自定义的控件、对话框和功能。
可以通过“视图”(View)菜单添加各种视图类,通过“资源视图”(Resource View)菜单添加资源文件等。
8. 在资源视图中,可以添加菜单、工具栏等界面元素。
可以通过右键点击资源视图中的菜单或工具栏,选择“添加资源”(Add Resource)来添加自定义的菜单或工具栏。
9.通过双击资源视图中的对话框或菜单项,可以添加相应的处理函数。
可以在处理函数中编写相应的逻辑代码。
10. 可以在“解决方案资源管理器”(Solution Explorer)中添加和管理项目所需的文件和资源。
11. 可以通过生成(Build)和调试(Debug)菜单中的选项来构建和调试MFC应用程序。
12.在开发过程中,可以随时保存项目和代码,以便以后继续开发或部署。
以上就是在VS2024下建立一个MFC应用程序的步骤。
在实际开发过程中,还可以根据具体需求添加和修改功能,以满足实际需求。
最全版,亲测版VC6.0生成MFC可执行文件安装包步骤1、需要文件1、VC6.0MFC应用程序所使用的公用代码和库函数大都被包括在了7个DLL动态链接库中(在目录C:\Windows\System32下),生成安装文件后,同时将下列七个DLL文件一同发布给你的客户,就可以了。
2、你只需要发布一个release版本的应用程序abc.exe;3、IntallShield for VC6.0 安装包;2、安装 IntallShield按步骤安装完IntallShield后,再打开VC6.0;进行下列设置以便能在Visual C++6.0的"Tool"菜单中使用"InstallShield Wizard"菜单命令:(1) Visual C++6.0正确安装后,启动Visual C++6.0,并选择"Tools"菜单->"Customize"命令。
图1(2) 在弹出的"Customize"对话框中,切换到"Tools"页面,如图2所示。
图2(3) 将菜单列表项滚动到最后一个空行,并双击鼠标,键入"&InstallShield Wizard",并按Enter键。
(4) 选定刚才键入的菜单列表项,单击Browse按钮(有"..."符号的按钮)将InstallShield所在的Program文件夹下的IsVcWiz.exe调入。
(5) 将"Initial directory"的路径设为IsVcWiz.exe所在的路径,单机Close。
到此InstallShield Wizard安装完毕(特别注意exe所在路径不要包含有中文)。
(6)检查是否安装成功,如图点击Tools菜单下的InstallShield Wizard会弹出你要打包的exe的界面,说明InstallShield Wizard安装成功,接下来进行第下步。
使用MFC操作EXCEL文件本文档适用于:•Microsoft Foundation Classes (MFC), Microsoft Visual C++, 32-bit Editions, version 6.0 以上•Microsoft OLE 库第一步:建立一个自动化工程1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成,工程文件结构如下图:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office的安装目录(通常为C:\Program Files\Microsoft Office\Office),选择EXCEL9.OLB注意,确定后,弹出Confirm Classes窗口,选择列表中的所有类,单击OK按钮。
注意文件名EXCEL9.OLB,因安装的Office版本不同而有所差异,EXCEL9.OLB对应的是Microsoft Office 2000,微软命名方式为Excel+数字的形式,Office版本越高,数字越大。
4.返回编辑器,查看工程文件,可发现多了EXCEL9.H及EXCEL9.CPP两个文件。
5.打开stdafx.h头文件确保包含如下头文件:#include <afxdisp.h>#include "excel9.h"6.打开TestExcel.cpp文件,修改CTestExcelApp::InitInstance(),加入如下代码:BOOL CTestExcelApp::InitInstance(){if( !AfxOleInit() ){AfxMessageBox("初始化Ole出错!");return FALSE;}AfxEnableControlContainer();............return FALSE;}为保证编译时不产生重复定义错误,打开excel9.h文件,在文件开始位置加入如下代码:#if !defined _HEAD_FILE_EXCEL9_#define _HEAD_FILE_EXCEL9_相应的,在文件末尾加入:#endif到此,OLE自动化工程建立完成。
使用MFC AppWizard创建图像处理应用程序基本框架,其步骤如下:(1)打开VC++6.0,从File菜单中选择New菜单项,弹出New对话框。
(2)选择Projects选项卡,从项目类型列表中选择MFC AppWizard(.exe),在Projects Name文本框中输入项目名称,这里设为Dip。
(3)在MFC AppWizard-Step 1对话框中选择MDI用户界面(可同时打开两个或两个以上文档)和中文[中国]。
(4)在MFC AppWizard-Step 6对话框中将CDipView类的基类改为CScrollView以支持视图滚动。
其他各选项采用默认值。
(5)单击Finish按钮,再单击OK,MFC AppWizard将自动生成图像处理程序的各个源文件。
(6)将ImageLoad.dll拷贝到Windows\System32目录。
将ImageErros.h、ImageLoad.h两个头文件及ImageLoad.dll、ImageLoad.lib库文件拷贝到当前工程目录文件里面。
(7)在Fileview-->Dipfiles→右键→Setting→Link→(对象/库模块:)ImageLoad.lib(8)复制DibObject.h和DibObject.cpp到所建的当前工程目录文件里面。
(9)在菜单栏→工程→添加工程→Files→添加DibObject.h,DibObject.cpp,ImageErros.h、ImageLoad.h (10)在Dip.cpp中(#endif 下面)添加:char szFilter[] = "位图文件(*.BMP)|*.BMP|图形交换格式文件(*.GIF)|*.GIF|PCX文件(*.PCX)|*.PCX|TGA 文件(*.TGA)|*.TGA|JPEG文件(*.JPG)|*.JPG|标记图像文件(*.TIF)|*.TIF|所有支持图片|*.BMP,*.GIF,*.PCX,*.TGA,*.JPG,*.TIF|所有文件(*.*)|*.*||";(11)在Dip.cpp中,在// CDipApp中添加菜单命令:ON_COMMAND(ID_FILE_NEW, OnFileNew)ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 得到代码如下:BEGIN_MESSAGE_MAP(CDipApp, CWinApp)//{{AFX_MSG_MAP(CDipApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)ON_COMMAND(ID_FILE_NEW, OnFileNew)ON_COMMAND(ID_FILE_OPEN, OnFileOpen)// NOTE - the ClassWizard will add and remove mapping macros here.(12)在Dip.cpp中,在// CDipApp message handlers下为上述菜单命令添加消息映射函数的代码:void CDipApp::OnFileNew(){// TODO: Add your command handler code here}void CDipApp::OnFileOpen(){static int nIndex = 1;CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;if( FileDlg.DoModal() == IDOK ){CString PathName = FileDlg.GetPathName();PathName.MakeUpper();OpenDocumentFile( PathName );nIndex = (int) FileDlg.m_ofn.nFilterIndex;}}(13)在Dip.h中添加afx_msg void OnFileNew();afx_msg void OnFileOpen();形成以下代码:// Implementation//{{AFX_MSG(CDipApp)afx_msg void OnAppAbout();afx_msg void OnFileNew();afx_msg void OnFileOpen();// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()(14)在DipDoc.cpp预处理指令中添加三个预处理指令:#include "MainFrm.h"#include "ChildFrm.h"#include "DipView.h"(15)在DipDoc.cpp预处理指令后添加外部变量声:extern char szFilter[];(#endif 下面)(16)在DipDoc.cpp中添加菜单命令:ON_COMMAND(ID_FILE_NEW, OnFileNew)ON_COMMAND(ID_FILE_OPEN, OnFileOpen)ON_COMMAND(ID_FILE_SA VE_AS, OnFileSaveAs) 得到以下代码:// CDipDocIMPLEMENT_DYNCREATE(CDipDoc, CDocument)BEGIN_MESSAGE_MAP(CDipDoc, CDocument)//{{AFX_MSG_MAP(CDipDoc)ON_COMMAND(ID_FILE_NEW, OnFileNew)ON_COMMAND(ID_FILE_OPEN, OnFileOpen)ON_COMMAND(ID_FILE_SA VE_AS, OnFileSaveAs)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG_MAPEND_MESSAGE_MAP()(17)在DipDoc.cpp中构建构造函数和析构函数// CDipDoc construction/destructionCDipDoc::CDipDoc(){m_pDibObject = NULL;m_bImageLoaded = FALSE;// TODO: add one-time construction code here}CDipDoc::~CDipDoc(){if(m_pDibObject != NULL){delete m_pDibObject;m_pDibObject = NULL;}}(18)在DipDoc.cpp中添加消息映射函数OnFileNew()和OnFileOpen()的指令内容:// CDipDoc commandsvoid CDipDoc::OnFileNew(){// TODO: Add your command handler code here}//打开图像文件void CDipDoc::OnFileOpen(){static int nIndex = 1;CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;if( FileDlg.DoModal() == IDOK ){CString strPathName = FileDlg.GetPathName();AfxGetApp()->OpenDocumentFile( strPathName );nIndex = (int) FileDlg.m_ofn.nFilterIndex;if( !ReadImgToDoc() ){AfxMessageBox("无法载入图像文件!");return;}}}//另存图像文件void CDipDoc::OnFileSaveAs(){static int nIndex = 1;CFileDialog DialogSaveAs( FALSE, NULL, m_pDibObject->GetImageName(),OFN_HIDEREADONLY, szFilter );DialogSaveAs.m_ofn.nFilterIndex = (DWORD) nIndex;if( DialogSaveAs.DoModal() == IDOK ){CMainFrame *pMainFrame = ( CMainFrame *)AfxGetMainWnd();CChildFrame *pChildFrame = ( CChildFrame *)pMainFrame->MDIGetActive();CDipView *pDipView = ( CDipView * )pChildFrame->GetActiveView();nIndex = (int) DialogSaveAs.m_ofn.nFilterIndex;//是JPEG格式图像,判断其是否为24位真彩色图像if( nIndex == 5 ){if( m_pDibObject->GetNumBits() != 24 ){AfxMessageBox("只有24位真彩色图像才能存为JPEG格式!");return;}}//CDibObject类中有图像才能保存if( m_pDibObject != NULL ){//获取指定的文件名(含路径名)CString strPathName = DialogSaveAs.GetPathName();int nFindIndex = strPathName.Find(".");if( nFindIndex != -1)strPathName = strPathName.Left( nFindIndex );//加上指定的扩展名以构成完整文件名strPathName += CDibObject::szExtensions[ nIndex - 1 ];//调用CDibObject类成员函数Save()保存图像m_pDibObject->Save( strPathName );//设置窗口标题CString strFileName = DialogSaveAs.GetFileName();nFindIndex = strFileName.Find(".");if ( nFindIndex != -1 )strFileName = strFileName.Left( nFindIndex );strFileName += CDibObject::szExtensions[ nIndex - 1 ];pChildFrame->SetWindowText( strFileName );SetPathName( strPathName );//若保存为JPEG图像,重新将图像载入并更新视图的显示if( nIndex == 5 ){m_pDibObject->Load( strPathName );pDipView->InvalidateRect( NULL, FALSE );pDipView->UpdateWindow();}}}}//将图像文件读入CDibObject类对象中BOOL CDipDoc::ReadImgToDoc(){CString strPathName = GetPathName();//设置等待光标BeginWaitCursor();m_pDibObject = new CDibObject( strPathName.GetBuffer(3) );//取消等待光标EndWaitCursor();//读入图像文件失败if( m_pDibObject == NULL ){ AfxMessageBox("无法创建图像类对象!");//返回FALSEreturn(FALSE);}//读入图像文件成功,设置相应变量m_bImageLoaded = TRUE;//返回TRUEreturn(TRUE);}(19)在DipDoc.h中声明两个公有成员变量:// Attributespublic:BOOL m_bImageLoaded;//表示指向图像是否读入内存CDibObject *m_pDibObject; //表示指向CDibObject类的指针,来保存图像接着定义一个公有成员变量:// Operationspublic:BOOL ReadImgToDoc();//负责读入图像对象文件(20)在DipDoc.h中添加afx_msg void OnFileNew();afx_msg void OnFileOpen();afx_msg void OnFileSaveAs();形成以下代码:protected://{{AFX_MSG(CDipDoc)afx_msg void OnFileNew();afx_msg void OnFileOpen();afx_msg void OnFileSaveAs();// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()(21)在DipView.cpp中,在void CDipView::OnDraw(CDC* pDC)中添加以下内容,实现具体的图像绘制任务:void CDipView::OnDraw(CDC* pDC){CDipDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereif( !pDoc->m_bImageLoaded){pDoc->ReadImgToDoc();}//滚动窗口CSize sizeTotal;sizeTotal.cx = pDoc->m_pDibObject->GetWidth();sizeTotal.cy = pDoc->m_pDibObject->GetHeight();SetScrollSizes (MM_TEXT, sizeTotal);//获取客户区尺寸OnPrepareDC(pDC);CRect Rect;GetClientRect( &Rect );//获取图像宽度及高度int nImageWidth, nImageHeight;nImageWidth = pDoc->m_pDibObject->GetWidth();nImageHeight = pDoc->m_pDibObject->GetHeight();//当图像实际尺寸小于窗口尺寸时,将图像放在客户区中间int nX, nY;if( nImageWidth < Rect.Width() )nX = (Rect.Width() - nImageWidth ) / 2;elsenX = 0;if( nImageHeight < Rect.Height() )nY = (Rect.Height() - nImageHeight ) / 2;elsenY = 0;pDoc->m_pDibObject->Draw(pDC, nX, nY);}(22)考虑工程中多处引用DibObject.h,在StdAfx.h预编译文件中直接添加DibObject.h: (#endif 下面)#include "DibObject.h"。
第6章创建和使用对话框对话框是一种用户界面,几乎每一个Windows程序都使用对话框与用户进行交互。
对话框可能是一个简单的只含有OK按钮的消息框,也可以是一个复杂的数据输入表单。
对话框上有一些方便用户输入的控件,对话框依靠这些控件与用户进行交互,其实质是一个接收消息的窗口。
在本章节我们主要讲述模式对话框和无模式对话框的原理和使用方法,下一章将详细介绍各种控件的使用。
你将学习创建一个对话框,使用对话框模板编辑一个对话框资源,并在程序中调用对话框的方法。
6.1 对话框的基本原理6.1.1 对话框的工作原理在创建一个对话框之前,我们先来了解一下对话框是如何工作的,对话框的数据来自三方面:对话框资源、对话框对象、和一个文档对象:1.对话框资源对话框资源是一个用户输入或取得数据的图形界面。
这个图形界面是使用Develop Studio的对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。
当应用程序运行时,就可以得到一个对话框。
2.对话框对象MFC使用CDialog类来描述对话框,它是CWnd类的派生类。
在CWnd类的基础上增加了数据交换的功能。
当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。
对话框对象实现了对话框和应用程序之间的通信。
在应用程序中定义一个对话框对象后,在对话框显示前,可以通过访问对话框对象的成员变量为一个对话框的控件初始化,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。
3.文档对象MFC使用文档对象描述应用程序处理的数据,用户输入的数据要进一步的处理,通常要先存贮到文档对象中。
例如:一个学生记录处理的应用程序,用户通过一个对话框输入学生记录并贮存到一个文件中。
应用程序的处理顺序是:用户在对话框中输入信息,通过对话框对象得到输入信息,将输入信息整理到文档对象中,使用序列化函数将文档对象存贮到一个文件中,所以文档对象扮演了一个很重要的数据交换的角色。
其于MFC的串口调试助手编辑过程一、新建打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件基本框架3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:选择其中任意一个作为输入编辑框及输出编辑框这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a、右击串口通信控件建立类向导Member variables Control IDS中选择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
vc++6.0入门教程步骤是:(先工程—后文件—编译—连接---运行)1 桌面上的快捷方式如下:双击即可运行2 在所有程序里点击也可以运行:3 即会出现如下界面:14 进入后的界面如下:25将每日提示关闭既可:31,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,4点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:5显示你创建的工程的信息。
2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:6建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:7进入编辑区,在主界面编写代码:如下编写完之后呢:89 可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。
如果是您有代码如:cpp 文件,或 .h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下 文件扩展名为:cpp 和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;10在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序) ,在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。