VC++ 6.0学习

学习日记.

在Windows3.1下,有两种形式的内存管理函数调用:局部的和全局的。全局内存管理函数从物理内存中分配一段,然后返回一个句柄值。该句柄可以转换为一个GlobalLock函数所使用的远指针。基本处理过程如下:

申请一块可移动的内存块
锁定该内存块。因为Windows引入了虚拟内存管理,可以把内存块移动到硬盘交换文件中,所以在使用内存块之前,必须将它锁定在真正的内存RAM之中,也就是告诉操作系统,现在这块内存暂时由应用程序来管理。
对该内存块进行各种操作:如复制数据到内存块。
解锁内存,应用程序将对该内存的控制交与Windows。
全局内存对所有的应用程序都是可见的,不管是显式的还是隐式的请求。因为Windows 3.x的实现方式就是所有的进程在同一地址空间中运行。局部内存管理则是从64KB的段内分配对象并返回所分配内存的16位偏移量。

在Win32中,每个进程都有其特有的32位虚拟地址空间,该空间最大可达4GB。如图所示,低端内存的2GB是用户可用的,高端内存的2GB为内核(Kernel)保留。其中,最高的1GB用于VxD、内存管理和文件系统。下面的1GB用于共享的Win32 DLL、内存映射文件和共享内存区域。进程所使用的虚拟地址不代表一个对象在内存的实际的物理位置(事实上,我们大部分的PC还没有配置4GB内存)。操作系统为每个进程维护一个映射表,根据该表将虚拟地址映射到真正的物理位置处(RAM或者交换页文件中)。

句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷、电话线路等。在Win32里,句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。无论它的本质是什么,句柄并不是一个真正意义上的指针。从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行的引用的位置。句柄的声明是这样的:

typedef void *HANDLE

由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。

Windows不仅使用句柄来管理实例,也用它来管理窗口、位图、字体、元文件、图标等系统资源。
在Win32平台下,不再有微模式、紧凑模式、中模式、大模式、巨模式、自定义内存模式之分,也不再有64KB代码段和数据段的限制。只有一种内存模式,Win32下的地址和代码均在线性寻址的2GB的32位内存空间中。当然,编程时还是要考虑到实际内存限制的。

微软基础类库(MFC:Microsoft Foundation Class)是微软为Windows程序员提供的一个面向对象的Windows编程接口

MFC对消息的管理

Windows消息的管理包括消息发送和处理。为了支持消息发送机制,MFC提供了三个函数:SendMessage、PostMessage和SendDlgItemMessage。而消息处理则相对来说显得复杂一些。MFC采用了一种新的机制取代C语言编程时对Windows消息的Switch/Case分支,简化了Windows编程,使程序可读性、可维护性大大提高。
====================================
以指定生成框架的类型,包括Single Document(单文档),Multiple Document(多文档),Dialog Based(基于对话框)三种。还可以从下拉列表框中选择语言,指定程序资源文件使用的语言类型。选择Single Document,此时AppWizard将生成一个单文档的应用程序框架,也就是说,应用程序运行时是一个单窗口的界面。
括是否使用工具条、状态栏,是否让文档支持打印和打印预览功能,是否使用3D控制外观,以及是否支持在线帮助等。MFC AppWizard还支持WOSA(Windows开放系统体系结构),可以直接在基于文档的程序中加入MAPI电子邮件发送功能和WinSocket网络编程接口支持。另外,还可以指定文档的一些特性,包括后缀名等。有关文档/视结构的内容在后面章节中再作详细介绍。按照图3.5所示,设置各个选项,它支持工具条、状态栏,使用3D外观的控制。
How would you like to use the MFC library?

  用户可以选择As a shared DLL(使用共享动态连接库)或As a static linked library(静态连接库)。使用DLL时,所有MFC的类存放在动态连接库中,因此可以使应用程序小一些,但是发布该应用程序可执行文件时必需随同提供必要的动态连接库。使用静态库时,应用程序所用到的MFC类都编译进了可执行文件之中,因此可执行文件比使用DLL方式的要大,但可以单独发行。一般的,对于小的应用程序可以采用静态库方式,对于大的应用程序一般采用动态连接库方式。本书中的例子全部采用动态连接库选项(As a shared DLL)。

