深入浅出MFC笔记

深入浅出MFC笔记

一、   勿在浮砂筑高台

1、  并不是扩展名为.DLLDynamic link library)的才是动态链接库。事实上,.exe

.DLL.fon.mod.drv.ocx都是所谓的动态链接函数库。

2、  Windows程序编译时需要包含Windows.h头文件,若需要使用诸如COMMDLG.DLL等动态库,需要包含Commdlg.h等头文件。链接时需要GDI32.libUSER32.libKERNEL32.lib,可能还需要COMDLG32.lib等“import函数库”。程序运行时需要对应的GDI32.DLLUSER32.DLLKERNEL32.DLLCOMMDLG.DLL等动态链接库。

3、  Makefile文件是利用makefile的语法写成的以.mak为后缀的文件。可以设定某个文件和某个文件对比,由其比较结果来决定要不要做某些你所指定的操作。而后利用NMAKE.EXEMAKE.EXE处理之。RSCLLINK等编译链接命令可以写在其中。

4、  API函数GetMessagePeekMessage,如下两个消息循环:

1)       MSG msg;

While(GetMessage(&msg,NULL,0,0))

{

            TranslateMessage(&msg);

            DispatchMessage(&msg);

}

2)       While(TRUE)

{

            If(PeekMessage(&msg,NULL,0,0,PM_REMOVE)

            {

                     If(msg.message == WM_QUIT)

                               Break;

                     TranslateMessage(&msg);

                     DispatchMessage(&msg);

            }

            Else

                     OnIdle();

}

         使用GetMessage(),当操作系统执行该线程时,如果消息队列为空,则会过门不入。若使用PeekMessage(),线程会取回控制权,使程序可以运行一段时间。于是可以进入OnIdle()函数中。

5、  Console程序是在Windows环境下编写的,不牵扯任何窗口、对话框、控件的程序。不能与Dos程序混为一谈。主要有如下方面:

1)       编写方式:Console程序在Windows环境下编写,可以使用C Runtime函数和“不牵扯GUI”的Win32 API函数库;Dos程序在Dos环境下编写,只能调用C Runtime函数库。

2)       程序功能:由于Console程序可以调用部分的Windows API函数,所以可以使用Windows提供的各种高级功能。比如可以产生进程,产生工作者线程,取得虚拟内存信息和刺探操作系统的各种数据。

3)       可运行文件格式:Dos程序师所谓的MZ格式,Console程序和所有的Win32程序一样,是所谓的PE格式,可以再任何win32平台上运行。

6、  一个进程的诞生与死亡

1)       Shell(资源管理器或文件管理器)调用CreateProcess激活App.exe

2)       系统产生一个“进程内核对象”,计数值为1.

3)       系统为此进程建立一个4GB地址空间。

4)       加载器将必要的代码加载到上述地址空间中,包括APP.exe的程序、数据、以及所需的动态链接库。加载器如何知道要加载哪些DLLs呢?他们被记录在可执行文件(PE文件格式)的.idate section中。

5)       系统为此进程建立一个线程,称为主线程。线程才是CPU时间的分配对象。

6)       系统调用C Runtime函数库的Startup code

7)       Startup code调用APP程序的WinMain函数。

8)       APP程序开始运行。

9)       使用者关闭APP主窗口,使WinMain中的消息循环结束,于是WinMain结束。

10)   回到Startup code

11)   回到系统,系统调用ExitProcess结束线程。

7、  创建一个线程,最好以C Runtime函数_beginthreadex_endthreadex代替Windos API函数CreateThreadExitThreadC Runtime函数会为每个线程做一些额外的登记工作,可以保证多线程情况下的安全。MFC中库函数AfxBeginThreadAfxEndThread也可用于创建和结束线程。

二、   C++重要性质

1、  四种不同的对象生存方式:in stackin heapgloballocal static

分别为在栈中、堆中、全局静态对象(初始化过程在WinMain函数调用之前,由Startup帮忙)、局部静态对象(只有一个实例产生,不在堆中,也不在栈中)。

2、  RTTIRuntime type Information),运行时类型识别,通过Dynamic_casttypeid操作符实现。

三、   MFC六大关键技术之仿真

包括MFC程序的初始化,RTTIRuntime Type Information,Dynamic CreatePresistence(永久保存),Message Mapping(消息映射),Command Routing(命令传递)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值