回 帖 发 新 帖 刷新版面

主题:MFC学习进阶01

   大家好,这是第一期。老实说其实这是一个读书笔记,因为我觉得一个人学东西实在是有点枯燥,效果又不好,读书的时候想到的问题又没有人来马上回答,过后有会忘记,所以想了这么一个招,把我当时的想法记录下来。我用的书是《MFC24学时教程》--自学通系列,机械工业出版社,美国Michael Morrison著,1999年出版。
   好,下面是第一学时《进入MFC》
   看第一节,罗里罗唆的说了一大段,我大概梳理了一下,主要是讲了MFC和Win32 API之间的关系,主要有以下几点:
   1。他们都是为Win32平台服务,Win32 API都是为了Win32应用程序的开发服务的。
   2。他们的身份不一样。Win32 API是一个庞大的C语言函数和数据结构的集合,而MFC是封装了Win32 API函数并自定义了一些数据类型,是建立在Win32 API之上的。当然Win32 API仍然存在于MFC开发的程序之下。
   3。他们的服役年份不一样,Win32 API是MFC还没有出道以前,程序员用来开发Win32应用程序的工具,而当MFC出现以后,程序员用MFC开发程序。
   4。他们的复杂程度不一样。因为MFC对Win32 API进行了封装,理所当然得比Win32 API用起来要简单。
    
    看到了这些关系,我觉得学习MFC之前了解一下Win32 API编程和有好处,不晓得哪位好心人能提供一个Win32 API运用程序的源代码,登在这个论坛上可以,发给我也可以,我的邮箱是dasanlang_1983@mail.china.com,如果不怕麻烦的话,请多来点注释,谢谢。


    再看第二节,讲的是Windows,其实就是Win32 API程序设计的基本原则。大概也有几个方面:
     1。在Win32中,一切都开始于对窗口的理解。(书上的原话,我也不太理解,我想大概的意思是我们同窗口打的交道最多也是最直观的,他好像是程序运行的中心)Win32 API包含了范围广泛的窗口操作函数,也定义了不同种类的窗口模板。即是,Win32 API中有控制窗口最大化,移动等等函数,也有各种各样的窗口,比如说,主窗口,对话框,菜单等等。反正只要知道Win32 API中有很多有关窗口的东东,要不然也不会用来进行Windows编程。
     2,理解窗口过程,事件和消息的概念
     每一个窗口类都包含一个指向窗口过程的指针,(书上的原话,我看到这里我就想,这个窗口过程到底是则么样的呢?是个函数还是个其他的东西?用来干吗?为什么要搞一个指针指向它?难道在其他地方要用它,否者干吗要知道他在什么地方,如果知道的话,告诉我)Win32窗口的核心是窗口过程,它是一个包含驱动窗口行为的所有代码的特殊函数。(哦,原来他是用来驱动窗口的所有行为,还是个函数,那指向她又是为了什么呢?难道是另外有一个专门进行管理的函数要调用他,它只是提供驱动窗口行为的功能,还要受到其他函数的管理,有不对的地方请指出)
     窗口过程包含一个巨大的Switch语句,(可以理解,既然是对所有的行为提供驱动,当然要区分是什么行为了哟) 我们用它来区分窗口接收到的不同消息。(是单击了鼠标还是按了一下键盘。只是区分是哪种消息,那么处理交给谁了呢?)
     当我们说一条消息发送到某个窗口,实际是这个窗口的窗口过程被调用了。

     Win32定义了很多个不同的消息,经常用到的有以下一些消息:
.WM_CREATE:窗口被创建时发送此消息(也就是说,窗口过程比窗口还要先存在,不过窗口都没有,哪来的窗口过程?那就是说明这条消息并不是发送给自己的窗口过程的,那到底是发送给谁的呢?)
.WM_PAINT:窗口需要重绘的时候发送此消息
.WM_LBUTTONDOWN:单击的时候发送
.WM_MOUSEMOVE:鼠标移动
.WM_CLOSE:窗口即将关闭是发送(其实这前面的前缀是有点花头的,WM时表示一般的窗口,LB表示下拉列表框,还有很多)

    事件的理解
Windows编程是一种事件驱动程序设计,即运用程序是由外部事件来驱动的,这些事件作为消息传送给运用程序。


    3。理解其中陌生的数据类型