===================================
Hello.dsw
  这是MFC自动生成的工作区文件,它包含当前工作区所包含的项目的信息。

Hello.dsp
  这是MFC生成的项目文件,它包含当前项目的设置、所包含的文件等信息。

Hello.MAK
  这是MFC项目的项目文件,这也是与NMAKE兼容的文件。如果选择了External make文件可选项,则可人工对它编辑,但不能利用Visual C++许多项目编辑特性。

Hello.CLW
  这个文件含有被ClassWizard用来编辑现有类或增加新类的信息。ClassWizard还用这个文件来保存创建和编辑消息映射和对话框数据所需的信息,或是创建虚拟成员函数所需的信息。

根据应用程序的类型—单文档、多文档或基于对话框的,AppWizard将创建下述应用程序源文件和头文件中的某些文件。在本例中,AppWizard生成了如下文件:

Hello.h
  这是应用程序的主头文件,它含有所有全局符号和用于包含其它头文件的#include伪指令。

Hello.CPP
  这个文件是应用程序的主源文件。它将创建CHelloApp类的一个对象(从CWinApp派生),并覆盖InitInstance成员函数。

MainFrm.cpp,MainFrm.h
  这两个文件将从CFrameWnd(SDI应用程序)或CMDIFrameWnd(MDI应用程序)派生CMainFrame类。如果在AppWizard的Application Options页(6步中的第4步)中选择了对应的可选项的话,CMainFrame类将处理工具条按钮和状态条的创建。MAINFRM.CPP文件还含有MFC应用程序提供的默认工具条按钮的对象ID——叫做buttons数组。

HelloDoc.cpp,HelloDoc.h
  这些文件从CDocument类派生并实现名为CHelloDoc的文档类,并含有用于初始化文档、串行化(保存和装入)文档和用于调试诊断的一些成员函数的框架。

HelloView.cpp,HelloView.h
  这些文件派生并实现名为CHelloView的视类,用于显示和打印文档数据。CHelloView类是从CView或它的派生类派生出来的,含有绘制视和用于调试诊断的一些成员函数框架。
======================
Hello.RC,RESOURCE.H,Hello.rc2
  这是项目的头文件及其资源文件。资源文件含有一般MFC应用程序的默认菜单定义和加速键表、字符串表。它还指定了缺省的About对话框和一个图标文件(RES\Hello. ICO)。资源文件了标准的MFC类的资源。如果指定了支持工具条,它还将指定工具条位图文件(RES\TOOLBAR.BMP)。Hello.rc2用于存放Visual Studio不可直接编辑的资源。

==============
要编译运行程序,可以选择Build-(或按快捷键F7),编译该程序。编译完后再选择Build-Execute Hello.exe(或按快捷键CTRL+F5),运行该程序。也可以直接按CTRL+F5,系统提示是否编译,回答“Yes”,Visual Studio将自动编译链接并运行Hello.exe程序。
=====================
Build菜单下有Compile,Build,Rebuild All三个菜单项用于编译程序。其中Compile用于编译当前打开的活动文档;Build只编译工程中上次修改过的文件,并链接程序生成可执行文件。如果以前没有作过编译,它会自动调用Rebuild All操作,依次编译资源文件、源程序文件等;Rebuild All不管文件是否作过修改,都会编译工程中的所有源文件。由于编译链接过程中会产生大量的中间文件和目标文件,它们占用许多硬盘空间,因此Visual Studio在Build下提供了Clean菜单项用于清除这些中间文件。用户在完成一个工程后,应及时清理这些中间文件,否则硬盘很快会被耗尽。

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值