用Eclipse + CDT + MinGW做Windows编程.pdf
《用Eclipse + CDT + MinGW做Windows编程.pdf》由会员分享,可在线阅读,更多相关《用Eclipse + CDT + MinGW做Windows编程.pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用用 Eclipse+CDT+MinGW 做做Windows 编程编程Inshion mailto:1/23内容目录内容目录前言前言.3第一部分 开发环境配置第一部分 开发环境配置.3第二部分 第二部分 Windows 编程、面向对象程序设计编程、面向对象程序设计.62.1 Windows 编程回顾.62.2 图解程序结构.72.3 用对象封装WindowsAPI.9第三部分 一个第三部分 一个Demo 程序及相关说明程序及相关说明.123.2 源代码说明.13第四部分 将可重用的部分做成静态库第四部分 将可重用的部分做成静态库.174.2 静态库项目的建立.174.3 静态库项目的调用.18
2、1:头文件.182:引用库和参数配置.194.3 其它可能遇到的问题.202/23前言前言以前看到一本书,叫Visual C+角色扮演游戏程序设计,是一个叫坂本千寻的日本人所著。就我的感觉而言,这本书的内容还是挺丰富,不过每一方面的内容都不是太细,所以想要全靠它就能从无知到入门,是很困难的。但是该书最大的好处就是提供了一系列的Demo,分别演示了书中提到的某一方面。(这些和Eclipse CDT 有什么关系吗?=0=|别急,哈哈,就快有关系了_/)书的前两章主要是一些概要性的叙述,基本不涉及具体的技术。从第三章“Windows 程序设计”开始,就进入具体技术环节。正好这两天大致研究了一下 Ec
3、ilpse+CDT 做C+程序(这不就有关系了吗,哈哈),而且我认为这第三章的内容对 Windows 程序设计和面向对象编程思想的理解很有帮助,于是就用 Eclipse 的+CDT 从这一部分开始,对书中的内容进行了练习。具体地说,就是在Eclipse 上搭建上C+的环境,再做出同书中例子程序相似的Demo。这篇文章主要就是写来总结一下整个过程中遭遇到的各种问题,同时也复习一下关于Windows 和面向对象程序开发的一些内容。3/23第一部分 开发环境配置第一部分 开发环境配置Eclipse+CDT我用的是从Eclipse.org 上下载的 Eclipse IDE for C/C+Develo
4、pers。打开一看,是Eclipse3.4.1+CDT 5.0.1.200809120802。MinGW我用的是MinGW-3.1.0-1。安装的时候,先装好MinGW,装在C:MinGW 下,然后运行Eclipse IDE,这基本上就可以了。需要一提的是,我下到的这个 MinGW 是一个完全本地安装的版本,如果例用在线安装那种方式的安装,建议在选择安装组件的时候,尽量都选上建议在选择安装组件的时候,尽量都选上,否则在后续使用时可能会造成相当的麻烦。测试一下是否成功:首先在Eclipse 中新建一个项目。选择File-New-C+Project-Executable-Hello World C
5、+Project。建完以后,会自动生成一个CPP文件,打开看看,就是一个简单的Main 函数。先Build 再Run,一般来说是正常通过的。然后再建一个Makefile 的项目看看。选择File-New-C+Project-Makefile project-Hello World C+Project。此时向导右侧会出现一个列表,有-Other Toolchain-和MinGW GCC,此时一定要选择此时一定要选择MinGW GCC。然后输入名称建项目,建完后Build,提示出错提示出错(Cannot run program make:Launching failed)。于是去MinGW 的安装
6、目录C:MinGWbin 下将将mingw32-make.exe 复制成复制成 make.exe即可即可。再Build、运行,一切正常,至此,环境配置完成。4/23在下一部分中,我将讲述Windows 程序设计与面向对象程序设计的思想,在该思想的指导下,再进行程序开发。5/23第二部分 第二部分 Windows编程、面向对象程序设计编程、面向对象程序设计2.1 Windows 编程回顾编程回顾提到Windows 编程,简单地说,就是调用WIndows API 做 Windows 应用程序。比如画个窗口,写个菜单,放个按钮,响应响应鼠标之类的。基本上所有的相关入门教程,都会用以下这样一个小例子,
7、来演示一个最简单的 Windows 应用:/-Start-#include./回调函数LRESULT WndProc()/switch msg.WM_PAINT:OnPaint();.void OnPaint()/draw/入口int WinMain()/1:注册窗口类,并将该窗口的回调函数调为:注册窗口类,并将该窗口的回调函数调为WndProc/2:建立并显示窗口:建立并显示窗口/3:进入消息循环:进入消息循环/-End-从上面程序可以看出,正常的Windows 程序编写,都会有上述的1、2、3步。这样一来,6/23运行时一个Win 窗体就会诞生,并且源源不断地接收系统和用户发给它的各种消息
8、,比如单击、移动、关闭等。然后在此基础上,我们就可以编写自己的功能,比如每当单击窗口的某一处就显示一个图片、每当用户点关闭按钮,就弹出一个提示框,等等诸如此类的操作。这些功能都需要在WndProc 的 switch 语句中添加。由此就产生了一个问题。“我是不是需要经常改动WndProc 或者它所调用的函数(如OnPaint)的内容?”OK,一般说来,是这样的。所以这会给开发造成很多麻烦,比如需要经常修改同一段代码,又比如每建立一个应用程序,都要重复写以上的那个结构等等等等。于是我们就郁闷了,开始考虑怎么才能来点儿一劳永逸的办法,使得上述那样 3步可以固化下来,以后再要开发,只需要写功能,不需要
9、对已经写好的东西再复制或者修改了。幸运的是,面向对象的开发方法给了我们很好的解决方案。2.2图解程序结构图解程序结构结过分析,我们发现Window 应用程序,一般都有着如下的结构。即入口WinMain 通过一个全局的Application*application 来调用Application 的InitInstance()方法,而Application:InitInstance()中又调用 Window:Create()方法。这样一来,Window 被创建,而系统、用户消息,如WM_PAINT 之类的就可以传由Window 的相应处理函数来处理。这样一来,程序底层就完成了,简单地说,这是一个没
10、有任何功能的,但是可以接受各种消息的Windows 应用。当我们想添加自己的功能时,只需要按照下图所示,分别继承 Application 和 Window类。并在在WinMain 执行之前让全局的执行之前让全局的application 指向指向MyApp的实例的实例,这样一来,新程序中所有的消息就会转到我们自己的MyWin 类中来处理,我们就可以随心所欲地添加自己的功能。7/23到此,可能有人会有疑问:“在WinMain 执行之前让全局的application 指向MyApp 的实例”?WinMain 不是程序入口吗,怎么能在它执行之前还能做别的操作?不是程序入口吗,怎么能在它执行之前还能做别
11、的操作?这个问题甚至不需要回答,如果有此疑问的,请运行下面这样一段小程序下面这样一段小程序,看看输出就明白了,为什么在WinMain 之前还可以做很多很多操作:Code 001/-Start-#include using namespace std;int main()cout 我是 main()中第一行,我总是会第一个输出的吧!endl;/prints!Hello World!return 0;class Apublic:A()cout哈哈,那可不一定,我就会比main()早执行哦init();app-run()9/23/-OK,这个结构是什么意思?简单地说,就是把应用程度做成一个类,窗口做
12、成一个类。程序入口调用程序的init()方法,该方法会调用窗口的create()方法,最后调用程序的 run()方法完成程序的加载。这样做的好处是什么?回答是:可以完全不改动这些代码,只需要添加新的代码,并且新的代码只需要关注自己新的功能,不需要知道消息从哪来,往哪去就可以开发出我们自己的应用程序!为什么可以这样?举例说明一下。(注意那个App 的指针 app,以及App 构造函数中的app=this;,再看看那几个virtual 函数。)比如我们要建立自己的应用,可以写一个如下的类:/-MyApp theApp;MyApp:public AppWindow win;init()win.cre
13、ate();MainWin=&win;/-/-MyWin:public WindowOnPaint();OnClose();./-只要这样,我们就可以在MyWin 的OnXXXX()方法里实现我们自己的功能,而前面编好的那几个类,可以不做任何改动,就可以支撑起整个程序的过程调用,我们甚至不需要上10/23面那些源代码了,只需要将编译好的库和头文件引进来,就可以在其基础上进行扩展。整个调用过程是,App 的实例化由MyApp theApp;完成,由于 App的构造函数中有app=this;,所以此时 app 指向的是 MyApp 的实例。当程序接收到消息时,会通过WndProc 找到对应的处理函
14、数(比如WM_PAINT 对应到 OnPaint()方法),此时会调用MainWin-OnPaint()。而由于 MainWin 的实例是MyApp:init()中生成的,是MyWin 的实例,而MyWin 中将 virtual的 OnPaint()进行了重载,所以该调用会调到MyWin:OnPaint()方法。总结起来,这实际上完成了一个将将 WindowsAPI 的过程封装成的过程封装成C+类类的过程,用类和对象架起了用户调用与WindowsAPI 之间的一座桥梁。这里可以提一句关于MFC的话题,MFC 所做的事情,就是这样一个将所做的事情,就是这样一个将 WindowsAPI的过程封装成
15、的过程封装成 C+类的过程类的过程,当然,它的结构更为严谨而复杂,考虑的事情也更多,远不是一两句话能说完,不过其思想与程序封装完的入口,与上述过程如出一辙。至此,我们就清楚了如何用面向对象思想解决 Windows 程序的问题。在下一部分中,我将完整地给出一个将完整地给出一个 C+程序(程序(Eclipse+CDT),并且总结一些Eclipse 中编译运行之可能遇到的问题,用以完成这部分所描述的内容。11/23第三部分 一个第三部分 一个 Demo 程序及相关说明程序及相关说明3.1 在在eclipse 中导入并运行一个中导入并运行一个 C+项目项目点此处可以下载本文中用到的C+项目(Eclip
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用Eclipse CDT MinGW做Windows编程 Eclipse MinGW Windows 编程
限制150内