Win32编程中会有一些特殊的数据类型。其中用得最多的是句柄,句柄是一个用来唯一标识一个对象或一段内存区空间的整数标识符(句柄看起来像一个指针),实际上句柄是一个类似非直接指向内存区的一个间接指针,也就是说,我们并不需要了解内存是否被移动过。(他总是能指向目标人物,不管他在哪。)
句柄跟指针一样,指向不同的东西,是要不同的句柄哟。比如:指向图标的时候句柄被命名为HICON,指向菜单的时候为HMENU.

     4.理解WinMain()函数
大家知道在c语言中有main()函数,这里的WinMain()函数也是差不多的,用来作为运用程序的入口点,但与main()不同的是WinMain()做一些创建和初始化的工作后就退出了。在WinMain()创建晚一个主窗口以后,运用程序的其它部分执行窗口的响应消息。(但听说MFC好像把WinMain()函数藏起来了,因为WinMain()函数中的大部分代码其他程序都需要)


以上就是我们对Win32 API编程的理解,总结一下,好像也跟c差不多。WinMain()函数创建和初始化主窗口,然后运用程序由窗口过程来管理,处理各种事件的消息。不同的是数据结构和库函数。(目前为止我也只有这么认为了)

    下面第三节,我们看看MFC的特点
         主要了解一下几点就行了,因为以后我们还要学嘛
         1。MFC对Win32 API中的函数用C++这个工具进行了封装,不但封装了数据结构,还提供了能访问Win32 API标准函数的成员函数
         2。MFC中最重要的封装类就是CWnd,包含了窗口的绝大部分窗口功能。(了解即可)
         3。MFC简化了运用程序响应消息的方式,把消息映射到成员函数里面,编写了响应函数。而不是一大堆SWITCH


这一次就到这里了,我们没有讲什么了。就是说了MFC和Win32 API的关系,然后讲一讲Win32 API编程的特点。最后就是MFC了。
下一次我们要用一个具体的,也是最简单的MFC运用程序来介绍一下MFC编程。OK,下次见!

回复列表 (共37个回复)

11 楼

好东东!
不过,能为能讲一下MFC编程的思想!谢了!
[img]http://wpa.qq.com/pa?p=1:7349238:3[/img][url=http://wpa.qq.com/msgrd?V=1&Uin=7349238&Site=www.plxue.com&Menu=yes]有事请留言[/url]

12 楼

[url=http://wpa.qq.com/msgrd?V=1&Uin=7349238&Site=www.plxue.com&Menu=yes]
[img]http://wpa.qq.com/pa?p=1:7349238:2[/img]
[/url]

13 楼

<a target=blank href=http://wpa.qq.com/msgrd?V=1&Uin=7349238&Site=www.plxue.com&Menu=yes><img border="0" SRC=http://wpa.qq.com/pa?p=1:7349238:2 alt="QQ me"></a>

14 楼

1

15 楼

顶!~~~~

16 楼

每一个窗口类都包含一个指向窗口过程的指针,(书上的原话,我看到这里我就想,这个窗口过程到底是则么样的呢?是个函数还是个其他的东西?用来干吗?为什么要搞一个指针指向它?难道在其他地方要用它,否者干吗要知道他在什么地方,如果知道的话,告诉我)
就我个人的理解:楼主想的是对了,窗口过程是被windows来调用的.

17 楼

这都不顶不是人。

18 楼

创建窗口之前需要定义、注册窗口类,一个窗口类对应一个窗口过程。此窗口过程用来处理所有基于这个窗口类所创建的窗口的消息。在窗口创建时的WM_CREATE消息也是有窗口过程处理,在窗口创建之前,已存在窗口过程。当一个窗口发生一个事件时,windows将产生一个消息放入消息队列(注:windows为每个windows程序维护一个消息队列),然后主程序通过GetMessage(...)函数获取消息,TranslateMessage(...)完成键盘消息向字符消息的转换,并将消息送回windows,然后windows调用相应的窗口过程来处理该窗口消息。

19 楼

顶!~~~~

20 楼


请问楼主,该怎样定义一个自己的消息,然后接收消息后执行一个函数?

我来回复

您尚未登录,请登录后再回复。点此登录或注册