对于MFC的初学者,尤其是从win32 console application学起想学MFC application开发的朋友们,一定对MFC很费解。他是怎样工作的?怎样工作顺序?怎么从一个函数跳到另一个函数的?建立工程的时候,怎么又是.cpp,Doc.cpp,又是View.cpp?到底有什么关系,该怎么用?等等一系列的问题。我目前正在学习,想把自己遇到的问题,怎么解决的分享给大家。也希望高手们在看到我们的问题的时候,也可以留言解决,也许你们眼中极为简单的问题,却能困扰我们许久。
言归正传,我先说一下我的开发工具。我用的是Visual Studo 2010。看网上的评论,发现VS2010相比于之前的版本有很大的进步,尤其是相比于VC++ 6.0,所以我就赶一下时髦用VS2010来用做我的学习开发工具。我看的书是《深入浅出MFC》,《VC++2010开发权威指南》(电子版),这两本书,目前来说,感觉很基础,而且讲的很清楚也很权威。我还看孙鑫老师的MFC学习视频。我觉得这些对我来说已经足够学习了。
下面就来说说目前学到的问题,首先MFC与之前的dos编程不同,MFC是一个message based, event driven的windows程序,程序的响应不是依靠函数的顺序进行,而且响应由操作系统发来的消息。也就是说,首先,程序在开始创立的时候就已经创建好了消息等待循环这个函数,时刻监视着操作系统给这个应用程序发过来的消息。在程序打开之后,这个函数就一直运行,如果有消息来了,比如,我在某个图标点了鼠标左键,那么操作系统就将这个消息发给应用程序,然后应用程序对这个消息进行相应。如果没有消息,那么就继续循环等待。
现在我们知道了关于消息相应的一个基本流程:操作系统通过消息连接应用程序,通知应用程序有什么消息发生了。下面我们来看看消息的代码定义是什么:
再来解释句柄。windows程序有很多的窗口,那么定义这个窗口的变量的类型就是句柄,名称是HNDLE,一般用整数来表示。窗口句柄(HWND),图标句柄(HICON),光标句柄(HCURSOR),窗口实例句柄(HINSTANCE)等等。而窗口有很多的资源需要设定,比如窗口的大小,菜单和图标等等,这些资源,操作系统用句柄去寻找,根据句柄号,找到这些资源的响应的存储位置然后进行改动。所以从另一方面来看,句柄也可以当做是指针,只不过是指向窗口的指针