学习笔记之深入浅出MFC 第一章win32程序的开发流程

来源:互联网 发布:淘宝客服教程视频在线 编辑:程序博客网 时间:2024/06/05 09:32

“只用一样东西,不明白它的道理,实在不高明”。借用林语堂先生的这句话,所以我们很有必要弄懂MFC这一工具的原理,这将更有利于我们应用它来解决工程问题。

   作为windows程序设计者一定得知道的基础知识,我们很有必要对Windows程序的运行原理弄懂,甚至是烂熟于心,这样在以后碰到一些问题才能从更深层次考虑问题的原因,对我们踏实的功底是非常必要的。借用作者的话说,就是没有学会走之前,不要跑!

   Windows程序分为“程序代码”和“UI(User Interface 用户接口)资源”两大部分。两大部分最后以RC编译器整合为一个.exe的可执行文件。UI资源是指功能菜单、对话框外貌、程序图标、光标图形等这些图形化的界面,这些我们可以直接看到的图形界面都是由各种工具产生的,并且以各种扩展名的文件形式存在,比如.ico图标文件、.bmp位图文件等等。程序员需要在一个资源描述文件(.rc)中描述它们,RC编译器读取RC文件的描述后将所有的UI资源集中制作成一个.RES文件,然后再与程序代码结合在一起,才能形成一个完整的Windows可执行文件。


从上图中我们可以看到,一个Windows程序在最终形成.exe文件时,是由.OBJ的编译文件、.lib静态链接库文件、.DEF动态链接库文件以及.RES资源文件共同连接而成。其中.OBJ编译文件是由我们写的源文件编译而得到的,资源文件是我们设计产生的各种UI文件的整合,那么剩下的静态和动态连接库是什么呢?

函数库(.LIB)介绍

       所谓的动态连接,是指应用程序调用的API函数是在执行时期才连接上的,也就是上图中LINKER时候。Windows API由操作系统本身(主要是三大模块GDI32.DLL、USER32.DLL和KERNEL32.DLL)提供。虽然说动态链接是在链接时期才执行链接动作的,但是链接器必须提前为链接动作准备一些连接信息,这样才连接阶段应用程序才知道应该链接哪些DLL链接库。也只有在提前给应用程序提供了这些信息,应用程序才能知道有哪些DLL链接库需要先行加载。这些信息就存放在“import函数库”中,即.LIB库中。在使用SDK开发软件时,需要把.DLL库文件放在C盘WIN32文件夹中,同时将相应的.LIB文件放在工程所在的文件夹下,并在SDK的连接设置中添加所需的.LIB文件名。

  以消息为基础的事件驱动机制

  Windows程序的进行是依靠外部发生的事件来驱动的。也就是说,在没有外部驱动到来之前程序是静态的,不会有任何反应。程序不断的在While循环中等待任何输入的到达,然后判断为这种消息,并对此消息做出相应的处理。输入是有操作系统捕捉到之后,以消息的形式进入程序的。

  可以将应用程序获得的各种输入进行分类,分为由硬件装置所产生的消息(如鼠标移动或键盘按下),放在系统队列中;由Windows系统或其他Windows程序传送过来的消息,放在程序队列中。程序会调用GetMessageAPI取得一个消息,程序的生命靠它推动。

  接收并处理消息的主角是窗口。每一个窗口都有一个函数负责处理消息,程序员必须负责设计这个所谓的窗口函数。如果窗口获得一个消息,则这个窗口函数必须判断消息的类别,决定处理的方式。

0 0
原创粉丝点击