教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 学前教育 >

VC++技术内幕(windows编程篇)

来源:网络收集 时间:2026-07-12
导读: ? VC++技术内幕 ? 一 第一章:Microsoft Windows 和 Visual C++ 1,Windows应用程序中一定要有WinMain函数,用来完成某些特殊的任务,其中最主要的是创建应用次序的主窗口。 2,DOS下,所有次序的目标模块在创建过程中都被静态连接起来。而Windows允许动态连

? VC++技术内幕

? 一

第一章:Microsoft Windows 和 Visual C++

1,Windows应用程序中一定要有WinMain函数,用来完成某些特殊的任务,其中最主要的是创建应用次序的主窗口。

2,DOS下,所有次序的目标模块在创建过程中都被静态连接起来。而Windows允许动态连接,即一些特定结构的库(DLL)可以在运行过程中被装入和连接,并且被多个应用程序共享。

3,项目是一些相互关联的源文件的集合,这些源文件经过编译、连接,然后被组合在一起形成可执行的Wwindows应用程序或DLL。

4,几个重要Developer Studio创建的中间文件: CLW (支持ClassWizard ) DSP (项目文件) DSW (工作空间文件) NCB (支持ClassView) OPT (保持工作空间的配置) PLG (建立日志文件)

5,AppWizard是一个代码生成器,它会按照用户通过对话框指定的特性、类名、及源代码文件名来产生Windows应用程序工作架构。AppWizard所产生的代码只是一些最基本的代码,它完成的功能完全由应用程序的基类所决定。

/**************************************/ 第二章:Microsoft基本类库应用程序框架 1,按照惯例,MFC库类名用大写―C‖打头。

2,类CMyApp的对象theApp就代表一个应用程序。当运行该应用程序的时候,WINDOWS自动调用程序框架内部的WinMain函数,WinMain函数会去查找该应用程序的全局构造对象(theApp),该对象是有CWinApp类派生类的对象。C++中,全局对象在主程序被运行之前就已经构造好了。

3,当WinMain发现该应用程序对象(theApp)时,会自动调用虚拟成员函数CWinApp::InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。由于基类CWinApp中不知道我们实际需要的什么样的窗口,所以我们必须

在派生出的应用程序类CMyApp中重载InitInstance()函数(CMyApp::InitInstance()),由多态性,当调用CWinApp::InitInstance()时候,会自动转向MyApp::InitInstance(). 4,WinMain函数调用完InitInstance()函数后,就调用CWinApp::Run函数,CWinApp::Run函数被隐藏在基类中负责传递应用程序的消息给相应的窗口,从而维护应用程序的运转。

5,关闭应用程序(对单一框架程序来说),首先CMyFrame 对象被删除,然后退出Run,进而退出WinMain,最后删除CMyApp对象(theApp)。

6,一些Windows类库在基类为鼠标事件消息以及其他一些标准消息定义一些虚函数,如果需要,派生类会对这些函数进行重载。

MFC库应用程序框架没有采用虚函数来处理Windows消息,而是通过一些宏来将特定的消息映射到派生类中相应的成员函数上。(原因:P21。C++类对程序中用到的每一个派生类都要求有一张虚函数分发表VTABLE,在BTABLE中每个虚函数都需要有一个4字节的入口项,而不管该函数会不会在派生类中被重载。)

MFC消息控件函数要求提供函数原型,函数体,以及在消息映射中的入口。 7,文档-视图结构将数据从用户对数据的观察中分离出来,这样就允许对同一数据可以有多个视图。

MFC库应用程序中,文档和视图是由C++类的实例来描述的。

文档基类代码通常和FILE OPEN,FILE SAVE菜单项关联,而派生文档类则一般用来完成对文档对象数据的实际读写工作。

视图基类通常表示一个包含于框架窗口中的窗口,而派生视图类则常用来和稳当类相联系,负责应用程序的显示和打印机I/O。

派生视图类及其基类共同处理WINDOWS的消息,而MFC库则协调文档,视图,框架窗口,以及应用程序之间的相互作用关系,这种协调多用虚函数来实现。 文档对象既可以与一次可全部读入内存的磁盘文件相关联,也可以同数据库相关联。

