从零开始学VC系列教程完整版

合集下载

VC精华教程MFC入门系列

VC精华教程MFC入门系列

第一章一个简单的MFC程序该文章为学习了C和C++以及有SDK编程基础的,但还未学习MFC的人员使用,我们开始使用一个基本的内容开始全部的代码如下:你只需将以上代码拷贝下来,在VC++6.0编译器,建一个Window32工程,使用MFC链接库编译即可。

具体步骤:打开VC++6.0,点击主菜单File(文件)-〉New(新建)弹出一个对话框,我们选择win32 Application(win32应用程序),在工程文本框给它起一个名字MyMFC,点击确定。

在确认信息的对话框里选择空工程an empty project点确定。

这样我们就建了一个win32应用程序这样一个类型的工程。

下面我们在这个工程里建一个C++文件。

点击菜单File(文件)-〉New(新建)弹出一个对话框,选择C++ source文件(C++源文件),在文件文本框里给它起个名字MyMFC,点击确定,这时我们将上面的代码拷入,编译链接。

你会发现有3个错误。

nafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol_endthreadexnafxcwd.lib(thrdcore.obj):error LNK2001:unresolved external symbol_beginthreadexDebug/MyMFC.exe:fatal error LNK1120:2 unresolved externals那么,这是因为没有使用MFC类库。

我们现在导入,点击菜单(project)工程-〉setting设置,弹出一个对话框,有一个下拉列表框,里面是Not Using MFC,我们把她改为Using MFC in a Static Library,点击确定,再编译,运行,那么有这样一个窗体出现。

下面是该程序的解释。

在以上的程序中,只使用了两个类CFrameWnd和CWinApp,我们先看第一个类:第一个类sample继承了CFrameWnd类,CFrame类是MFC类库中的一个类,用它来代表窗体框架,我们先用sample类继承它,在构造函数调用了Create这个函数,在运行Create这个函数时调用的是CFrameWnd类中的函数,是MFC写好的函数,CFrameWnd中封装了CreateWindow这个API函数为它的成员函数Create(),它们的参数都是相似的。

从零开始学VC系列教程完整版

从零开始学VC系列教程完整版

从零开始学VC系列教程完整版VC(视觉传达)是一门涵盖视觉设计和传达特定信息的学科。

它广泛应用于广告、品牌、平面设计、媒体等领域。

对于新手来说,学习VC可能会有点困难,因此我将为大家提供一份从零开始学习VC的系列教程,希望能帮助大家更好地了解和掌握这门学科。

第一部分:VC基础知识(300字)-介绍VC的定义和作用。

-解释VC的主要原则和设计原则。

-介绍VC的应用领域和职业发展机会。

第二部分:视觉设计(400字)-简要介绍视觉设计的概念和作用。

-解释视觉设计的基本原则,包括平衡、对比、重复、层次、比例等。

- 介绍常用的视觉设计软件,如Adobe Photoshop、Illustrator和InDesign。

第三部分:色彩和排版(400字)-解释色彩在VC中的作用和效果,包括色彩的心理效应和色彩的搭配原则。

-介绍排版在VC中的重要性和基本原则,包括对齐、间距、行高、字体选择等。

第四部分:图形和图像处理(400字)-介绍VC中常用的图形元素,如直线、曲线、形状、图标等。

-解释图像处理的概念和流程,包括调整亮度、对比度、饱和度等,以及图像的裁剪和合成。

第五部分:品牌设计(400字)-简要介绍品牌设计的概念和作用。

-解释品牌设计的基本原则,包括标识设计、标志颜色、字体选择等。

-介绍品牌设计的流程,包括理解需求、市场研究、草图设计、修改和最终输出。

第六部分:平面设计和广告设计(400字)-解释平面设计在VC中的作用和应用,包括海报、名片、包装设计等。

-介绍广告设计的基本原则,如吸引力、信息传递、情感共鸣等。

-介绍广告设计的流程,包括目标设定、创意构思、设计制作和评估效果。

第七部分:多媒体设计(400字)-简要介绍多媒体设计的概念和应用,包括网页设计、移动应用设计等。

-解释多媒体设计的基本原则和最佳实践,如用户友好性、页面布局等。

- 介绍常用的多媒体设计工具和技术,如HTML、CSS、JavaScript等。

从零开始学VC系列教程

从零开始学VC系列教程

从零开始学VC系列教程五.消息机制与自定义消息题外话:我们一再重复的讲Windows的消息,因为这的确是一个关键,会用,并且用好是非常必要的。

这一章我们主要介绍一下消息机制及消息传输,做几个小小的实验,让大家在概念上明白怎么用。

本节内容:学会消息发送接收及自定义消息学习目的: 撑握消息机制的概念,学会基于消息的操作.这一章我们要做的例子看起来很简单,只是实现的方式不一样。

按[开始]时,在文本框内显示当前的鼠标坐标,按[结束]后,显示一个结束信息,按[关闭]则退出程序.1.新建工程.首先建一个基于MFC对话框的工程,名字为Eg05。

前面四章我们已经介绍过很多次建立工程的方法了,这里不再重复了,如果还有不明白的,可以看一下以前的记录,或者给我留言。

2.在对话框上放一个EditBox,改ID称为IDC_EDIT_SHOW然后再添加三个按钮,分别设置标题为[开始],[结束],[关闭]。

设置ID分别为IDC_BTN_STAR,IDC_BTN_OVER,IDC_BTN_CLOSE。

通过前面几章的学习,我们知道ID号大家可以自己随便设定,当然最好是接近控件的作用简称或接近控件名的简称。

完成后如下图所示。

首先我们来为[关闭]按钮添加响应,双击[关闭]按钮,添加响应程序。

只有一行,呵呵。

完成后如下图所示:void CEg05Dlg::OnBtnClose(){// TODO: Add your control notification handler code herePostMessage(WM_CLOSE);}编译运行,按[关闭]就可以看到程序退出了,晕死,是不是太简单了?下面我们来说一下为什么是这样。

在这里,我们用PostMessage函数发送了一个名为WM_CLOSE的消息,这是一个系统消息,用于关闭程序。

查一查MSDN,可以看到这个函数的一些说明。

原文放在下面,方便没有下载MSDN的朋友看看. CWnd::PostMessageBOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );Return ValueNonzero if the message is posted; otherwise 0.ParametersmessageSpecifies the message to be posted.wParamSpecifies additional message information. The content of this parameter depends on the message being posted.lParamSpecifies additional message information. The content of this parameter depends on the message being posted.RemarksPlaces a message in the window’s message queue and then returns without waiting for the corresponding window to process the message. Messages in a message从原型我们可以看到,其实这个函数还有两个参数,分别为wParam和lParam,分别默认为0了。

VisualCMFC入门教程版精编版

VisualCMFC入门教程版精编版

V i s u a l C M F C入门教程版公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]Visual C++MFC入门教程目录+-- 第一章 VC入门|------|------|------|------|------+-- 第二章图形输出|------|------|------|------|------|------+-- 第三章文档视结构|------|------|------|------|------|------+-- 第四章窗口控件|------|------|------|------|------|------|------|------|------|------|------|------|------|------+-- 第五章对话框|------|------|------|------|------|------|------|------|------+-- 第六章网络通信开发|------+------《》闻怡洋/文如何学好VC这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。

万事开头难,为了帮助朋友们更快的掌握VC开发,下面我将自己的一点体会讲一下:1、需要有好的C/C++基础。

正所谓“磨刀不误砍柴工”,最开始接触VC时不要急于开始Windows程序开发,而是应该进行一些字符界面程序的编写。

这样做的目的主要是增加对语言的熟悉程度,同时也训练自己的思维和熟悉一些在编程中常犯的错误。

更重要的是理解并能运用C++的各种特性,这些在以后的开发中都会有很大的帮助,特别是利用MFC进行开发的朋友对C++一定要能熟练运用。

2、理解Windows的消息机制,窗口句柄和其他GUI句柄的含义和用途。

了解和MFC各个类功能相近的API函数。

3、一定要理解MFC中消息映射的作用。

4、训练自己在编写代码时不使用参考书而是使用Help Online。

初学者必备C 经典入门详细教程

初学者必备C  经典入门详细教程
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;

《VC++_2010入门经典》完全版

《VC++_2010入门经典》完全版

《Visual C++ 2010入门教程》写在前面在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫《Visual C++ 2005入门经典》的书帮了我不少的忙。

因为通常的C++教材都只会介绍C++的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制台程序,什么事Win 程序,什么是GUI程序,C++能干什么,VC和C++的区别是什么。

现在有很多的朋友应该也有这些问题吧?学C++用C++也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。

记得我学C++的时候,没有人教,有的时候也走了不少弯路,甚至连调试也不会,也不知道可以通过看调用堆栈看调用次序,还自己慢慢的去搜索,好傻啊。

接下来我会做一个《Visual C++ 2010入门教程》系列,用来帮助初学者。

刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一二的。

内容主要涵盖在Windows下面使用C++进行开发的常见内容,Visual Studio 2010的使用,如何创建新项目,如何调试,如果配置项目属性等等,另外还会介绍Visual C++ 2010中新加如的一些内容,包括一些新的STL组建,一些新的语法支持等等。

由于本人水平有限,其中难免有错误,希望大家谅解,如果大家有发现问题还请务必及时指出来,否则误导了他人我就罪不容恕了。

注意,本教程非C++教程,不会教你C++,只会教你如何使用 Visual C++ 2010去练习去学习其它C++教材上面的程序。

因此建议大家认真的去看其他的C++教程,在使用Visual C++ 2010实践的时候如果遇到问题可以到这里来参考。

推荐《C++ Primer》、《C++程序设计语言》《Visual C++ 2008入门经典》。

VC调试入门

VC调试入门

VC调试入门作者:阿荣概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。

不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。

这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。

本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。

设置为了调试一个程序,首先必须使程序中包含调试信息。

