(转)VC++深入详解第三章笔记

(此可作为我作读书笔记的范本!!!~)

第三章 MFC框架程序剖析

      MFC(Microsoft Foundation Class,微软基础类库)

 

3.1  MFC AppWizard

      无


3.2  基于MFC的程序框架剖析

     1. 在MFC中,类的名称以“C”开头。

     2. CWnd是MFC中最基本的基类。


3.2.1  MFC程序中的WinMain函数

     1. theApp全局对象

     (1)无论全部变量还是全部对象,程序运行时,在加载main函数之前,就已经为这些变量和对象分配

     了空间。

     (2)Win32SDK应用程序的实例是由实例句柄hInstance来标识的。

     (3)MFC程序实例有且仅有一个实例化对象,也就是theApp全局对象,它表示了应用程序本身。

    

     2. AfxWinMain函数

     (1)当theApp对象产生之后,就进入WinMain函数。WinMain函数是通过调用AfxWinMain函数来实现它的

    功能的。

     (2)Afx前缀的函数代表应用程序框架函数,是全局函数,可以在程序的任何地方调用它们。应用程序

    框架负责把多个类进行有机的集成。

     (3)指针pThread和pApp所指向的都是theApp全局对象。

 

     3. InitInstance函数

        pApp初始化时:

        首先调用InitApplication函数,以完成MFC内部管理方面的工作。

        然后调用InitInstance函数,该函数是一个虚函数,可以被重载。一般用来初始化全局变量。

 

3.2.2  MFC框架窗口

     1. 注册窗口

        注册窗口工作是在WinMain函数之后,窗口产生之前进行的。

     2. 创建窗口

        创建窗口之前会运行基类的PreCreateWindow函数。CMainFrame里的PreCreateWindow函数虽然是子

    函数,但其参数是引用类型,所以在这里修改窗口外观是可行的。

     3. 显示窗口和更新窗口

        m_pMainWnd是CMainFrame对象的指针,可以用来设置窗口的形态。

        m_pMainWnd->ShowWindow(SW_SHOW); 显示窗口

        m_pMainWnd->UpdateWindow();      更新窗口


3.2.3  消息循环

    1. 注册窗口类、创建窗口、显示和更新窗口的工作完成后,就进入消息循环。

       CWinThread类的Run函数就是完成消息循环这一任务的。

       该函数在AfxWinMain函数中调用。


3.2.4  窗口过程函数

        消息路由默认是交给DefWindowProc函数处理的,但实际上是采用消息映射机制来处理各种消息。

 

综上所述,MFC程序的运行过程按如下步骤进行:

        1. 利用全局对象theApp启动程序

        2. 调用theApp的构造函数,分配内存

        3. 进入WinMain函数,完成程序应用上的初始化,包括注册创建显示和更新窗口  

        4. 进入消息循环


3.2.5  文档/视类结构

       数据的储存和加载由文档类来完成,数据的显示和修改则由视类完成。


3.2.6  帮助对话框类

       提供版本号信息。


3.3  窗口类、窗口类对象与窗口
3.3.1  三者之间关系

       窗口销毁,窗口类对象不销毁;

        窗口类对象销毁,窗口也销毁。


3.3.2  在窗口中显示按钮

       按钮也是一个窗口,它的基类是CWnd。要将它显示出来,需要达到两个条件。

        1. 定义为CMainFrame类的成员。

        2. m_btn.Creat后,调用m_btn.ShowWindow(SW_SHOWNORMAL)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、在视频Lesson2中,在介绍构造函数时,我说:“构造函数最重要的作用是创建对象本身,对象内存的分配由构造函数来完成的”,这句话是错的,对象内存的分配和构造函数没有关系,对象内存的分配是由编译器来完成的,构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式,在类对象有虚表的情况下,构造函数还对虚表进行初始化。 另外,我说:“C++又规定,如果一个类没有提供任何的构造函数,则C++提供一个默认的构造函数(由C++编译器提供)”,这句话也是错误的,正确的是: 如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数: 1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时; 2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数); 3、在类中的所有非静态的对象数据成员,它们对应的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。 二、在视频 Lesson4 的Code 中,画扇形用如下代码即可: if(m_bDraw == TRUE) { dc.MoveTo(m_ptOrigin); dc.LineTo(point); } 带边线的扇形用如下代码即可: if(m_bDraw == TRUE) { dc.MoveTo(m_ptOrigin); dc.LineTo(point); dc.LineTo(m_ptOld); m_ptOld = point; } 三、在视频Lesson8中,关于在对话框上放置组合框的问题,我说“如果拖动的矩形较小,组合框的列表框部分将无法显示,此时也无法调整组合框的上下位置的大小了”。实际上,组合框的上下位置还是可以调整的,调整的办法如下: 在对话框资源处于编辑状态时,将鼠标移动到组合框控件右边向下的箭头上,当鼠标变成上下箭头形状时,单击鼠标左键,此时可以看到举行框围绕着组合框。将鼠标移动到该矩形框下端的蓝色小方块上,当鼠标变成上下箭头形状时,按住鼠标左键向下拖动,直到把组合框的下拉列表框范围拖动到合适的大小时松开鼠标左键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值