学习日记.
在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菜单项用于清除这些中间文件。用户在完成一个工程后,应及时清理这些中间文件,否则硬盘很快会被耗尽。
分享到:
相关推荐
**VC++6.0学习代码** VC++6.0是一款由微软公司开发的经典集成开发环境(IDE),主要用于编写使用Microsoft Foundation Classes (MFC)库的Windows应用程序。MFC是C++的一个类库,它封装了Windows API,为开发者提供...
**VC++6.0在Windows 7环境下的兼容性与使用指南** Visual C++ 6.0(简称VC++6.0)是微软发布的一款经典且功能强大的C++集成开发环境,它在20世纪90年代末期推出,成为许多开发者编写Windows应用程序的首选工具。...
VC++6.0 是一个功能强大且广泛应用的集成开发环境(IDE),本教程旨在指导读者从零开始学习和掌握 VC++6.0 的使用。下面是 VC++6.0 入门教程的概述: 1. 桌面上的快捷方式:双击快捷方式可以直接运行 VC++6.0。 2....
中文版VC++6.0.zip文件包中所包含的是微软公司开发的经典集成开发环境Visual C++ 6.0的中文版安装程序。Visual C++ 6.0是上世纪90年代末期发布的一款重要的软件开发工具,广泛应用于Windows平台下各种软件的开发。该...
vc++是Windows平台上的C++编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API...
**VC++6.0免安装绿色版**是微软...总的来说,VC++6.0免安装绿色版以其简洁高效的特点,成为了许多学习和研究C++的初学者首选的开发工具,尽管现代有更多先进的IDE如Visual Studio,但VC++6.0的经典地位依然不可替代。
6. **示例代码**:精简版的MSDN可能包含一些示例代码,这些代码展示了如何使用C++和MFC来实现特定的功能,是学习和理解VC++ 6.0开发的实用资源。 7. **开发指南**:除了API和技术规格,MSDN文档还会提供开发最佳...
一个介绍VC++ 6.0的幻灯片,很经典
对于初学者来说,VC++6.0是学习C/C++语言的良好平台,因为它有直观的界面和丰富的帮助文档。 1. **IDE集成开发环境**:VC++6.0的集成开发环境提供了一站式的代码编写、编译、调试功能。用户可以在同一界面下完成...
这款软件在20世纪90年代末期发布,虽然之后有更新版本如Visual Studio 2019等,但VC++6.0因其轻量级、简洁的界面以及对旧版代码的良好支持,至今仍受到很多开发者和学习者的青睐,尤其是在教学和计算机等级考试中。...
学习vc++6.0集成系统操作的pdf视频教学
【VC++6.0 绿色免安装版】是一款经典的微软Visual C++集成开发环境的便携版本,它无需经过繁琐的安装过程,用户只需将其解压缩到任意...然而,对于学习基础的C++语法和理解Windows编程,VC++6.0仍然是一个很好的选择。
总的来说,学习Vc++6.0不仅仅是掌握一门编程语言,更是在学习如何在Windows环境下进行软件开发,理解和运用C++的强大特性和MFC库,这将为你打开计算机编程的大门,为今后的软件开发打下坚实的基础。
本资源十分有用,对于学习VC++的爱好者而言是不错的选择。
1. **官方文档**:虽然年代久远,但微软提供的官方文档仍然是学习VC++6.0的重要参考资料。 2. **教程书籍**:如《Effective C++》、《More Effective C++》等,帮助理解C++语言的精髓和最佳实践。 3. **在线社区**:...
VC++6.0 入门教程 VC++6.0 是 Microsoft 公司推出的一个功能强大且广泛使用的集成开发环境(IDE),它提供了一个全面的开发平台,允许开发者创建Windows应用程序、控制台应用程序、DLL库、静态库等各种类型的项目。...
尤其对于学习C++基础、理解MFC(Microsoft Foundation Classes)库的初学者来说,VC++6.0是一个不错的选择。 **二、安装过程** 1. **下载与解压**:首先需要找到适用于Win10系统的VC++6.0绿色版压缩包,将其下载并...
总之,VC++ 6.0 和MSDN中文版是学习和开发Windows应用的宝贵资源,尤其是对于初学者来说,提供了友好且实用的学习环境和资料。通过深入学习和实践,开发者能够掌握C++编程以及Windows平台开发的关键技能。
"C语言上机软件VC++6.0中文版安装_学习Visual_C++_6.0编程环境的使用借鉴" 本文主要介绍了Visual C++ 6.0(简称VC)的安装和使用方法,并对VC的编程环境进行了详细的介绍。下面是从文中提取的相关知识点: 1. VC++...
MSDN图书馆对于学习和使用微软的开发工具,如VC++6.0,是非常重要的参考资料。 在本压缩包文件“VC++6.0附MSDN”中,"附MSDN"表示VC++6.0安装包中包含了MSDN的相关资料,这意味着用户在安装后可以直接通过内置的...