MFC边看边记

  好吧,不能再拖了,为了逼自己尽快搞定呢MFC,决定边看<<深入浅出MFC>>边记笔记,用最快的速度搞定它以便开始进行后续的开发。

  第一章: win32基础

     该章节一上来先讲win32应用程序设计,笔者认为这是MFC的基础,赶紧打开VS2008创建一个win32项目,果然比控制台程序多了许多文件,看了下主cpp框架代码,该框架生成一个默认的窗口程序。程序进入winmain后首先创建一个WNDCLASSEX类,设置其各项属性并调用RegisterClassEx注册该窗口类。然后调用CreateWindow创建主窗口,最后进入主消息循环代码如下:

while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);//转化鼠标键盘消息
DispatchMessage(&msg);//将消息传递给主窗口处理程序WndProc相应消息

}

在资源视图中可以添加自己的对话框,菜单等并在WndProc写代码处理他们的消息。


窗口程序的生命周期:

        产生上面已经讲了,只说关闭。当点击关闭窗口时候,系统送出VM_close命令,应用程序不拦截该命令,交给default:DefWindowProc处理。DefWindowProc收到VM_CLOSE后调用destroywindow把窗口清除,同时送出WM_DESTROY,应用程序收到后调用PostQuitMessage结束消息循环 此时窗口程序才全部清理完毕。


空闲时间:

   getmessage和peekmessage不同,peekmessage在消息队列没有消息后仍然收回控制权,使程序得以执行一段时间。


控制台程序也可以调用MFC类库(必须与GUI无关的) 如CFILE 和CSTRING类,必须包含头文件afx.h 编译选项必须选择C的多线程函数库


本章最后提到了多线程,正好复习下内核驱动课程中的东西:三种创建线程的区别

  • CreateThread:是Windows的API函数(SDK函数的标准形式,直截了当的创建方式,任何场合都可以使用),提供操作系统级别的创建线程的操作,且仅限于工作者线程。不调用MFC和RTL的函数时,可以用CreateThread,其它情况不要使用。因为:
             1.C Runtime中需要对多线程进行纪录和初始化,以保证C函数库工作正常。
             2.MFC也需要知道新线程的创建,也需要做一些初始化工作。
             3.有些CRT的函数象malloc(),fopen(),_open(),strtok(),ctime(),localtime()等函数需要专门的线程局部存储的数据块,这个数据块通常需要在创建线程的时候就建立,如果使用CreateThread,这个数据块就没有建立,但函数会自己建立一个,然后将其与线程联系在一起,这意味着如果你用CreateThread来创建线程,然后使用这样的函数,会有一块内存在不知不觉中创建,而且这些函数并不将其删除,而CreateThread和ExitThread也无法知道这件事,于是就会有Memory   Leak,在线程频繁启动的软件中,迟早会让系统的内存资源耗尽。

  • _beginthreadex:MS对C Runtime库的扩展SDK函数,首先针对C Runtime库做了一些初始化的工作,以保证C Runtime库工作正常。然后,调用CreateThread真正创建线程。
  • AfxBeginThread:MFC中线程创建的MFC函数,首先创建了相应的CWinThread对象,然后调用CWinThread::CreateThread,在CWinThread::CreateThread中,完成了对线程对象的初始化工作,然后,调用_beginthreadex(AfxBeginThread相比较更为安全)创建线程。它让线程能够响应消息,可用于界面线程,也可以用于工作者线程。

 第二章:c++特性

      看到内容我吓一跳,要不要正么巧啊,刚系统的学了下C++这就来给我复习了,不禁要为我的学习计划小小的得意一下~~。

    大概翻了一下没有什么新东西 直接跳过了


第三章:

      简单的跟写了下作者的RTTI机制,作者在每个类中加了个静态类型成员 并把它放入全局链表中用以识别父子关系,真实C++RTTI则是维护了一棵继承树。

     这章看完后对MFC的实现细节有了直观的影响。后面的章节感觉有点乱,直接开始跟代码得了

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值