? 二、

第三章:从―Hello,world!‖着手学习AppWizard

1,视图:从用户角度看,视图是一个普通的窗口;从程序员角度看,试图是一个从MFC库中CView类所派生的类的对象。视图对象的行为完全由类的成员函数和数据成员决定,其中包括派生类的特定成员和基类的继承而来的成员。

2,CEx03aView类最重要的基类是CWnd和CView。CWnd提供CEx03aView的窗口属性,而CView提供它和应用程序框架其它部分之间的联系,特别是和文档及框架窗口之间的联系。

3,视图类中OnDraw成员函数:OnDraw成员函数被设计成一个虚成员函数,每次当视窗需要被重绘时候,应用程序都要调用OnDraw函数。

当用户改变了窗口尺寸,或当前窗口恢复了先前被遮盖的部分,或当前应用程序改变了窗口的数据的时候,窗口都需要被重绘。

当用户改变了窗口尺寸,或窗口需要恢复被遮盖的部分,则应用程序自动去调用OnDraw函数。

但注意,如果程序中某个函数修改了窗口数据,则它必须通过调用视图所继承的Invalidate(InbalidateRect)成员函数来通知Windows,调用Invalidate后会触发对OnDraw函数的调用。

4,WINDOW中不允许直接访问显示硬件,必须通过和窗口相关联的―设备环境‖跟显示硬件通讯。MFC中设备环境由CDC类对象来表示。

5,利用Win32 Debug模式 和 Win32 Release模式开发应用程序。

(默认情况不出现BUILD工具栏,可从TOOLS菜单选择Customize项,设置显示Build工具栏,VC6中也可在工具栏上直接点击右键选择Build工具栏)

Win32 Release模式 Win32 Debug模式 源码调试 不能 编译器连接器都允许

MFC诊断宏 不能(定义了NDEBUG) 可以(定义了_DEBUG) 库连接 MFC Release库 MFC Debug库

编译优化 速度优化(学习版不能) 没有优化(快速编译)

我们应在Win32 Debug模式下开发应用程序,然后在发布或交付前用Win32 Release模式重建应用程序。in32 Release模式下建立的EXE文件又小又快。 6,诊断宏TRACE宏对监测程序状态特别有用。这些宏要求在允许追踪的情况下才有效,允许追踪是默认设置。

(问题:TRACE宏的应用事例与运行原理。宏TRACE的输出在在哪显示呢?在output输出框下选择Debug项,调试运行程序即可看到TRACE宏输出。) 7,预编译头文件代表了编译器在源代码特定行上进行?快照‘。在MFC库程序中,快照常紧接在#include \后进行。

文件StdAfx.h包含了MFC库头文件的#include语句。该文件的内容取决于运行AppWizard时候所做的选择。

文件StdAfx.cpp只包含#include \语句。StdAfx.cpp文件用来在相应项目的目录下产生预编译头文件(PCH文件)。编译开关/Yc只用于StdAfx.cpp文件,导致产生预编译头文件(PCH),而其它源文件的/Yu编译开关使可以使用一个存在的PCH文件。开关/Fp用来指定专门的PCH文件名,默认情况下为相应目标输出文件目录下与项目同名扩展名为PCH的文件。

(VC6下具体设置参见:[Project Settings属性框] [c/c++]属性页[Project Options]、[Source File Options]项)

(注意:在VC6 [Project Settings属性框]中查看StdAfx.cpp文件[Source File Options]项时候,可以看到[Project Settings, and /Yc\],这里说明一下,StdAfx.cpp文件的[ /Yc\ ]的设置覆盖了[Project Options]设置中的[/Yu\)

? 三、

基本事件处理、映射模式和滚动视图

1,消息映射:如在视窗中按下鼠标做键,会自动发送WM_LBUTTONDOWN消息,如果要对这消息有所反应的话,需

//{{AFX_MSG(CEx04aView)

afx_msg void OnLButtonDown(UINT nFlags, CPoint po …… 此处隐藏:3117字,全部文档内容请下载后查看。喜欢就下载吧 ……

VC++技术内幕(windows编程篇).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/592946.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)