




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、引 言欢迎使用本书学习Visual C+。本书是在读者已经阅读过有关Visual C+入门书的基础上,进一步介绍Visual C+的内容。本书的主要目的是介绍怎样使用Visual C+来编写专业性的程序。入门书当然不错,但显然,它们所能提供的内容相当有限。拥有了像Visual C+这样功能强大的编程工具包,却不深入学习怎样使用它,的确是太令人遗憾了,因为Visual C+可以让你感到趣味盎然,而要领会到其中的百分之九十,就应该深入学习它。在本书中,作者将带领你游历Visual C+,并挖掘Visual C+的强大功能。本书覆盖的主题从中等功能直到真正的高级功能:从使用Windows注册表,到注
2、册Windows程序的文件类型;从程序失去焦点时作出正确的反应,到确定程序是否已经运行等;本书应有尽有。当然,这并不是意味着通过本书来学习Visual C+困难重重或者要费尽艰辛,至少,这个学习过程比你所想象的要简单些:因为我们尽一切可能清晰地讲解学习内容,而且使之容易领会;你们可以在自己的代码中立即重用这里编写的代码。本书面向的读者是程序员。本书内容在本书开始部分,将快速回顾有关Visual C+的内容,以便能够更快速地进行后续内容的学习,回顾Visual C+能够为本书的其他内容提供足够的基础知识,并且,将注意提供必要的工具和资源。然后,将继续学习Visual C+并开始使用它。下面是在进
3、一步深入学习时本书中将要逐步介绍的一些主题: 编写基于对话框的程序。 使MDI程序具有智能。 调整MDI的视图。 实现文档的滚动。 在同一个MDI程序中使用多个视图类型。 创建HTML视图,Tree(树状)视图,Rich Edit(多信息文本编辑)视图和Form(窗体)视图。 制作拆分窗口。 安装全功能菜单。 使用工具栏和状态栏。 实时改变菜单项。 创建位图菜单项。 在工具栏中安装组合框。 使用弹出式菜单和工具提示。 串行化用户自己的对象。 改变视图中的默认光标。 注册文件的类型和扩展名。 使用剪贴板进行剪切、复制和粘贴。 打印、打印页眉,以及打印编号页面。 使用高级的屏幕图形和屏幕捕获。 写
4、入位图到剪贴板上。 在屏幕上的任意地方画图。 使用元文件实现简易的窗口刷新。 捕获鼠标。 理解内存。 分配和使用虚拟内存。 在运行的进程之间共享内存。 扫描内存以查找程序的位置。 创建Visual C+ Internet会话。 在Internet上使用HTTP、FTP和Ghopher协议。 编写完整的Web浏览器。 使用多任务线程。 在后台执行任务。 在程序中协调多个线程。 创建动态链接库(Dynamic Link Libraries,DLL)。 在DLL之间共享内存。 使用Windows挂钩(hooks)截取Windows事件。 编写一个“热键”程序弹出Windows的计算器。 使用日志挂钩
5、记录和回放按键。 理解COM。 创建OLE包容器。 创建OLE服务器。 编写ActiveX控件。 在现有的Windows控件上把ActiveX控件分成子类(subclass)。 实现Windows编程中的专业技巧。 读写Windows注册表。 使用程序的版本资源。除了上面所有这些主题(还有更多,只不过限于篇幅,这里不再详细列出)之外,本书中还介绍了非常多有用的提示。这是提示在提示中,将介绍一些幕后信息,包括一些未正式说明的Visual C+信息。你还应该了解本书中使用的代码箭头;随着进一步开发示例程序,将逐步在例程中添加越来越多的代码,直到该例程完成为止。每当添加一行新的代码时,就用一个箭头记
6、号来指示这行新代码,使你能够很容易地知道进展状况;还要注意到那些垂直列上的点,这表示还有更多的代码,只不过限于篇幅而省略了。下面是一个带有箭头记号的代码例子:#ifndef _AFXWIN_H_#error include stdafx.h before including this file for PCH#endif#include "resource.h" / main symbols#define DLLexport _declspec( dllexport ).本书是作者多年使用Visual C+经验积累的结晶,书中着重介绍了该程序包中功能最为强大的部分。毫无疑问
7、,Visual C+是当今最主要的编程软件包。如果要在Windows中完成某项功能,那么就可以在Visual C+中完成它。相信,在本书主题的选择上,已经做到非常公正了。本书读者如果你已经阅读过关于Visual C+的入门书,或者已经使用过Visual C+,并且想进一步深入学习的话,那么,本书正适合于你。因为Visual C+是一个巨大的软件包,要确定从Visual C+中到底可以获取什么功能是一件非常困难的事情。本书介绍Visual C+中可用的功能,并将介绍怎样使用这些功能。如果你已经阅读过Visual C+的入门书,那么就已经有一个很好的开端了,这个软件包的其余部分(它是一个巨大的编程
8、工具包)就展现在你面前。但是,只有在你花上一年左右的时间来认真学习Visual C+各种细节的情况下,才能从学习本书中真正受益。在开始学习本书时,确实需要稍许熟悉Visual C+。如果在开始学习第1章(回顾Visual C+)时感到有些困难,那么在继续学习本书的后续内容之前,最好再看一些入门书。本书需求要有效地使用本书,只要拥有Visual C+ 98就可以了。尽管偶尔也使用其他程序,比如Microsoft Word, Microsoft Excel, Windows的写字板,或者Microsoft Windows注册表 Editor(注册表编辑器),但是,使用这些程序只是为了示范的目的;真
9、正的事情均在Visual C+中进行,Visual C+包括了需要用到的所有向导、工具和编辑器。可以看到的一些工具和向导包括AppWizard(应用程序向导)、ActiveX ControlWizard(ActiveX控件向导)、DLL AppWizard(DLL应用程序向导)、OLE Test Container(OLE测试包容器)工具、Menu Editor(菜单编辑器)、Version Resource Editor(版本资源编辑器)、Dialog Editor(对话框编辑器)、Controls and Components Gallery(控件和组件库)等等,还有更多。所有这些都是Vi
10、sual C+的一部分。Visual C+是如此巨大的一个软件包,以致于在本书中所需要的一切都囊括其中。本书的Web站点包括本书程序的代码,有将近40个完整的Visual C+工程可以随时运行。只要把加载它们,编译它们,就可以运行了。该Web站点在你还应该知道另外一个资源,那就是Microsoft Visual C+网页。该网页的URL是,在这里经常了解到非常多的新闻,包括Visual C+的进展情况和许多有特色的站点。你还可以到和这样的Usenet组中查找资源。准备开始现在,即将开始学习Visual C+的一些中高级功能,要真正开始Visual C+的学习,需要有坚固的基础。第1章回顾了Vi
11、sual C+的基本知识。如果对掌握Visual C+的基本知识很有信心的话,就可以跳过第1章,而直接进入第2章。第1章 回顾Visual C+基本知识欢迎使用本书学习Visual C+,本书以Visual C+入门书为基础介绍更深层次的内容,将尽可能深入介绍Visual C+;本书从Visual C+中等深度的内容开始,一直介绍到那些真正高级的主题,从而使你能够真正使用这个功能强大的编程软件工具包。对于Windows高级程序员而言,Visual C+已经成为当今首要的编程软件包,这一点是毋庸置疑的;从编程的深度、强度和范围来看,没有其他任何软件包可以与Visual C+相提并论。如果用户可以
12、通过Windows编程来实现某个功能,那么,就一定可以采用Visual C+编程来实现。Visual C+的功能强大经常意味着程序员往往不知道该软件包中到底有哪些功能可以使用,的确,要熟悉Visual C+编程各个不同的方面,并且能够根据需要来找到合适的工具进行编程是很困难的,这一点不足为奇。本书的目的正在于此,将引导你进行Visual C+的学习,涵盖从中等到高级编程的内容。本书从中等水平的内容开始,比如MDI和菜单的细节,怎样从MFC(Microsoft Foundation Classes,Microsoft基础类)库中使用不同种类的窗口:拆分窗口,HTML窗口,编辑窗口等等;接下来,将
13、把Visual C+所有的这些编程内容综合到一起构成一个实际的程序。在此基础上,将逐步学习Visual C+更为强大的功能:图形处理,比如屏幕捕获和使用元文件;32位内存处理,比如进程间通信;连接到Internet以及创建Web浏览器;使用多线程程序;使用Windows挂钩;创建DLL;使用OLE和COM;使用Windows注册表;创建ActiveX控件;以及更多的内容。本章从回顾Visual C+的基本知识入手,来开始学习之旅;通过本章的回顾,可以为本书后续内容的学习奠定基础,这种对基本知识的回顾显然能够加速对后续内容的学习。首先从回顾Visual C+的概貌和它在众多编程软件包中的地位开始
14、。1.1 为什么需要Visual C+当屏幕上首次出现Windows时,只有Microsoft出品Windows的程序;所有这些Windows程序都是采用专有的Microsoft Windows库来创建的,而这些专有的Windows库对于非Microsoft的程序员来说是不可使用的。来自程序员的压力使得Microsoft出品了Windows SDK(Software Development Kit,软件开发工具包),并且把这些库的集合公布给公众。在早先的那些日子里,许多程序员被Windows SDK吓怕了,经证明:创建Windows程序就意味着在C中使用功能相当差劲的工具来创建长长的代码构成的
15、复杂程序,比如多页使用臭名昭著的switch语句来编程,就是这样的东西构成了整个程序的脊梁;这样的编程意味着要学会大约1000个新的库实用例程,可以想象这种学习的艰难程度。正因为如此,许多程序员对使用Windows SDK编程望而却步。Windows编程起先是在C中完成的,这样的Windows程序很长。已经证明,C+是为处理更长的编程任务而特意开发的,因此,C+是Windows编程的自然语言。1.1.1 C+和Windows在C+中,程序员通过采用封装处理来分割长长的编程任务,这意味着可以把编程任务分割成为能够轻松思考和处理的逻辑功能单元。通过封装,就可以将程序代码和数据结合到编程对象中,这样
16、,程序就分割到这些半独立的对象中了,而这些对象能够按照特意定义的方式彼此进行交互。这个封装处理过程就跟一个人处理复杂任务的方式是完全一样的。例如,驱车到某地时,你就不会去考虑诸如汽油的流向、点火计时、能源驱动等等这些细节问题了,而只是进入到一辆汽车中,然后朝目的地驾驶就行了。因为所有这些细节都会由汽车本身按照其特定的目标自动处理好,所以,用户很容易就直接去考虑到最终对象也就是汽车了。同样,C+允许程序员把编程任务分割成为函数/过程和数据,从而把编程任务分割成为能够以最好的方式解决问题的逻辑单元。例如,一个叫做屏幕的对象可以包含能够处理屏幕的所有函数:其中有些函数对于程序的其他对象是公有的,而有
17、些对于对象而言是私有的,这些私有函数以某种特定的方式去处理对象内部的数据,这种方式隐藏了许多细节,从而使得这个程序更容易处理。因为C+能够用来编写大型的Windows程序,有些制造商就开始出品一些C+ Windows编程软件包,而Microsoft及时推出了Visual C+。但是,Visual C+远不止是C+ for Windows,因为它还包括了MFC库。除了封装之外,C+还支持继承,利用继承,程序员可以从一个类派生出另外一个类来,而MFC充分利用了继承的优势来为程序员提供了数百个基类,在这些基类的基础上,用户能够创建自己的类。Microsoft已经提供了数千行预先写好的代码,可以通过继
18、承来使用这些代码。例如,如果想要创建一个拆分窗口(一个拆分窗口可分割成为两个独立滚动的窗格),只需要使用CsplitterWnd类作为程序员自己窗口类的基类,这样就继承了这个类的所有的功能。剩下来要做的所有工作就是按照自己需要的方式来修改这个新类就可以了。Microsoft已经为完成了许多艰难的工作,这幸运,因为在Windows编程中确实存在着许多艰难的工作。有了Visual C+后,Windows编程就已经真正开始了,因为程序员已经拥有了一个切实可用的编程工具了。很快,Visual C+已经发展成为一个广泛的编程环境,拥有丰富的工具和各种各样的功能。本书将介绍Visual C+必须提供的内容
19、。现在,为了开始本书的学习之旅,来回顾Visual C+编程的基本知识,以确保为本书后续部分内容的学习奠定坚实的基础。本章以创建两个示例程序作为开始:一个基于对话框窗口,另外一个基于SDI(Single Document Interface,单文档界面)。在下一章中,将通过学习MDI(Multiple Document Interface,多文档界面)来扩充视野。现在,就让开始第一个示例程序:HelloDlg。1.2 第一个示例:HelloDlg第一个Visual C+程序将是“基于对话框的”,这意味着程序将使用一个对话框作为其主窗口。这是Visual C+程序中最简单的通用类型,并且,因为它
20、很容易处理,所以首先来看看它。第一个程序Hellodlg展示给用户一个文本框(也叫编辑框或编辑控件)和显示字幕“Click Me”的按钮。 - | | |-| | | | | | | | - - | | | | | Click Me | | | - - | | | | | | | -当用户单击这个按钮时,程序就在文本框中显示一句简单的问候消息:“Hello from Visual C+”: - | | |-| | | | | | | | - - | | | Hello from Visual C+ | | Click Me | | | - - | | | | | | | -通过编写这个程序,将
21、创建第一个Visual C+示例程序,另外还将回顾Visual C+的IDE(Integrated Development Environment,集成开发环境)和ClassWizard(类向导)工具。 创建HelloDlg现在,开始使用Visual C+来创建HelloDlg。打开Visual C+,将显示如图1-1所示的开发环境;选择File(文件)菜单中的New(新建)选项就可以打开New对话框,如图1-2所示。图1-1 Visual C+开发环境图1-2 创建一个新的Visual C+工程Visual C+程序是当作工程来处理的。为了创建第一个工程HelloDlg,请在Project(
22、选项卡)中选中MFC AppWizard(exe)选项,如图1-2所示,在Project name(工程名)框中输入HelloDlg作为工程的名称,另外还输入工程存放的位置(本书将把工程的名称作为文件夹的名称存放在c:avc文件夹中),然后单击OK(确定)按钮就可以关闭New对话框了。单击OK按钮就打开了MFC AppWizard,如图1-3所示;AppWizard是Visual C+的另外一个非常有用的工具,它能够替编写工程的基本框架,通常这样都能够节省大量的时间。图1-3 Visual C+的AppWizard工具单击AppWizard中标有Dialog based(基于对话)的选项按钮,
23、如图1-3所示,然后单击Finish(完成)按钮就创建了基于对话框的HelloDlg工程。最后,单击New Project Information(新工程信息)框中的OK按钮,Visual C+就为创建了HelloDlg工程。这时,Visual C+打开了HelloDlg工程,如图1-4所示,可以看到一个对话框窗口,工程就位于其间。图1-4 HelloDlg工程在图1-4中可以看到,Visual C+已经在对话框上的一个标签中放置了TODO: Place dialog controls here(待做事项:在此放置对话控件)的消息,而要做的第一件事情就是删除这个标签。单击该标签选中它,在标签周
24、围就出现一个由点组成的边框(表示该对象当前被选中),而调整尺寸的控制柄(即边框上的那些小方块)能够让程序员把该标签定位或拉伸到需要的位置。按下Del键删除该标签。现在,准备在这个对话框窗口添加两个必须的新控件:一个文本框和一个命令按钮。使用工具箱来添加控件,工具箱出现在图1-4中的右边。如果控件工具箱没有出现在Visual C+中此时只需要选择Tools(工具)菜单中的Customize(自定义)选项,然后单击Toolsbars(工具栏)选项卡中的Controls(控件)选项就可以了。现在单击工具箱中的文本框工具(图1-4中右边列的第二个工具),就添加了一个文本框,如图1-5所示;然后,使用按
25、钮工具(工具箱上右边列的第三个工具)添加一个命令按钮,如图1-5所示。图1-5 添加控件到HelloDlg工程中既然已经向程序中添加了一个文本框,那么就需要使代码能够访问它,使用Visual C+ ClassWizard来完成这个工作。现在右击该文本框,然后选择ClassWizard选项,如图1-6所示。图1-6 Visual C+的ClassWizard工具为了使程序的其余部分都能够访问该文本框,使用ClassWizard把该文本框中的文本同程序中的一个变量连接起来。现在,选中ClassWizard中该文本框的入口:IDC_EDIT1,如图1-6中所示,然后单击Add Variable(添加
26、变量)按钮;这就打开了Add Member Variable(添加成员变量)对话框,在Member variable name(成员变量名)框中输入m_text,变量类型就采用默认值Cstring (Visual C+的字符串类,用来处理文本字符串),然后单击OK;这样,就在程序中把一个新变量m_text和文本框中的文本关联起来了。单击OK关闭ClassWizard。接下来,将把命令按钮与代码连接,使得当用户单击该按钮时程序能够显示问候消息。右击该按钮来打开Push Button Properties(按钮属性)窗口,然后选择General(常规)选项卡,设置按钮的标题为“Click Me”,
27、然后关闭Push Button Properties窗口,双击该按钮来打开Add Member Function(添加成员函数)对话框,单击该框上的OK按钮来接受该按钮单击事件的默认函数OnButton1;这样就在一个新窗口中打开了新函数OnButton1()的程序代码。void CHelloDlgDlg:OnButton1() / TODO: Add your control notification handler code here.这里,Visual C+已经以C+中一行注释的格式来提示;将用代码来取代这行注释。在上面打开的代码窗口中选中TODO行,然后用下面的两行代码替代它:void
28、 CHelloDlgDlg:OnButton1() m_text= "Hello from Visual C+ " UpdateData(false);在这个例子中,变量m_text的值设置为字符串"Hello from Visual C+",但是它本身并不会在那个文本框中显示该文本;相反,必须调用带有一个FALSE值的UpdateData()函数,用当前m_text中的文本去更新文本框,这就是刚才所做的工作。使用UpdateData()使用FALSE值调用UpdateData()将在文本框中显示当前m_text中的文本;而用TRUE值调用UpdateD
29、ata()将把当前显示在文本框中的文本写入到m_text中。当程序员在屏幕上显示一个对话框(但是,不是像HelloDlg这样基于对话框的程序)时,就并不需要使用UpdateData(),因为会自动调用该函数。现在就可以准备运行程序了。要运行程序,选择Visual C+ Build(编译)菜单中的Build HelloDlg.exe选项,就可以创建HelloDlg.exe;选择Build菜单中的Execute HelloDlg.exe选项,就可以运行该程序了,运行结果如图1-7所示。图1-7 运行HelloDlg程序当用户单击HelloDlg程序中的Click Me按钮时,程序就在文本框中显示“
30、Hello from Visual C+”消息,如图1-7所示。第一个程序成功了,而且,也已经回顾了怎样创建基于对话框的程序的知识。第一个程序的代码列在程序清单1-1中。程序清单1-1 HelloDlgDlg.h和HelloDlgDlg.cpp/ HelloDlgDlg.h : header file/#if !defined(AFX_HELLODLGDLG_H_701B1AC9_9BB7_11D1_887F_D42B07C10710_INCLUDED_)#define AFX_HELLODLGDLG_H_701B1AC9_9BB7_11D1_887F_D42B07C10710_INCLUDE
31、D_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CHelloDlgDlg dialogclass CHelloDlgDlg : public CDialog/ Constructionpublic:CHelloDlgDlg(CWnd* pParent = NULL);/ standard constructor/ Dialog Data/AFX_DATA(CHelloDlgDlg)enum IDD = IDD_HELLODLG_DIALOG ;CStringm_text;/AFX_DATA/ ClassWizar
32、d generated virtual function overrides/AFX_VIRTUAL(CHelloDlgDlg)protected:virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:HICON m_hIcon;/ Generated message map functions/AFX_MSG(CHelloDlgDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(
33、UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnButton1();/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_HELLODLGDLG_H_701B1AC9_9BB
34、7_11D1_887F_D42B07C10710_INCLUDED_)/ HelloDlgDlg.cpp : implementation file/#include "stdafx.h"#include "HelloDlg.h"#include "HelloDlgDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass C
35、AboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/A
36、FX_MSG(CAboutDlg)/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAbo
37、utDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CHelloDlgDlg dialogCHelloDlgDlg:CHelloDlgDlg(CWnd* pParent /*=NULL*/): CDialog(CHelloDlgDlg:IDD, pParent)/AFX_DATA_INIT(CHelloDlgDlg)m_text = _T("");/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win
38、32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);void CHelloDlgDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CHelloDlgDlg)DDX_Text(pDX, IDC_EDIT1, m_text);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CHelloDlgDlg, CDialog)/AFX_MSG_MAP(CHelloDlgDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT
39、()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CHelloDlgDlg message handlersBOOL CHelloDlgDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX &
40、; 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAbout
41、Menu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization herereturn TRUE; / return TRUE unless you set the focus to
42、a controlvoid CHelloDlgDlg:OnSysCommand(UINT nID, LPARAM lParam)if (nID & 0xFFF0) = IDM_ABOUTBOX)CAboutDlg dlgAbout;dlgAbout.DoModal();elseCDialog:OnSysCommand(nID, lParam);/ If you add a minimize button to your dialog, you will need the code below/ to draw the icon. For MFC applications using t
43、he document/view model,/ this is automatically done for you by the framework.void CHelloDlgDlg:OnPaint() if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON)
44、;int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();/ The system calls this to obtain the cursor to display while the user drags/
45、 the minimized window.HCURSOR CHelloDlgDlg:OnQueryDragIcon()return (HCURSOR) m_hIcon;void CHelloDlgDlg:OnButton1() m_text = "Hello from Visual C+"UpdateData(false);这样就完成了第一个程序,它概要描述了在Visual C+中普通程序的开发过程。使用Visual C+ AppWizard工具来为程序员创建一个基本框架程序,然后使用一些工具,比如ClassWizard和Dialog Editor来自定义程序代码。在本书
46、完整的学习过程中,将对这个过程越来越熟悉。接下来,将创建一个SDI程序:KeysSDI,该程序将显示用户在键盘上输入的那些键。这个程序的功能比HelloDlg要强大得多。在KeysSDI中,将看到一个标准的Visual C+程序的四个主要部分,以及学习怎样接收键盘的输入,在一个Visual C+程序中把数据存放到什么地方,怎样在不使用文本框控件的情况下显示键盘输入的内容等知识。1.3 创建KehsSDI工程与HelloDlg程序比较起来,KeysSDI程序更接近于现实世界的实际情况。这个程序将读入用户键入的键,并存储它们,然后在程序的单个窗口中显示它们。使用Visual C+ AppWizar
47、d来创建一个新的EXE工程,名为KeysSDI,在AppWizard的第一个界面中选择Single Document(单文档)选项,然后单击Finish按钮。这样就创建了一个名为KeysSDI的单个窗口的新程序,Visual C+还创建了一个Readme.text文件,概要地描述了工程的各个部分,下面是Readme.txt文件的内容:= MICROSOFT FOUNDATION CLASS LIBRARY : KeysSDI=AppWizard has created this KeysSDI application for you. This applicationnot only demo
48、nstrates the basics of using the Microsoft Foundation classesbut is also a starting point for writing your application.This file contains a summary of what you will find in each of the files thatmake up your KeysSDI application.KeysSDI.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the projec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市地下空间开发利用项目地下空间开发利用产业政策研究报告
- 牛养殖项目的国际市场机会与发展潜力
- 2025年逻辑考试考前准备试题及答案
- 2025年计算机一级Photoshop图像重构试题及答案
- 固废综合利用项目技术可行性分析与创新评估
- 文学的伦理困境与思考试题及答案
- 提升Photoshop职业能力2025年试题及答案
- 2025年税法考试的反馈机制试题及答案
- 游乐园选址分析与地理优势评估
- 现代汉语考试与日常应用试题及答案结合
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 听歌识曲完整版本
- NB-T32042-2018光伏发电工程建设监理规范
- 延安通和电业招聘笔试真题2022
- 2024年纪检监察综合业务知识考试题库及参考答案(完整版)
- 畜牧养殖大型沼气项目可行性研究报告
- 陈志海-发热伴血小板减少综合征
- 2024年武汉长江科创科技发展有限公司招聘笔试参考题库附带答案详解
- 《土石坝沥青混凝土面板和心墙设计规范》
- 世纪大道石灰固化土QC成果
- 人工打桩施工计划书
评论
0/150
提交评论