一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。

为了增加调试信息,可以按照下述步骤进行:•打开Project settings对话框(可以通过快捷键ALT+F7打开,也可以通过IDE菜单Project/Settings打开)•选择C/C++页,Category中选择general ,则出现一个Debug Info下拉列表框,可供选择的调试信息方式包括:命令行Project settings说明无None 没有调试信息/Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等/Zi Program Database 创建一个程序库(PDB),包括类型信息和符号调试信息。

/ZI Program Database forEdit and Continue除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。

这个选项同时使#pragma设置的优化功能无效••选择Link页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL•如果C/C++页中设置了Program Database以上的选项,则Link incrementally可以选择。

从零开始学vc系列教程完整版

从零开始学vc系列教程完整版

从零开始学VC系列教程一.信息显示实验题外话:第一次写教程,不知道该怎么开始.以前见过的教程可能都会介绍比较多的理论然后才开始讲实际操作,我想对于VC,理论讲得太多大家可能更糊涂,所以选择了这个方案,我们先一步步照着做,每一次只介绍一两个知识点,并且把理论放在后面说明,希望大家能喜欢这种方式,并对这种方式提出意见和建议,以便以后章节更适合大家的学习.或许我写的还不能称之为教程,只是一些操作步骤及说明,通过这些练习,希望能使大家对VC有一个新的认识.VC的功能是十分强大的,但我们一般并不会用到所有的功能,就像大家熟悉的KeilC一样,其实Keil功能也是很多的,平时也没见谁把Keil的功能都用到了.基于此,我写的这个教程可能在VC专业人士看来比较简单.不是要班门弄斧,而是希望推行上位机技术,形成一个氛围让大家来学习交流,PC机与下位机结合毕竟也是发展的一个方向.望高手谅解小辈的不自量力.同时,我们结合单片机编程,让大家明白上位机控制方法及原理,当然这是今后章节的内容了.本节内容:学会在文本框中显示文本,学会弹出式对话框使用.学习目的:信息显示是人机交互的基础,同时,信息显示也为以后的程序调试打下基础.1.新建工程.打开VC6.0点击[文件]->[新建],弹出如下对话框.在工程选项中选择MFC AppWizard[exe],选择好工程存入的位置,然后在工程名称中填入工程的名称,例如Eg01,填入Eg01后.VC会在我们选择的路径后自动加入一个以工程名命名的文件夹作为工程目录.完成按[确定]就会进入工程向导,出现以下的提示.在这个我们选择[基于对话框]就行了.单文档及多文档方式会在以后详细介绍.这里也简要说明一下.①单文档.程序一次只能处理一个文档对象(文件).像写字板,记事本等.②多文档.程序一次可以处理多个对象(文件),像word之类的,可以同时打开多个文件.③基本对话框.程序一般用于处理一些比较小的,工具型的软件.像双龙的ISP下载软件,Easy 51Pro等都是基于对话框.一些不是很复杂的工业软件也通常可以用基于对话框的形式,这种方式的优点是所见即所得,一些控件可以像VB一样拖到工作区就行了.选好以后直接按[完成]就可以了.至于[下一步]的向导,这里我们先不管.然后会进入以下的画面.其中红色及绿色是我的标注,看不清图片可以下载图片放大.[属性Properties]菜单项,弹出如下对话框修改IDC_STATIC为IDC_FIRSTLABEL,标题可以写为”第一个应用程序”然后关闭这个对话框,就可以看到刚才的静态文本框内容变为”第一个应用程序”了.在刚才的操作中,我们将静态文本框的ID改为了IDC_FIRSTLABEL,在VC中,ID是控件的标志,不能有相同的ID出现,但允许多个名为IDC_STA TIC的ID号.所以,一般并不把文件名命为IDC_STATIC,除非以后我们不想在程序中改变这个控件的属性.有一些控制,例如GroupBox一般并不在程序中改变什么,所以不改变其ID号.ID是程序访问控件的标识,所以一个应用程序中不能有重复ID.按下来我们要添加一个按钮.用鼠标将控件条上的按钮拖到对话框上,可以看到对话框上多了一个按钮. 用上叙方法,改变按钮ID为IDC_BTN1,标题改为”显示”,这样就做好一个按钮了.下面我们为按钮添加代码.双击按钮,会出现以下的提示框.按[OK]为按钮添加响应函数,出面以下画面void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code here}这一段就是刚才按钮的函数了.当然,现在还没有响应.现在我们添加一个事件,让这个按钮按下后上面的静态文本框的内容变为”串口号:COM1 波特率:57600”把上面的代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereSetDlgItemText(IDC_FIRSTLABEL,”串口号:COM1 波特率:57600”);}添加完成以后,按F7编译.如果编译通过,按F5运行,可以看到程序运行后的对话框按下按钮,可以看到上面的静态文本框的内容改变了.那么恭喜你,完成我们这个例子的第一步操作了.当然,我这里的对话框看起来没那么高,大家可以调一下高度.怎么退回到控件编辑状态呢?首先,我们单击选项卡中的[ResorceView],现在大家只能看到[Reso…]看到IDD_EG01_DIALG 了吧,这个其实也是一个ID,是我们对话框的ID,如果大家改一下对话框的ID,就可以看到这里的ID也变了.在VC中,所有的控件都认为是窗体,只是形式不同.双击IDD_EG01_DIALG就可以看到我们刚才的控制编辑状态了.双击[显示]按钮又可以回到代码状态.刚才的例子很简单,却是我们以后会用得最多的.下面我们来分析一下代码void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereSetDlgItemText (IDC_FIRSTLABEL,”串口号:COM1 波特率:57600”);}看看SetDlgItemText这个函数,大家就会明白了, IDC_FIRSTLABEL是我们给静态文本框分配的ID,后面的参数是要显示的内容.上面我们提到过,VC中的控件都认为是窗体,所以,对于所有的文本显示,我们都可以用这个函数来做,大家可以试着加入一个编辑框(Edit),同样可以使用用这个函数,只要ID号对了就可以了.VC对大小写敏感,大家要注意大小写.下面我们用另一个方法来实现.把代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereCString a;a=”串口号:COM1 波特率:57600”;SetDlgItemText (IDC_FIRSTLABEL,a);}然后按F7编译,无误则按F5运行.可以看到运行结果是一样的.大家可以看到,我们把变量a定义为CString类型,这个类型我们在C中可能没有见过.CString 其实是VC中的一个类.这里我们要引入类的概念了.类跟C语言结构体很像,结构体可以有成员变量,但不能有成员函数,类不但可以有成员变量,还可以有成员函数,并且支持多种方法.在VC中,类用class标识.下面是一个类的定义,我们来分析一下.class CEg01Dlg : public CDialog{public:CString GetPath(void);protected:int GetMax(int a,int b);public:int a;int b;};这个类是我改过的,为了大家看得明白一点.首先,我们从这句class CEg01Dlg : public CDialog 知道这个类名是CEg01Dlg,那么public后面的CDialog是什么意思呢?CDialog其实也是一个类,是VC中标准对话框类. public CDialog意思是我们定义的这个类CEg01Dlg从CDialog派生,也叫从CDialog继承,从继承这个词语大家就会明白CEg01Dlg不但可以有自身函数,而且还可以用到CDialog里的变量及函数,所以说是继承,就像我们说的继承财产一样,儿子不但可以有自己的钱,还有从老爸那里继承的产财,这些钱都能花.所以,我们也叫CDialog为父类(不是爸类啊),把CEg01Dlg称为子类.当然,这是相对的.如果再定义一个类从CEg01Dlg派生,那么CEg01Dlg也就是父类,派生出来的类就是子类.这段可能有点难明白,大家可以慢慢体会.我们再回到CString上面来,这个类不是派生的,所以也没有父类了.用CString定义一个变量a,我们称为类变量,CString有很强大的功能,我们这里只用到一个功能,就是字符串,a可以是一个不定长度的字符串,所以我们可以给a赋一个任意的字符串而不用关心长度.当然,我们也可以用int StringLen=a.GetLength();来获得这个字符串的长度.从这句可以看到,GetLength()是类CString里的一个函数.大家可能又会关心一个问题,怎么把长度显示出来呢?我们把代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereCString a;a=" 串口号:COM1 波特率:57600";SetDlgItemText (IDC_FIRSTLABEL,a);a.Format("字符串的长度:%d",a.GetLength());MessageBox(a);}运行一下,效果如下这里我们用到了类Cstring的另一个成员函数Format();这个函数用起来跟C语言里的Printf()很像,我就不多说明了.格式化后的字符串还是存放在a中,在这里,我们还用到了一个新的函数MessageBox();我们只是用了这个函数最简单的用法,显示一个字符串.MessageBox用于弹出一个提示对话框.查查MSDN就知道,函数原型是int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); 在VC里面,函数可以有默认值,例如LPCTSTR lpszCaption = NULL, UINT nType = MB_OK变量lpszCaption的默认值是NULL,nType的默认值是MB_OK,这些有默认值的变量我们可以不传值,所以这个函数使用时,最简单的用法就是传lpszText就可以了.如果我们要显示一个固定的字串,可以这样调用MessageBox(“大家好”);是不是很简单啊?这一章就写到这里了,一些问题大家可以提.未尽知识点,会在以后再详细介绍.从零开始学VC系列教程二. 对话框及常用控件实验恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现.本节内容:学会对话框调用及一些常用控件的使用方法.学习目的:学习人机交互,为软件开发提供界面基础.1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢?我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢?其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到程序运行了.单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了.当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢?为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption 改为[关于].最终效果如下下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图单击标签ClassView(这里显示的是[Class…])就可以看到Eg02这个应用程序的类.第一个CAboutDlg就是关于对话框的类.CEg02Dlg对应IDD_EG02_DIALOG.中间的Ceg02App是应用程序的基础类.所以,如果要对关于对话框进行操作,就要用到类CAboutDlg,因为与此有关的函数及变量都封装在CAboutDlg中.看到这里大家可能又糊涂了,没关系,在以后的教程中,通过一些练习大家就会慢慢领会到的.这里还是先为[关于]按钮添加代码.void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code here}上面是VC为[关于]按钮添加的响应函数.我们添加代码成以下所示void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code hereCAboutDlg ADlg;ADlg.DoModal();}一共有两句,第一句是CAboutDlg ADlg;作用是定义一个变量Adlg.第二句是ADlg.DoModal();功能是调用类CAboutDlg里的一个函数DoModal();这个函数在MSDN里的解释是Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active. This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.一般我们用于显示一个对话框.其实大家看看CAboutDlg这个类下面,只有两个函数DoModal()这个函数并不在这个里面.第一章我们提到过类的派生和继承.其实CAboutDlg这个类是派生于CDialog类,DoModal()这个函数是CDialog的成员函数,由于CAboutDlg是继承父类CDialog的,所以CDialog里的函数在CAboutDlg中也可以使用.下面我们来说说几个常用控件的使用.首先在IDD_EG02_DIALOG对话框中加入一个Edit(编辑框)控件.Edit一般用于输入输出数据文本.相当于VB里的TextBox.加入Edit控件后,编辑其属性为然后,我们再加一个按钮(PushButton),并编辑其属性为接下来,我们先说一下要实现的效果.很简单,在编辑框里输入一个文本,然后按显示,就把文本显示在静态文本框中.所以,这里要把静态文本编辑框的ID改为IDC_DISPLABEL下面我们为[显示]按钮添加代码void CEg02Dlg::OnBtnShow(){// TODO: Add your control notification handler code hereCString a;GetDlgItemText(IDC_EDIT_INPUT,a);SetDlgItemText(IDC_DISPLABEL,a);}其实不复杂,也只有三句,第一句定义一个CString类变量a 我们来说说GetDlgItemText这个函数吧.查查MSDN就知道函数原型了.int GetDlgItemText(int nID,LPTSTR lpStr,int nMaxCount)const;int GetDlgItemText( int nID, CString& rString ) const;大家看看就觉得奇怪了,怎么有两个原型啊?并且一个是传两个参数,另一个是传三个参数.在VC里面,同一个类下是可以存在多个同名函数的,具体调用哪个函数要看参数的不同.在这里我们传入了两个参数,所以VC会调用int GetDlgItemText( int nID, CString& rString ) const;这个函数.第一个函数是控件的ID号,第二个是字串.第二个传了地址,所以我们在下一句中用的a已经是获得IDC_EDIT_INPUT的文本了.运行效果如下下面介绍一下进度条的使用以及定时器的使用.我们要实现的效果是进度从0到满格,然后再从0到满格,依次循环.每跳一格间隔500ms,这个时间我们用定时器来实现.首先从控件条里拖出一个进程条到对话框,修改属性如下然后我们要介绍一下VC的定时器.VC里面使用定时器有多种方式,我们先介绍一种作为抛砖引玉首先添加一个Windows消息处理器.消息这个词语可能很陌生,我们会在后面很多次说明.这里先照图做在类管理器里选中Ceg02Dlg这个类,然后点右键,就会弹出一个菜单,选择[Add Windows Message Handler…],接下来会弹出另一个菜单双击WM_TIMER然后按[确定]就可以了.大家会看到,CEg02Dlg类中多了一个函数这个就是VC中的定时器响应函数.然后双击这个函数就进入代码了然后我们为Timer事件添加代码.void CEg02Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default IDC_PROGRESS static int nPos=0;((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);if(nPos<100) nPos+=10;else nPos=0;CDialog::OnTimer(nIDEvent);}首先定义一个整型的变量nPos用于记录进度条的进度值.默认时,进度条0为空,100为满格.从后的程序大家可以看到,这个变量自加到100就变为0.最难理解的就是((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);首先, GetDlgItem(IDC_PROGRESS)这个函数用来获取IDC_PROGRESS的句柄,在VC里面引入了句柄这个词语,我们将在下一章中对消息和句柄进行详细的说明, 句柄是WINDOWS 用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

VC入门教程

VC入门教程

VC入门教程vc入门教程一走进 Visual C++1 理解VC工程2 MFC编程特点3使用Wizard二 MFC 程序结构分析1 WINDOWS程序工作原理2 建立应用程序3 程序结构剖析3(1 类CMYAPP3(2 类CMAINFRAME3(3类CMyView与CMyDoc三深入MFC类库1 处理用户输入1(1 定义对话框资源1(2 定义对话框类2 有关屏幕输出2(1 设备上下文工作原理2(2 实例绘图原理剖析2(3 绘图操作实现2(4 有关屏幕映射方式3 文件处理3(1 对象持续化简述3(2 实例分析3(3 与文件处理关系密切的类CFile4 DAO技术4(1 DAO与ODBC4(2 使用MFC实现DAO技术5 打印5.1打印和显示5.2打印分页5.3 打印工作的开始和结束5.4 打印程序实例四、VC程序调试1(1 调试环境的建立1(2调试的一般过程1(3 如何设置断点1(4 控制程序的运行1(5 查看工具的使用2 高级调试技术2.1 TRACE 宏的利用2.2 ASSERT宏的利用2.3 ASSERT_VALID宏的利用以及类的AssertValid()成员函的重载2.4对象的DUMP函数的利用3 内存漏洞的检查五 Visual C++ 与多媒体1 对声音的处理1(1媒体控制接口1(2波形混音器2 多媒体文件I/O3多媒体图形图像技术;4图像合成;5 FLC动画;6热点;一走进 Visual C++Visual C++作为一个功能非常强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。

Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。

本光盘教学软件的目的就是为了让你学会在Visual C++环境下,利用微软的基本类库MFC开发出功能强大的Windows应用程序。

在本章节的内容当中,我们将向您介绍使用VC开发软件需要用到的一些基本概念,使用MFC进行编程的基本特点,以及VISUAL C++集成开发环境提供的一系列编程辅助工具--WIZARD的使用方法。

C 入门基础_30分钟入门教程

C 入门基础_30分钟入门教程

C 入门基础_30分钟入门教程.txt7温暖是飘飘洒洒的春雨;温暖是写在脸上的笑影;温暖是义无反顾的响应;温暖是一丝不苟的配合。

8尊重是一缕春风,一泓清泉,一颗给人温暖的舒心丸,一剂催人奋进的强心剂本文由huasion贡献doc文档可能在WAP端浏览体验不佳。

建议您优先选择TXT,或下载源文件到本机查看。

来自网络版权问题请联系作者第1章C++预备知识C++入门知识C++是一门应用非常广泛的计算机程序设计语言.它既支持过程化程序设计,也支持面向对象程序设计.从操作系统,设备控制到数据库,网络,多媒体等众多的应用领域都能看到它的身影.目前,业界应用比较广泛的是它的两个变种:Borland C++和 Visual C++.这两种 C++都是在标准 C++的基础上做了一些扩展而来.本书将基于 Visual C++ 6.0 版本的开发环境,向读者讲授标准 C++的强大功能和编程方法.本章包括以下内容: C++概述; 开发工具; C++程序的结构; 编码规范; 标识符. 通过本章的学习,读者可以为后面的学习打好基础,并且可以对 C++有一个基本认识.1.1 概述C++作为当今业界应用最为广泛的编程语言之一,其涵盖的内容非常广泛而多样.本节将首先给读者一个初步的概念.1.1.1 C++的发展史C++由美国贝尔实验室的 Bjarne Stroustrup 博士在 20 世纪 80 年代初期发明并实现, 最初被称作 C with Classes.1983 年,C with Classes 被更名为 C++.1985 年 10 月发布了第一个商业化版本.同年,C++的第一本编程手册《C++程序设计语言》出版.1989 年,发布了第二版.1990 年,出版了 The Annotated C++ Reference Manual.这本书后来成为标准化的基础. 稍后又引入了模板,异常处理,命名空间,新的强制转型,以及布尔类型等特性. ANSI-ISO 委员会于 1998 年对 C++进行了标准化:ISO/IEC 14882-1998.从此,C++成为一种具有国际标准的编程语言,通常被称作 ANSI/ISO C++.2003 年,又发布了该标准的修正版.2005 年,一份名为 Library Technical Report 1(简称 TR1)的技术报告发布.事实上, 至今为止没有任何一款编译器完全支持 ISO C++, 但是 Borland C++和 Visual C++已经足够强大.现在,Loki,MPL 等程序库为代表的产生式编程和模板元编程的出现又给了 C++一个新的发展高峰.1.1.2 为什么要选择 C++C++语言是由 C 语言扩充而来. 它是一门混合型的语言, 既支持传统的结构化程序设计, 又支持面向对象的程序设计,这使得 C++非常流行.它在编程中支持面向对象.因此,它比3第1篇面向过程的 C++编程C 更适合人们的思考方式,并且比 C 要安全,可靠,有效.但是它并不像 Java 那样全面实现类的使用,这使得它很灵活,能够适应多种场合的需要. C++是编译语言,性能良好,效率更高.它不像 Java,PHP,ASP 等解释型语言,需要在运行时转换为机器码,或者读一条语句执行一条.它直接被编译为机器可识别的机器码. C++编写的程序独立性好. 只要 C++编译时产生的机器码不依赖外部的动态链接库, C++ 就可以在不需要安装额外程序的情况下, 移动到运行同样操作系统的其他机器和微处理器上. 而移动 Java 程序时需要先安装 Java 运行期库.这是 C++语言成功流行的一个重要原因. C++语言应用极为广泛.尤其在底层编程和系统级编程上更是 C++的传统优势应用.在数据库和多媒体方面,C++又以其卓越的稳定性而赢得了荣誉.1.1.3 对面向对象方法的支持对象是人们要进行研究的任何事物.面向对象的核心思想是对象和对象间的消息,是建立在"对象"基础上的方法学.它将系统看做对象的组合,每个对象都能接受并处理数据, 然后和其他对象通过消息来交换数据.面向对象编程具有以下 3 个基本特征:封装,继承和多态. 在 C++中,用类来封装数据和数据上的操作,外界看不到该类的属性和方法.如果需要的话,系统一般会为每个属性提供 set/get 函数对. 继承就是从父类继承旧的属性,参数等.C++可以进行公有,私有,保护 3 种类型的继承.有时为了避免内存的浪费,也可以进行虚继承.虚继承中,整个继承体系里公有的基类将不会被重复分配空间. 多态指用多种形态来实现.C++中的多态包括函数重载,子类与基类间的覆盖,虚函数,运算符重载以及抽象类等方式.1.2 开发工具要想发挥 C++的强大功能,就需要一个优秀的集成开发环境,因为一个好的编程环境常常可以起到事半功倍的效果.集成开发环境(IDE)是一个将程序编辑器,编译器,调试工具和其他建立应用程序的工具集成在一起,用于开发应用程序的软件系统.本节将向读者介绍常见的几款 C++开发环境,并着重介绍本书所用到的开发环境.1.2.1 常见的 C++开发工具目前,传统的 C++开发工具有 C++ Builder,Visual C++两种,新近又出现了 Eclipse, Code::Blocks,Dev-C++,Mingw 等开发工具.它们各有千秋,下面将简单介绍一下它们的特性.4第1章C++预备知识1.Visual Studio Visual Studio 是微软公司推出的开发环境,它是目前最流行的Windows 平台应用程序开发环境.在 Visual Studio 中可以创建应用程序和网络应用程序,以及智能设备应用程序和 Office 插件等.从 7.0 开始,Visual Studio 加入了.Net 技术,类似 Java 的 JVM.目前,最新版本为 9.0,也被称做 Visual Studio 2008.如果不想使用.Net 技术,6.0 版本也是一个不错的选择.说明:VisualStudio 对标准 C++做了扩展,习惯上将在 Visual Studio 中实现的 C++称为 Visual C++,即 VC.VC 是目前使用最广泛的 C++开发语言,Visual Studio 也是使用最广泛的开发工具.2.C++ Builder C++ Builder 是另一款比较流行的 C++开发工具.它由 Borland 公司于1998 年推出,也是 Windows 下的开发工具.C++ Builder 具有高度安全性,高可靠性,快速性的编译优化方法, 所以编译出的软件执行速度很快. 所有符合 ANSI/ISO 标准的原代码都可以在 C++ Builder 中编译,而且支持最新的 ANSI C++/C 语言特征.3.Dev-C++ Dev-C++是 Windows 平台下的开源 C++编程环境.它集成了 GCC,MinGW32 等众多自由软件,界面类似 Visual Studio,但体积要小的多.它的缺点是难以胜任规模较大的软件项目,但对于初学者是一个不错的选择.4.Anjuta Anjuta 是一款 GNOME 桌面环境下的 C/C++编程的集成环境,也是开源软件.它不仅有项目管理,交互式调试以及强大的代码编辑和语法增色的功能,还可以直接开发Glade 图形界面的程序.但是,它主要用在Linux,UNIX 平台下,不支持Windows 平台.目前,最新版本是 2.4.x,可以从 站点获得.5.Code::Blocks Code::Blocks 是一款全功能的,跨平台的 C/C++集成开发环境,属于开源软件.它提供了众多的工程模板,包括控制台应用,动态连接库,OpenGL 应用,QT 应用,Win32GUI 应用等.Code::Blocks 的另一引人之处在于它具有丰富的插件,包括代码格式化,类向导, 代码补全,代码统计,To-Do 列表,以及 WindowsXP 外观等各种各样的插件.此外,它不仅支持 GNU GCC 编译器, 还支持 MS Visual C++, Borland C++编译器 5.5, 以及 Digital Mars C 等多种编译器. 6.Eclipse Eclipse 是目前开源平台中最著名的集成开发环境. 最初主要用来支持 Java 语言编程, 目前通过插件 CDT 也可以用来开发 C/C++程序. 因为它本身只是一个框架, 因此插件众多是它5第1篇面向过程的 C++编程的一大特点.这使得 Eclipse 拥有其他支持单一语言的 IDE 环境很难具有的灵活性. 此外,还有很多 IDE 也都支持 C++开发,例如 Visual Slick Edit,NetBeans,Understand C 等,读者可以根据自己的需要选择适合自己的开发环境.1.2.2 Visual C++ 6.0 开发环境简介Visual C++是微软公司推出的目前使用极为广泛的基于 Windows 平台的可视化集成开发环境.它包含了一个文本编辑器,资源编辑器,工程编译工具,一个增量连接器,源代码浏览器, 集成调试工具, 以及一套联机文档 MSDN. Visual C++ IDE 一般由 3 部分组成: Developer Studio,MFC,Platform SDK. 1.Developer Studio 这是一个集成开发环境,它提供了一个很好的编辑器和很多 Wizard.它不仅可以用来开发 C,C++,还可以用来开发 Visual Basic,VF 等语言.使用 Developer Studio,可以完成创建,调试,修改应用程序等各种操作.2.MFC MFC(Microsoft Foundation Classes,MFC)表示为微软基础类,它的应用程序的总体结构通常由开发人员从 MFC 类派生的几个类和一个 CWinApp 类对象(应用程序对象)组成. 但是用 Visual C++编写代码也并不意味着一定要用 MFC,使用 STL,ATL,编写 SDK 程序一样没有限制.说明:STL 是 Standard Template Library 的缩写,表示标准模板库.ATL 是 Active TemplateLibrary 的缩写,表示活动模板库. 3.Platform SDK Platform SDK 是以 Microsoft C/C++编译器为核心,配合MASM,辅以其他一些工具和文档资料.SDK 表示Software Development Kit,意为"软件开发工具包". Visual C++ 6.0 支持的文件类型众多,如表 1-1 所示.表 1-1 文件类型 Active Server Page Bitmap File C/C++ Header File HTML Page Macro File Resource Template Text File 说 ASP 文件位图文件 C/C++头文件 HTML 文件宏文件资源模板文本文件明文件类型文件类型 Binary File C++ Source File Cursor File Icon File Resource Script SQL Script File 说二进制文件 C++源程序文件光标文件图标文件资源脚本文件 SQL 语言脚本文件明由于功能强大,Visual C++ 6.0 预定义的工程类型也非常多,如表 1-2 所示.6第1章表 1-2 项目类型 ATL COM AppWizard Win32 Dynamic-Link Library Custom AppWizard Makefile MFC AppWizard(dll) Win32 Application Win32 Static Library 说 ATL 程序 Win32 动态链接库自定义程序向导 Make 文件 MFC 动态链接库 Win32 程序 Win32 静态库明C++预备知识工程类型项目类型 Database Project DevStudio Add-in Wizard ISAPI Extension Wizard MFC ActiveX Control Wizard MFC AppWizard(exe) Win32 Console Application Utility Project 说数据库自动嵌入执行文件宏 Internet 服务器或过滤器Active X 控件 MFC 可执行文件 Win32 控制台程序该工程作为其他子工程的容器, 从而减少子工程的联编时间明1.2.3 Visual C++ 6.0 开发环境的使用Visual C++提供了一个集源程序编辑,代码编译与调试于一体的开发环境,这个环境称为集成开发环境.通过集成开发环境程序员可以访问 C++源代码编辑器,资源编辑器,使用内部调试器,并且可以创建工程文件.本节将详细讲解 Visual C++ 6.0 集成开发环境各部分的使用方法. 1.主界面为了使用 Visual C++ 6.0 开发环境, 首先需要单击 "开始" "程序" | |Microsoft Visual Studio 6.0|Microsoft Visual C++ 6.0 命令,打开 IDE.主界面如图 1-1 所示.菜单条工具栏工程管理面板工作区输出窗口状态栏图 1-1 Visual C++ 6.0 IDE 7第1篇面向过程的 C++编程图中上部为菜单条,菜单条下面为工具栏.屏幕左部为工程管理面板,右部为工作区. 工作区下部为输出窗口,再往下是状态栏.各菜单的功能如下所示. File 菜单:包括对文件,项目,工作区及文档进行文件操作的相关命令或子菜单. Edit 菜单:除了常用的剪切,复制,粘贴命令外,还有为调试程序设置的 Breakpoints 命令, 完成设置, 删除, 查看断点. 此外还有为方便程序员输入源代码的 List Members, Type Info 等命令. View 菜单:该菜单中的命令主要用来改变窗口和工具栏的显示方式,检查源代码, 激活调试时所用的各个窗口等. Insert 菜单:该菜单包括创建新类,新表单,新资源及新的 ATL 对象等命令. Project 菜单:该菜单可以创建,修改和存储正在编辑的工程文件. Build 菜单:"Builder"菜单用于编译,创建和执行应用程序. Tools 菜单:该菜单允许用户简单快速地访问多个不同的开发工具,如定制工具栏与菜单,激活常用的工具(Spy++等)或者更改选项等. 2.创建工程工程是一个文件.该文件记录了程序中包含的文件和集成环境的配置参数.因此为了编写一个程序,首先就要创建一个工程.选择 File|New 命令,打开新建工程对话框,如图 1-2 所示.图 1-2创建工程该界面左部由 4 个选项卡组成. Files 选项卡用来创建单个的文件,如头文件,程序文件,资源文件等. Project 选项卡用来创建工程,图中列出的是 Visual C++ 6.0 所支持的各种类型的工程. Workspaces 选项卡可以创建一个工作空间,一个工作空间可以包含多个工程.如果编写的软件系统比较庞大,模块众多,就可以利用工作空间来统一管理.8第1章C++预备知识Other Documents 选项卡可以用来创建一些其他类型的文档,这要取决于操作系统都安装了什么样的软件.例如,如果安装了 Office,这里就会出现 Word,Excel 等文档. 在右部可以输入要创建的工程名称和存放位置. 一般默认是 create new workspace 选项,如果有旧的工作空间,还可以选择加入到该空间内.技巧:每个工程类型都是一种代码的模板.如果预定义的模板不能满足程序员的要求,可以选择 Custom AppWizard 定义特定的模板. 3.工具栏工具栏是一组直观,快捷的图形化按钮和编辑框,熟练使用工具栏可以大大提高工作效率.Visual C++中包含很多种工具栏,默认为图 1-3 所示的工具栏.图 1-3工具栏一般来讲,工具栏会根据当前工作的不同而不同.例如,调试程序时,会出现调试工具栏;编写数据库程序时,会出现数据库工具栏.如果要添加新的工具栏,只需右击工具栏,然后在弹出的快捷菜单中选中需要的功能,它就会出现在工具栏上. 4.工程管理面板工程管理面板包括 3 个选项卡,每个选项卡的功能如下所示. ClassView 选项卡显示工程中使用的类,函数,全局变量等,双击可以跳转到对应的代码处,如图 1-4 所示. ResourceView 选项卡显示工程中使用的资源,双击可以编辑该资源,如图 1-5 所示. FileView 选项卡显示工程中使用的文件.文件按类型管理,双击可以进行编辑,如图 1-6 所示.图 1-4ClassView 选项卡图 1-5ResourceView 选项卡图 1-6 FileView 选项卡 9第1篇面向过程的 C++编程5.编译运行编译是对写好的程序进行检查,如果检查无误就会生成目标代码.生成目标代码后,还需要进行链接才能生成最终的可执行程序, 然后才能执行程序. 这些操作都要通过 Builder 菜单来完成. 该菜单主要用于编译,创建和执行应用程序,如图 1-7 所示. 菜单中 Compile 命令是编译当前文件,对当前文件进行语法检查.Build 命令是链接当前工程,生成可执行文件.如果要编译全部文件,就要选择菜单中的 Build All 命令.当编译好文件后, 可以单击 Execute 命令来执行程序.图 1-7编译运行1.2.4 Visual C++ 6.0 使用示例在这一小节将给读者演示一个典型的 C++程序的开发过程,该程序用 C++语法输出字符串 Hello world!. (1)选择"开始"|"程序"|Microsoft Visual Studio 6.0|Microsoft Visual C++ 6.0 命令,启动 Visual Studio 6.0 集成开发环境,如图 1-8 所示.图 1-8 Visual Studio 6.0 集成开发环境(2)选择 File|New 命令,打开 New 对话框,如图 1-9 所示.该对话框主要用来选择要创建的工程类型,并选择工程文件的保存位置和工程名称.10第1章C++预备知识图 1-9工程类型选择(3)选择 Win32 Console Application 选项,该选项表示要创建 Windows 下的 32 位控制台应用程序. 然后在 Project name 文本框中输入工程名称 test, Location 文本框中输入工程在保存的位置.最后单击 OK 按钮,将打开图 1-10 所示的对话框.图 1-10选择控制台程序的类型11第1篇面向过程的 C++编程(4)在这个窗口可以选择要创建的控制台程序的类型.如果上个窗口选择的工程类型不同,这里将出现不同的选项.该窗口实际上是选择要使用的模板. An empty project:表示创建一个空工程,该工程不会自动生成程序文件,仅包含环境配置文件; A simple application:表示创建一个简单程序,仅是一个简单的程序框架,不包含任何有用的代码; A"Hello,World!"application:表示创建一个有一条输出语句的简单程序; An application that supports MFC:表示是带有 MFC 支持的程序框架.注意:An application that supports MFC 选项只是在程序中加入了 MFC 的头文件支持,具体的使用还需要程序手工增加.如果在创建新工程时,选择创建 MFC 型工程,则系统会自动创建一个 MFC 的使用框架. 出于演示的需要,这里选择第 3 种.单击 Finish 按钮,出现图 1-11 的对话框.图 1-11工程摘要(5)该窗口显示了工程的一个摘要,说明该自动生成的工程都包含哪些文件.单击 OK 按钮就创建了一个简单的控制台应用程序,如图 1-12 所示. 该窗口显示了刚才创建的控制台应用程序.左边的工程管理栏内,ClassView 选项卡显示了程序的类结构图,FileView 选项卡显示了文件结构图.右边就是要编写程序的地方. (6)选择左边工程管理栏中的 FileView 页,双击 Stdafx.h,打开该文件,如图 1-12 所示. 在右边的代码区内找到 stdio.h,将它修改为 iostream.12第1章C++预备知识图 1-12主窗口说明:stdio.h 是 C 语言的输入输出支持头文件,iostream.h 是 C++的输入输出头文件.创建 32 位控制台应用程序时,Visual Studio 6.0 默认使用的 I/O 头文件是 stdio.h,因此需要改成 iostream.h.这是将负责输入输出的头文件引入,为了在后面使用 cin 和cout 输入输出流.修改后的 stdafx.h 文件如下所示.// stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently #if !defined(AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED _) #define AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include // TODO: reference additional headers your program requires here //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__AE3AD910_2C76_44B4_A864_1212C9114CAD__INCLUDED_) (7)经过上述修改后,还需要修改 test.cpp 文件,该文件是程序的主要实现文件.双击test.cpp 文件打开它,如下所示.13第1篇面向过程的 C++编程// test1.cpp : Defines the entry point for the console application. #include"stdafx.h" int main(int argc, char* argv[]) { printf("Hello World!\n"); return 0; } 上述代码是创建新工程时自动生成的,该代码使用一条 printf 语句输出了字符串Hello world!.printf 语句是 C 语言中的输出语句,C++中的输出语句则使用 cout 流.因此,需要将代码区中的 printf 语句修改为如下代码:cout<<"Hello world!"<<endl;(8)修改后的 test.cpp 文件如下所示.// test1.cpp : Defines the entry point for the console application. #include "stdafx.h" int main(int argc, char* argv[]) { cout<<"Hello world!"<<endl; return 0; } 经过上述步骤就建立了一个输出字符串 Hello world!的简单控制台应用程序. 要想运行它还需要进行编译和链接.编译操作负责对源程序进行语法检查,然后生成目标代码.链接操作负责将目标代码和程序用到的库程序链接成可执行文件.在 Visual Studio 6.0 中,Builder 菜单提供了编译,链接和执行程序的操作.编译和链接的步骤如下所示. (1)选择Builder|Compile 命令,编译源程序.如果输出窗口内的输出内容如下所示,则表示没有语法错误,且正确生成了目标代码.Configuration: test - Win32 DebugCompiling……Skipping……(no relevant changes detected) test.cpp test.obj - 0 error(s), 0 warning(s)该输出内容表示检测到 0 个错误,0 个警告,生成目标代码 test.obj. (2)对该工程进行链接,以生成可执行文件.选择 Builder|Build 命令,执行链接操作. 如果输出如下所示,则表示链接正常,生成可执行文件正常.Configuration: test - Win32 Debugtest.exe - 0 error(s), 0 warning(s) 该输出说明链接时检测到 0 个错误,0 个警告, 生成可执行文件 test.exe. 生成可执行文件后就可以执行该程序.执行一个 32 位控制台程序即可以从 Windows 的 "资源管理器"中双击打开,也可以从命令行手工执行打开.在 Visual Studio 6.0 中,还可以选择Builder|Execute 命令,执行该工程,如图 1-13 所示.14图 1-13test.exe 的执行结果第1章C++预备知识图中第一行是可执行程序 test.exe 的输出,第二行则不是.第二行是由 Visual Studio 6.0 开发环境执行完 test.exe 程序后输出的,表示"按任意键继续",即按任何一个键就可返回到开发环境中去.到此为止,本节就完整演示了在 Visual Studio 6.0 中开发一个典型的C++ 程序的过程.1.3 程序结构程序结构是程序的组织结构,指该程序语言特定的语句结构,语法规则和表达方式,其内容包括代码的组织结构和文件的组织结构两部分.只有严格遵守这种规则,才能编写出高效,易读的程序.否则写出的代码将晦涩难懂,甚至不能被正确编译运行.1.3.1 第一个程序在这一节将通过一个简单程序向读者讲解 C++程序的基本结构,同时也说明 C++程序中输入输出操作的方法,以方便后续章节中的讲解. 【示例 1-1】实现从命令行读入一个整数,然后加 1 再输出结果./*第一部分*/ //这是一个演示程序,它从命令行读入一个整数,然后加 1 再输出 /*第二部分*/ #include /*第三部分*/ int main() { int x; cout<<"输入整数:"; cin>>x; x=x+1; cout<<"x=x+1="<<x<<endl; return 0; }C++程序通常会包括示例中所示的 3 部分. 1.第1个部分——注释部分第 1 部分是整个文件的注释,指出该文件的作用和版权等信息. 2.第2部分——预处理部分第 2 部分是预处理部分,既在编译前要处理的工作.这里是以#include 说明的头文件包含代码#include ,它指示编译器在预处理时,将文件 iostream.h 中的代码嵌入到该代码指示的地方. 其中#include 是编译指令. 头文件 iostream.h 中声明了程序需要的输入输出操作的信息.15第1篇面向过程的 C++编程注意:在 VisualStudio 中,有时还会看到#include 的引入方式,这也是 Visual Studio 中鼓励使用的方式.但是采用这种方式时,还需要用"using namespace std;" 引入 std 命名空间;否则系统会提示 cin 和 cout 找不到.3.第3部分——主要部分第 3 部分是代码的主要部分,它实现了一个函数,结构如下: int main() { … return 0; }其中,花括号包含了实现该函数所需的代码.C++规定每个可执行程序都有且只能有一个名为 mian 的函数,它表示了程序的入口点.当 C++程序执行时,首先执行该函数,然后从该函数内调用其他需要的操作.下面依次分析每行代码的功能. 第 1 条代码 int x 表示定义一个对象,并命名为 x.末尾的分号表示这条代码到此结束. 第 2 条语句使用 cout 流输出一行文字.其中,cout 是一个代表标准输出设备(在这里指显示器)的对象,它是 C++中预定义的系统对象.当程序要向输出设备输出内容时,就需要在程序中使用该对象.输出的操作符用"<<"表示,它表示将操作符右边的内容输出到操作符左边的对象上.代码中操作符左边的内容用双引号包含起来,这表示它是一个字符串.因此,代码"cout<<"输入整数:";"将在标准输出设备上输出字符串文字"输入整数:". 第 3 条语句 cin>>x 中,cin 是一个代表标准输入设备(一般指键盘)的对象,也是 C++中预定义的对象. 当程序需要从输入设备接收输入时, 就需要在程序中使用该对象.输入的操作符是">>",它表示将从操作符左边接收的输入放到右边的对象中. 当程序执行到该代码处时,将停止并等待来自标准输入设备的输入.输入完毕后, 按下 Enter 键,cin 接收输入并将输入放到相应的对象中,然后跳到下一条代码开始执行. 第 4 条语句 x=x+1 中,"+"号表示加法运算,既将加号两边的对象相加."="号表示赋值,它将符号右边的运算结果放到符号左边的对象中.因此,该代码表示将对象 x 保存的值加 1 再放回 x 中. 第 5 条语句仍然是一条在标准输出设备上输出文字的代码.它包含 3 个输出操作符, 第 1 个操作输入了文字 x=x+1.第 2 个操作符输出对象 x 保存的值.第 3 个操作符的右边是 endl,它表示一个"回车换行"操作.因此,该代码在输出前两个文字后就将光标跳到新的一行上去. 第 6 条语句 return 0 是一条跳出程序的代码.它表示从程序跳出并返回到操作系统, 同时带有一个数字 0 作为返回值.注意:有些编译器并不要求 main 函数一定返回值,例如 Visual却要求必须有返回值,如开源软件 MinGW.16C++.但是,有些编译器第1章C++预备知识1.3.2 文件的组织当程序较小时,用一个文件就可以保存所有代码.但是有实际用途的程序一般都不会太小.所以,通常会将程序分成几个文件分别保存,再通过包含语句放到一起.这种做法既有利于模块化开发,也有利于代码的重用. C++的程序的文件类型有.h 和.cpp 两种,前者是头文。

从零开始学VC系列教程完整版

从零开始学VC系列教程完整版

从零开始学V C系列教程完整版Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8从零开始学VC系列教程一.信息显示实验题外话:第一次写教程,不知道该怎么开始.以前见过的教程可能都会介绍比较多的理论然后才开始讲实际操作,我想对于VC,理论讲得太多大家可能更糊涂,所以选择了这个方案,我们先一步步照着做,每一次只介绍一两个知识点,并且把理论放在后面说明,希望大家能喜欢这种方式,并对这种方式提出意见和建议,以便以后章节更适合大家的学习.或许我写的还不能称之为教程,只是一些操作步骤及说明,通过这些练习,希望能使大家对VC有一个新的认识.VC的功能是十分强大的,但我们一般并不会用到所有的功能,就像大家熟悉的KeilC一样,其实Keil功能也是很多的,平时也没见谁把Keil的功能都用到了.基于此,我写的这个教程可能在VC专业人士看来比较简单.不是要班门弄斧,而是希望推行上位机技术,形成一个氛围让大家来学习交流,PC机与下位机结合毕竟也是发展的一个方向.望高手谅解小辈的不自量力.同时,我们结合单片机编程,让大家明白上位机控制方法及原理,当然这是今后章节的内容了.本节内容:学会在文本框中显示文本,学会弹出式对话框使用.学习目的:信息显示是人机交互的基础,同时,信息显示也为以后的程序调试打下基础.1.新建工程.打开点击[文件]->[新建],弹出如下对话框.在工程选项中选择MFCAppWizard[exe],选择好工程存入的位置,然后在工程名称中填入工程的名称,例如Eg01,填入Eg01后.VC会在我们选择的路径后自动加入一个以工程名命名的文件夹作为工程目录.完成按[确定]就会进入工程向导,出现以下的提示.在这个我们选择[基于对话框]就行了.单文档及多文档方式会在以后详细介绍.这里也简要说明一下.①单文档.程序一次只能处理一个文档对象(文件).像写字板,记事本等.②多文档.程序一次可以处理多个对象(文件),像word之类的,可以同时打开多个文件.③基本对话框.程序一般用于处理一些比较小的,工具型的软件.像双龙的ISP下载软件, Easy 51Pro等都是基于对话框.一些不是很复杂的工业软件也通常可以用基于对话框的形式,这种方式的优点是所见即所得,一些控件可以像VB一样拖到工作区就行了.选好以后直接按[完成]就可以了.至于[下一步]的向导,这里我们先不管.然后会进入以下的画面.其中红色及绿色是我的标注,看不清图片可以下载图片放大.选中静态文本框[TODO:在这里设置对话框控制],单击指标右键,在弹出的快捷菜单中选择[属性Properties]菜单项,弹出如下对话框修改IDC_STATIC为IDC_FIRSTLABEL,标题可以写为”第一个应用程序”然后关闭这个对话框,就可以看到刚才的静态文本框内容变为”第一个应用程序”了.在刚才的操作中,我们将静态文本框的ID改为了IDC_FIRSTLABEL,在VC中,ID是控件的标志,不能有相同的ID出现,但允许多个名为IDC_STATIC的ID号.所以,一般并不把文件名命为IDC_STATIC,除非以后我们不想在程序中改变这个控件的属性.有一些控制,例如GroupBox一般并不在程序中改变什么,所以不改变其ID号.ID是程序访问控件的标识,所以一个应用程序中不能有重复ID.按下来我们要添加一个按钮.用鼠标将控件条上的按钮拖到对话框上,可以看到对话框上多了一个按钮.用上叙方法,改变按钮ID为IDC_BTN1,标题改为”显示”,这样就做好一个按钮了.下面我们为按钮添加代码.双击按钮,会出现以下的提示框.按[OK]为按钮添加响应函数,出面以下画面void CEg01Dlg::OnBtn1(){然,现在还没有响应.现在我们添加一个事件,让这个按钮按下后上面的静态文本框的内容变为”串口号:COM1 波特率:57600”把上面的代码改为void CEg01Dlg::OnBtn1(){57600”果编译通过,按F5运行,可以看到程序运行后的对话框按下按钮,可以看到上面的静态文本框的内容改变了.那么恭喜你,完成我们这个例子的第一步操作了.当然,我这里的对话框看起来没那么高,大家可以调一下高度.怎么退回到控件编辑状态呢首先,我们单击选项卡中的[ResorceView],现在大家只能看到[Reso…]看到IDD_EG01_DIALG了吧,这个其实也是一个ID,是我们对话框的ID,如果大家改一下对话框的ID,就可以看到这里的ID也变了.在VC中,所有的控件都认为是窗体,只是形式不同.双击IDD_EG01_DIALG就可以看到我们刚才的控制编辑状态了.双击[显示]按钮又可以回到代码状态.刚才的例子很简单,却是我们以后会用得最多的.下面我们来分析一下代码void CEg01Dlg::OnBtn1(){57600”面我们提到过,VC中的控件都认为是窗体,所以,对于所有的文本显示,我们都可以用这个函数来做,大家可以试着加入一个编辑框(Edit),同样可以使用用这个函数,只要ID号对了就可以了.VC对大小写敏感,大家要注意大小写.下面我们用另一个方法来实现.把代码改为void CEg01Dlg::OnBtn1(){57600”以看到运行结果是一样的.大家可以看到,我们把变量a定义为CString类型,这个类型我们在C中可能没有见过.CString其实是VC中的一个类.这里我们要引入类的概念了.类跟C语言结构体很像,结构体可以有成员变量,但不能有成员函数,类不但可以有成员变量,还可以有成员函数,并且支持多种方法.在VC中,类用class标识.下面是一个类的定义,我们来分析一下.class CEg01Dlg : public CDialog{public:CString GetPath(void);protected:int GetMax(int a,int b);public:int a;int b;};这个类是我改过的,为了大家看得明白一点.首先,我们从这句class CEg01Dlg : public CDialog知道这个类名是CEg01Dlg,那么public后面的CDialog是什么意思呢CDialog其实也是一个类,是VC中标准对话框类. public CDialog意思是我们定义的这个类CEg01Dlg从CDialog派生,也叫从CDialog继承,从继承这个词语大家就会明白CEg01Dlg不但可以有自身函数,而且还可以用到CDialog里的变量及函数,所以说是继承,就像我们说的继承财产一样,儿子不但可以有自己的钱,还有从老爸那里继承的产财,这些钱都能花.所以,我们也叫CDialog为父类(不是爸类啊),把CEg01Dlg称为子类.当然,这是相对的.如果再定义一个类从CEg01Dlg派生,那么CEg01Dlg也就是父类,派生出来的类就是子类.这段可能有点难明白,大家可以慢慢体会.我们再回到CString上面来,这个类不是派生的,所以也没有父类了.用CString定义一个变量a,我们称为类变量,CString有很强大的功能,我们这里只用到一个功能,就是字符串,a可以是一个不定长度的字符串,所以我们可以给a赋一个任意的字符串而不用关心长度.当然,我们也可以用int StringLen=();来获得这个字符串的长度.从这句可以看到,GetLength()是类CString里的一个函数.大家可能又会关心一个问题,怎么把长度显示出来呢我们把代码改为void CEg01Dlg::OnBtn1(){式化后的字符串还是存放在a中,在这里,我们还用到了一个新的函数MessageBox();我们只是用了这个函数最简单的用法,显示一个字符串.MessageBox用于弹出一个提示对话框.查查MSDN就知道,函数原型是int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );在VC里面,函数可以有默认值,例如LPCTSTR lpszCaption = NULL, UINT nType = MB_OK变量lpszCaption的默认值是NULL, nType的默认值是MB_OK,这些有默认值的变量我们可以不传值,所以这个函数使用时,最简单的用法就是传lpszText就可以了.如果我们要显示一个固定的字串,可以这样调用MessageBox(“大家好”);是不是很简单啊这一章就写到这里了,一些问题大家可以提.未尽知识点,会在以后再详细介绍.从零开始学VC系列教程二. 对话框及常用控件实验恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现.本节内容:学会对话框调用及一些常用控件的使用方法.学习目的:学习人机交互,为软件开发提供界面基础.1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到程序运行了.单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了.当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption改为[关于].最终效果如下下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图单击标签ClassView(这里显示的是[Class…])就可以看到Eg02这个应用程序的类.第一个CAboutDlg就是关于对话框的类.CEg02Dlg对应IDD_EG02_DIALOG.中间的Ceg02App是应用程序的基础类.所以,如果要对关于对话框进行操作,就要用到类CAboutDlg,因为与此有关的函数及变量都封装在CAboutDlg中.看到这里大家可能又糊涂了,没关系,在以后的教程中,通过一些练习大家就会慢慢领会到的.这里还是先为[关于]按钮添加代码.void CEg02Dlg::OnBtnAboutme(){们添加代码成以下所示void CEg02Dlg::OnBtnAboutme(){二句是();功能是调用类CAboutDlg里的一个函数DoModal();这个函数在MSDN 里的解释是Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active. This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.一般我们用于显示一个对话框.其实大家看看CAboutDlg这个类下面,只有两个函数DoModal()这个函数并不在这个里面.第一章我们提到过类的派生和继承.其实CAboutDlg这个类是派生于CDialog类,DoModal()这个函数是CDialog的成员函数,由于CAboutDlg是继承父类CDialog的,所以CDialog里的函数在CAboutDlg中也可以使用.下面我们来说说几个常用控件的使用.首先在IDD_EG02_DIALOG对话框中加入一个Edit(编辑框)控件.Edit一般用于输入输出数据文本.相当于VB里的TextBox.加入Edit控件后,编辑其属性为然后,我们再加一个按钮(PushButton),并编辑其属性为接下来,我们先说一下要实现的效果.很简单,在编辑框里输入一个文本,然后按显示,就把文本显示在静态文本框中.所以,这里要把静态文本编辑框的ID改为IDC_DISPLABEL 下面我们为[显示]按钮添加代码void CEg02Dlg::OnBtnShow(){查MSDN就知道函数原型了.int GetDlgItemText(int nID,LPTSTR lpStr,int nMaxCount)const;int GetDlgItemText( int nID, CString& rString ) const;大家看看就觉得奇怪了,怎么有两个原型啊并且一个是传两个参数,另一个是传三个参数.在VC里面,同一个类下是可以存在多个同名函数的,具体调用哪个函数要看参数的不同.在这里我们传入了两个参数,所以VC会调用int GetDlgItemText( int nID, CString& rString ) const;这个函数.第一个函数是控件的ID号,第二个是字串.第二个传了地址,所以我们在下一句中用的a已经是获得IDC_EDIT_INPUT的文本了.运行效果如下下面介绍一下进度条的使用以及定时器的使用.我们要实现的效果是进度从0到满格,然后再从0到满格,依次循环.每跳一格间隔500ms,这个时间我们用定时器来实现.首先从控件条里拖出一个进程条到对话框,修改属性如下然后我们要介绍一下VC的定时器.VC里面使用定时器有多种方式,我们先介绍一种作为抛砖引玉首先添加一个Windows消息处理器.消息这个词语可能很陌生,我们会在后面很多次说明.这里先照图做在类管理器里选中Ceg02Dlg这个类,然后点右键,就会弹出一个菜单,选择[Add Windows Message Handler…],接下来会弹出另一个菜单双击WM_TIMER然后按[确定]就可以了.大家会看到,CEg02Dlg类中多了一个函数这个就是VC中的定时器响应函数.然后双击这个函数就进入代码了然后我们为Timer事件添加代码.void CEg02Dlg::OnTimer(UINT nIDEvent){认时,进度条0为空,100为满格.从后的程序大家可以看到,这个变量自加到100就变为0.最难理解的就是((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);首先, GetDlgItem(IDC_PROGRESS)这个函数用来获取IDC_PROGRESS的句柄,在VC里面引入了句柄这个词语,我们将在下一章中对消息和句柄进行详细的说明, 句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

零起点配套课件VC-01课

零起点配套课件VC-01课
03 为专业课程学习打下基础
本课程作为专业课程的先修课,将为学生后续学 习编程、数据库、信息系统等课程奠定基础。
课程大纲
计算机基础知识
介绍计算机的组成、操作系统、文件管理 等内容。
互联网基础
讲解互联网浏览、电子邮件、网络搜索等 基础知识。
办公软件操作
教授Word、Excel、PowerPoint等办公 软件的使用方法。
SQL语言
详细解析SQL语言,包括查询、插入、 更新和删除数据等操作,以及如何使 用SQL进行复杂的数据处理和分析。
数据库设计和优化
介绍数据库设计的基本原则和技巧, 以及如何优化数据库性能和查询效率。
网络编程
网络基础
Socket编程
介绍网络协议和网络编程的基本概念,如 TCP/IP协议栈、HTTP协议等。
本课程总结
• 难点:如何将理论知识与实践操作相结合,提高实际应用能力。
本课程总结
课程评价与反馈
收集学生和教师的反馈意 见,为后续课程的改进提 供依据。
通过测验、作业和课堂表 现等多方面评价学生的学 习效果。
下一步学习计划
深化知识点 进一步学习与零起点配套课件相关的理论知识和实践技巧。
探索更多实际案例,加强理论与实践的结合。
购物车功能
将商品加入购物车,计算 购物车总价。
订单生成与支付
生成订单,支持多种支付 方式。
项目三:社交网络平台
项目目标
构建一个能够让用户发布 动态、评论和点赞的社交 平台。
用户注册与登录
注册新用户,支持用户登 录。
动态发布与查看
发布个人动态,查看他人 动态。
评论与点赞功能
对动态进行评论和点赞。
05
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从零开始学VC系列教程一.信息显示实验题外话:第一次写教程,不知道该怎么开始.以前见过的教程可能都会介绍比较多的理论然后才开始讲实际操作,我想对于VC,理论讲得太多大家可能更糊涂,所以选择了这个方案,我们先一步步照着做,每一次只介绍一两个知识点,并且把理论放在后面说明,希望大家能喜欢这种方式,并对这种方式提出意见和建议,以便以后章节更适合大家的学习.或许我写的还不能称之为教程,只是一些操作步骤及说明,通过这些练习,希望能使大家对VC有一个新的认识.VC的功能是十分强大的,但我们一般并不会用到所有的功能,就像大家熟悉的KeilC一样,其实Keil功能也是很多的,平时也没见谁把Keil的功能都用到了.基于此,我写的这个教程可能在VC专业人士看来比较简单.不是要班门弄斧,而是希望推行上位机技术,形成一个氛围让大家来学习交流,PC机与下位机结合毕竟也是发展的一个方向.望高手谅解小辈的不自量力.同时,我们结合单片机编程,让大家明白上位机控制方法及原理,当然这是今后章节的内容了.本节内容:学会在文本框中显示文本,学会弹出式对话框使用.学习目的:信息显示是人机交互的基础,同时,信息显示也为以后的程序调试打下基础.1.新建工程.打开VC6.0点击[文件]->[新建],弹出如下对话框.在工程选项中选择MFC AppWizard[exe],选择好工程存入的位置,然后在工程名称中填入工程的名称,例如Eg01,填入Eg01后.VC会在我们选择的路径后自动加入一个以工程名命名的文件夹作为工程目录.完成按[确定]就会进入工程向导,出现以下的提示.在这个我们选择[基于对话框]就行了.单文档及多文档方式会在以后详细介绍.这里也简要说明一下.①单文档.程序一次只能处理一个文档对象(文件).像写字板,记事本等.②多文档.程序一次可以处理多个对象(文件),像word之类的,可以同时打开多个文件.③基本对话框.程序一般用于处理一些比较小的,工具型的软件.像双龙的ISP下载软件,Easy 51Pro等都是基于对话框.一些不是很复杂的工业软件也通常可以用基于对话框的形式,这种方式的优点是所见即所得,一些控件可以像VB一样拖到工作区就行了.选好以后直接按[完成]就可以了.至于[下一步]的向导,这里我们先不管.然后会进入以下的画面.其中红色及绿色是我的标注,看不清图片可以下载图片放大.选中静态文本框[TODO:在这里设置对话框控制],单击指标右键,在弹出的快捷菜单中选择[属性Properties]菜单项,弹出如下对话框修改IDC_STATIC为IDC_FIRSTLABEL,标题可以写为”第一个应用程序”然后关闭这个对话框,就可以看到刚才的静态文本框内容变为”第一个应用程序”了.在刚才的操作中,我们将静态文本框的ID改为了IDC_FIRSTLABEL,在VC中,ID是控件的标志,不能有相同的ID出现,但允许多个名为IDC_STA TIC的ID号.所以,一般并不把文件名命为IDC_STATIC,除非以后我们不想在程序中改变这个控件的属性.有一些控制,例如GroupBox一般并不在程序中改变什么,所以不改变其ID号.ID是程序访问控件的标识,所以一个应用程序中不能有重复ID.按下来我们要添加一个按钮.用鼠标将控件条上的按钮拖到对话框上,可以看到对话框上多了一个按钮. 用上叙方法,改变按钮ID为IDC_BTN1,标题改为”显示”,这样就做好一个按钮了.下面我们为按钮添加代码.双击按钮,会出现以下的提示框.按[OK]为按钮添加响应函数,出面以下画面void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code here}这一段就是刚才按钮的函数了.当然,现在还没有响应.现在我们添加一个事件,让这个按钮按下后上面的静态文本框的内容变为”串口号:COM1 波特率:57600”把上面的代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereSetDlgItemText(IDC_FIRSTLABEL,”串口号:COM1 波特率:57600”);}添加完成以后,按F7编译.如果编译通过,按F5运行,可以看到程序运行后的对话框按下按钮,可以看到上面的静态文本框的内容改变了.那么恭喜你,完成我们这个例子的第一步操作了.当然,我这里的对话框看起来没那么高,大家可以调一下高度.怎么退回到控件编辑状态呢?首先,我们单击选项卡中的[ResorceView],现在大家只能看到[Reso…]看到IDD_EG01_DIALG 了吧,这个其实也是一个ID,是我们对话框的ID,如果大家改一下对话框的ID,就可以看到这里的ID也变了.在VC中,所有的控件都认为是窗体,只是形式不同.双击IDD_EG01_DIALG就可以看到我们刚才的控制编辑状态了.双击[显示]按钮又可以回到代码状态.刚才的例子很简单,却是我们以后会用得最多的.下面我们来分析一下代码void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereSetDlgItemText (IDC_FIRSTLABEL,”串口号:COM1 波特率:57600”);}看看SetDlgItemText这个函数,大家就会明白了, IDC_FIRSTLABEL是我们给静态文本框分配的ID,后面的参数是要显示的内容.上面我们提到过,VC中的控件都认为是窗体,所以,对于所有的文本显示,我们都可以用这个函数来做,大家可以试着加入一个编辑框(Edit),同样可以使用用这个函数,只要ID号对了就可以了.VC对大小写敏感,大家要注意大小写.下面我们用另一个方法来实现.把代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereCString a;a=”串口号:COM1 波特率:57600”;SetDlgItemText (IDC_FIRSTLABEL,a);}然后按F7编译,无误则按F5运行.可以看到运行结果是一样的.大家可以看到,我们把变量a定义为CString类型,这个类型我们在C中可能没有见过.CString 其实是VC中的一个类.这里我们要引入类的概念了.类跟C语言结构体很像,结构体可以有成员变量,但不能有成员函数,类不但可以有成员变量,还可以有成员函数,并且支持多种方法.在VC中,类用class标识.下面是一个类的定义,我们来分析一下.class CEg01Dlg : public CDialog{public:CString GetPath(void);protected:int GetMax(int a,int b);public:int a;int b;};这个类是我改过的,为了大家看得明白一点.首先,我们从这句class CEg01Dlg : public CDialog 知道这个类名是CEg01Dlg,那么public后面的CDialog是什么意思呢?CDialog其实也是一个类,是VC中标准对话框类. public CDialog意思是我们定义的这个类CEg01Dlg从CDialog派生,也叫从CDialog继承,从继承这个词语大家就会明白CEg01Dlg不但可以有自身函数,而且还可以用到CDialog里的变量及函数,所以说是继承,就像我们说的继承财产一样,儿子不但可以有自己的钱,还有从老爸那里继承的产财,这些钱都能花.所以,我们也叫CDialog为父类(不是爸类啊),把CEg01Dlg称为子类.当然,这是相对的.如果再定义一个类从CEg01Dlg派生,那么CEg01Dlg也就是父类,派生出来的类就是子类.这段可能有点难明白,大家可以慢慢体会.我们再回到CString上面来,这个类不是派生的,所以也没有父类了.用CString定义一个变量a,我们称为类变量,CString有很强大的功能,我们这里只用到一个功能,就是字符串,a可以是一个不定长度的字符串,所以我们可以给a赋一个任意的字符串而不用关心长度.当然,我们也可以用int StringLen=a.GetLength();来获得这个字符串的长度.从这句可以看到,GetLength()是类CString里的一个函数.大家可能又会关心一个问题,怎么把长度显示出来呢?我们把代码改为void CEg01Dlg::OnBtn1(){// TODO: Add your control notification handler code hereCString a;a=" 串口号:COM1 波特率:57600";SetDlgItemText (IDC_FIRSTLABEL,a);a.Format("字符串的长度:%d",a.GetLength());MessageBox(a);}运行一下,效果如下这里我们用到了类Cstring的另一个成员函数Format();这个函数用起来跟C语言里的Printf()很像,我就不多说明了.格式化后的字符串还是存放在a中,在这里,我们还用到了一个新的函数MessageBox();我们只是用了这个函数最简单的用法,显示一个字符串.MessageBox用于弹出一个提示对话框.查查MSDN就知道,函数原型是int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); 在VC里面,函数可以有默认值,例如LPCTSTR lpszCaption = NULL, UINT nType = MB_OK变量lpszCaption的默认值是NULL,nType的默认值是MB_OK,这些有默认值的变量我们可以不传值,所以这个函数使用时,最简单的用法就是传lpszText就可以了.如果我们要显示一个固定的字串,可以这样调用MessageBox(“大家好”);是不是很简单啊?这一章就写到这里了,一些问题大家可以提.未尽知识点,会在以后再详细介绍.从零开始学VC系列教程二. 对话框及常用控件实验恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现.本节内容:学会对话框调用及一些常用控件的使用方法.学习目的:学习人机交互,为软件开发提供界面基础.1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢?我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢?其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到程序运行了.单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了.当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢?为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption 改为[关于].最终效果如下下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图单击标签ClassView(这里显示的是[Class…])就可以看到Eg02这个应用程序的类.第一个CAboutDlg就是关于对话框的类.CEg02Dlg对应IDD_EG02_DIALOG.中间的Ceg02App是应用程序的基础类.所以,如果要对关于对话框进行操作,就要用到类CAboutDlg,因为与此有关的函数及变量都封装在CAboutDlg中.看到这里大家可能又糊涂了,没关系,在以后的教程中,通过一些练习大家就会慢慢领会到的.这里还是先为[关于]按钮添加代码.void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code here}上面是VC为[关于]按钮添加的响应函数.我们添加代码成以下所示void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code hereCAboutDlg ADlg;ADlg.DoModal();}一共有两句,第一句是CAboutDlg ADlg;作用是定义一个变量Adlg.第二句是ADlg.DoModal();功能是调用类CAboutDlg里的一个函数DoModal();这个函数在MSDN里的解释是Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active. This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.一般我们用于显示一个对话框.其实大家看看CAboutDlg这个类下面,只有两个函数DoModal()这个函数并不在这个里面.第一章我们提到过类的派生和继承.其实CAboutDlg这个类是派生于CDialog类,DoModal()这个函数是CDialog的成员函数,由于CAboutDlg是继承父类CDialog的,所以CDialog里的函数在CAboutDlg中也可以使用.下面我们来说说几个常用控件的使用.首先在IDD_EG02_DIALOG对话框中加入一个Edit(编辑框)控件.Edit一般用于输入输出数据文本.相当于VB里的TextBox.加入Edit控件后,编辑其属性为然后,我们再加一个按钮(PushButton),并编辑其属性为接下来,我们先说一下要实现的效果.很简单,在编辑框里输入一个文本,然后按显示,就把文本显示在静态文本框中.所以,这里要把静态文本编辑框的ID改为IDC_DISPLABEL下面我们为[显示]按钮添加代码void CEg02Dlg::OnBtnShow(){// TODO: Add your control notification handler code hereCString a;GetDlgItemText(IDC_EDIT_INPUT,a);SetDlgItemText(IDC_DISPLABEL,a);}其实不复杂,也只有三句,第一句定义一个CString类变量a 我们来说说GetDlgItemText这个函数吧.查查MSDN就知道函数原型了.int GetDlgItemText(int nID,LPTSTR lpStr,int nMaxCount)const;int GetDlgItemText( int nID, CString& rString ) const;大家看看就觉得奇怪了,怎么有两个原型啊?并且一个是传两个参数,另一个是传三个参数.在VC里面,同一个类下是可以存在多个同名函数的,具体调用哪个函数要看参数的不同.在这里我们传入了两个参数,所以VC会调用int GetDlgItemText( int nID, CString& rString ) const;这个函数.第一个函数是控件的ID号,第二个是字串.第二个传了地址,所以我们在下一句中用的a已经是获得IDC_EDIT_INPUT的文本了.运行效果如下下面介绍一下进度条的使用以及定时器的使用.我们要实现的效果是进度从0到满格,然后再从0到满格,依次循环.每跳一格间隔500ms,这个时间我们用定时器来实现.首先从控件条里拖出一个进程条到对话框,修改属性如下然后我们要介绍一下VC的定时器.VC里面使用定时器有多种方式,我们先介绍一种作为抛砖引玉首先添加一个Windows消息处理器.消息这个词语可能很陌生,我们会在后面很多次说明.这里先照图做在类管理器里选中Ceg02Dlg这个类,然后点右键,就会弹出一个菜单,选择[Add Windows Message Handler…],接下来会弹出另一个菜单双击WM_TIMER然后按[确定]就可以了.大家会看到,CEg02Dlg类中多了一个函数这个就是VC中的定时器响应函数.然后双击这个函数就进入代码了然后我们为Timer事件添加代码.void CEg02Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default IDC_PROGRESS static int nPos=0;((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);if(nPos<100) nPos+=10;else nPos=0;CDialog::OnTimer(nIDEvent);}首先定义一个整型的变量nPos用于记录进度条的进度值.默认时,进度条0为空,100为满格.从后的程序大家可以看到,这个变量自加到100就变为0.最难理解的就是((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);首先, GetDlgItem(IDC_PROGRESS)这个函数用来获取IDC_PROGRESS的句柄,在VC里面引入了句柄这个词语,我们将在下一章中对消息和句柄进行详细的说明, 句柄是WINDOWS 用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

相关文档
最新文档