Visual C++学习摘要.doc_第1页
Visual C++学习摘要.doc_第2页
Visual C++学习摘要.doc_第3页
Visual C++学习摘要.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+和C#各有优缺,目前我对它们俩的定位是:C+用来写一些底层的程序,比如驱动,或者是一些算法类型的函数接口,然后用C#来调用这些接口并进行界面设计。.dll动态链接库不能发送消息,ActiveX控件可以发送事件和消息。一 Windows Socket是实现网络程序的一种简单方式。Socket是连接应用程序与网络驱动程序的桥梁,Socket在应用程序中创建,通过绑定操作与驱动程序建立关系。此后,应用程序送给Socket的数据,有Socket交给驱动程序向网络上发送出去。计算机从网络上收到的与该Socket绑定的IP地址和端口号相关的数据后,由驱动程序交给Socket,应用程序便可从该Socket中提取收到的数据。网络应用程序就是这样通过Socket进行数据的发送与接收的。二 IP地址标志世界上唯一的一台电脑,知道两台电脑的IP地址就可以进行网络通信。但网络通信的内容很多,可以是QQ聊天,可以是发送邮件,或新闻浏览,到底进行何种网络服务,由端口号决定。端口号就相当于电话机中的分机。端口号用一个16位整型标识符来表示,与协议有关。范围是0-65536,1024以下的端口号保留给预定义的服务。编写网络应用程序是,要为程序指定1024以上的端口号。三 在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。四 纯虚函数是指被标明为不具体实现的虚成员函数。五 注册表 是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。在没有注册表的情况下,操作系统不会获得必须的信息来运行和控制附属的设备和应用程序及正确响应用户的输入。注册表由键(或称“项”)、子键(子项)和值项构成。一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键。一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成。一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。各主键的简单介绍HKEY_LOCAL_MACHINE HKEY_LOCAL_MACHINE是一个显示控制系统和软件的处理键。HKLM键保存着计算机的系统信息。它包括网络和硬件上所有的软件设置。(比如文件的位置,注册和未注册的状态,版本号等等)这些设置和用户无关,因为这些设置是针对使用这个系统的所有用户的。在向注册表中写入软件信息时,通常都是在HKEY_LOCAL_MACHINE分支下写入的。HKEY_LOCAL_MACHINEConfig01Display 这个键表示显示的设置,如荧屏字体,窗体大小,窗体位置和分辨率等VC+对注册表操作,注册表类CRegKey类提供了处理系统注册表键的功能。注册表包含着系统组件的安装细节的设置。例如,软件的版本号、安装硬件的物理和逻辑映射或者是COM组件。CRegKey类为一台给定的计算机的系统注册表提供了一个编程接口。例如,打开一个注册表键,调用成员函数Open;检取一个注册表键,调用成员函数QueryValue;修改一个注册表键,调用成员函数SetValue;关闭一个注册表键,调用成员函数Close。当关闭一个注册表键,注册表的数据将被写入硬盘。这一过程可能需要几秒钟的时间。如果你需要将注册表的数据准确地写入硬盘,可以调用Windows API函数RegFlushKey,由于该函数需要使用更多的系统资源,因此除非在必要的情况下否则最好不使用该函数。【库 名】哈稀表:是一种数据结构对于动态查找表而言,1) 表长不确定;2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的位置,通常称这个函数f(key)为哈希函数。(注意:这个函数并不一定是数学函数) 六 ActiveX控件(后缀一般为.ocx),一个典型的ActiveX控件具有方法、属性、事件这三种特性。所有ActiveX控件必须注册后才能使用,regsvr32程序作用就是注册ActiveX控件。注册就是将控件的信息,包括其所在路径写入注册表中,容器应用程序使用它时就会在注册表中搜索所用控件的相关信息,然后再使用它。删除ActiveX控件的注册信息:开始运行regsvr32 /u 想要删除的ActiveX控件的完整路径注册ActiveX控件信息不需加/u选项。利用Build命令生成某个控件程序,然后在该工程所在目录下的Debug目录下,可以看到生成了一个*.ocx文件,这就是生成的ActiveX控件文件,在使用时,只需将这个文件传递给使用方,经过注册后就可以使用该控件了。制作一个时钟ActiveX控件的步骤:1 file/new/MFC ActiveX ControlWizard,工程名为ClockActiveX,该界面第1个选项表示包含多少个ActiveX控件,No runtime license表示运行时不需要得到许可就可以运行2 Next/Finish,则利用向导自动生成了三个类,有小勺一样的图标的表示对应的项是接口,接口是控件与外部程序进行通信的协议。可以把接口看做是函数的集合,外部程序通过这个接口所暴露出来的方法去访问控件的属性和方法,实际上,可以把接口看做是一个抽象基类,在此接口中定义的函数都是纯虚函数,这些函数的实现是在C*Ctrl类中完成的。例如:主板和显卡的通信是通过主板上的插槽完成的,插槽是主板和显卡进行通信的接口。3 Build就可以生成控件程序*.ocx4 运行,单击右向箭头,在弹出的对话框中选择ActiveX Control Test Container菜单项,选择它作为ActiveX控件的容器。该容器位于Common/Tools,程序名为TSTCON32.EXE5 加载特定的ActiveX控件,Edit/Ensert New Control菜单项,快速按下控件首字母,定位到刚生成的控件,然后单击OK,MFC默认生成的控件是画一个椭圆。6 对控件进行完善。为控件添加标准属性Class Wizard/Add Property.,单击External name(外部名称)下拉列表框,选择属性。Stock Property即常规的,或储备的属性。GetBackColor()返回值类型是OLE_COLOR,需通过COleControl类的另一个成员函数:TranslateColor将这种类型的值转换成我们通常使用的颜色类型COLORREF类型的颜色值。7 为控件添加自定义属性,同步骤6,外部名称自己定义,系统自己添加内部变量名,和一个当外部属性被修改时就会调用的函数。在此函数中添加特定功能代码。通过步骤5加载控件后,单击ControlInvole Methods菜单项,可以测试控件的属性。得到某个属性用PropGet类型的方法,设置某个属性用PropPut类型,单击Set Value按钮,然后单击Invoke8 添加标准事件,ClassWizardActiveX Events选项卡选择类名C*Ctrl,选择标准事件OKsorce标志表示_D*Events接口是一个源接口。源接口表示控件将使用这个接口来发送通知事件,这个接口不是控件本身实现的接口。作为利用接口通信的双方,一方调用接口所暴露出来的方法,另一方实现该接口所提供的方法。我们实现的控件就是调用_D*Events接口提供的方法,由容器来实现它。9 添加自定义事件:可通过ClassWizard实现,也可在D*Event接口上单击鼠标右键,弹出的菜单中选择Add Event,打开添加事件对话框。若添加的事件外部名称设置为:NewMinute,系统自动设置内部名称FirevNewMinute,这样,在_D*Events接口增加了方法NewMinute,在C*Ctrl类中加了FireNewMinute方法。在控件内部,就可以调用FireNewMinute方法向容器发出事件通知,在此方法内部,它会调用_D*Events接口中的NewMinute方法向容器发出事件通知。对标准事件,其触发过程由MFC底层实现,但对自定义事件来说,必须要在某个条件到了时,在代码中显示的调用某个函数发出该事件通知。10 属性的持久性:在DoPropExchange函数中提供了对控件属性持久性的支持。即在此函数中调用PX_开头的函数,如PX_Short,PX_Long等,例如:PX_Short(pPX,”Interval”,m_interval,1000);/ ”Interval”为提供给外部程序使用的属性的名称。/ m_interval为与属性相关联的的类的成员变量。1000是为该属性指定的一个默认值。自定义属性修改属性时,虽然控件内部得到了通知,但容器外部还没有得到通知,应调用COleControl类的成员函数:BoundPropertyChanged,该函数通知容器绑定的属性值已经发生了改变。BoundPropertyChanged(0x1); /通知容器绑定的属性值发生了改变,0x1是调度ID11 修改了控件代码,需删除.tcs文件,否则运行出错。因为重新编译意味着生成了新的控件,以前的容器不能用。12 环境属性:设计模式和运行模式。利用COleControl类的成员函数:AmbientUserMode可以得到该环境属性,返回值是BOOL类型,若处于用户模式即运行模式,返回非0值,如果处于设计模式,则返回0值。ActiveX Control Test Container容器中单击OptionsDesign Mode菜单在设计模式和运行模式之间进行切换。13 发行ActiveX控件:VC+打开工程,BuildSet Active Configuration*-Win32 Release OK,重新Build生成控件程序即可。14 MFC中添加ActiveX控件的方法:a)在资源对话框空白处右击,选择Insert ActiveX Control,在弹出的对话框中选择你要添加的控件,单击OK。b)方法二:ProjectAdd To Project Components and Controls,双击Registered ActiveX Controls目录,在此目录下寻找要添加的控件,选中,单击Insert按钮,确认。通过此方法加入为控件生成了一个类,其基类是CWnd,该类是控件的封装类,它提供了一些函数,我们只要调用这些函数就可以访问该控件的方法和属性。同时工具箱中增加了该控件的图标。c)方法三:动态的产生一个控件,按照方法二为控件产生一个类,假如为CClock,为对话框类添加私有成员变量m_clock,类型为CClock,并在对话框类的头文件中添加控件类的头文件。然后调用如下语句:m_clock.Creat();七 STL(Standard Template Library )标准模板库是容器类模板和算法的库。使用STL能实现多种标准类型的容器-如堆栈、链表和队列,用不同的方法处理这些容器中的内容。STL有三种构件(容器、算法和包含的数据类型)。在STL编程模型中,有一套标准算法提供容器中对象的查找、复制、重新排序、变换和数值运算功能,同一个算法为所有对象类型的全部容器完成特定操作。所有容器在模板定义中都有公有的管理成员函数:insert、erase,begin,end,size,capacity等。记住:容器类型被当成模板实现,在程序实例化容器时,模板的实参决定了容器包含的对象类型。序列:是一种容器,有三种类型,a)向量(vector)是一种随机访问的序列b)链表(list)是一种可以双向访问的序列c)双端队列(double-ended queue,deque)与向量类似,不同的是双端队列能在容器的头部和末尾快速插入和删除。随机插入和删除占用的时间更长些。结合容器:(associative container)提供快速的访问方式,按关键码访问容器所包含的对象。结合容器由若干关键码对象和一个比较函数构造而成,使用比较函数比较对象。包括std:set,std:multiset,std:map,std:multimap容器。结合容器用于顺序或随机访问大型动态表格。结合容器不使用连贯的数组或链表来组织对象,而使用树形结构。迭代器:(iterator)提供访问容器的公共方法,它们类似c+指针,并具有C+指针的语义,实际上,当参数化类型是C+内部类型(int ,double等)时,结合容器是C+指针。迭代器也被称为智能指针(smart pointer)C+与Java和C#的关系除了C+之外,还有两个重要的现代编程语言:Java和C#。Java是有Sun Microsystems 公司开发的,而C#则是由微软公司开发的。由于人们有事会对C+与Java和C#的关系产生一些混乱,这里有必要对此进行介绍一下。C+是Java和C#之父。尽管Java和C#都是在C+的基础上对语言的特性进行了一下增加,删除和改动,但是总体上来说他们三者的语法是几乎相同的。进一步来说,C+所采用的对象模型和Java,C#的都是相似的。最后,三者给人的总体感觉也是非常相近的。这就意味着,一点学会了C+,就能很轻易的学习Java和C#。 反之亦然,如果你懂Java或者C#学习C+也是很简单的。这就是为什么Java,C#和C+都是用相同的语法和对象模型了,这也是的大量有经验的C+程序员能顺地过渡到是用Java或者C#。他们之间只要的区别在于各自设计针对的计算环境不同。C+是针对制定类型的CPU和造作系统而设计的高性能的语言。例如:如果你想写在windows操作系统下,因特尔奔腾系列的CPU上运行的程序,那么C+是最好的选择。专家答疑问:Java和C#都实现了跨平台和可移植的编程,C+为什么不能了?答:Java和C#之所以能实现跨平台,可移植的编程,而C+不能是因为他们的编译器生成的目标代码不同。就C+而言,编译器的输出时机器代码,这是CPU可以直接执行的。因此它是紧密和指定的CPU以及操作系统绑定的。如果想让C+程序在不同的系统上运行,则需要针对该目标系统进行代码的重新编译。为了让C+程序可以在不同的环境上运行,就需要生成不同的可执行性版本。Java和C#是通过把代码编译成伪码,一种中间语言。就Java而言,这种伪码是在运行时系统上运行的,这就是Java虚拟机。对C#而言,这就是CLR(公共语言运行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论