云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > VC+AO

VC+AO

  • 62 次阅读
  • 3 次下载
  • 2025/12/11 2:45:16

11 《深入浅出MFC》学习笔记之一

龚建伟评:这篇学习笔记虽然不是系统的阐述某个问题,但读来让人感到收获不小,无论你是老鸟还是菜鸟,都会认同的。我希望XGM能够继续写下去,看了《深入浅出MFC》再来看这些笔记,也有温故知新之感

俟杰先生的《深入浅出MFC》是一本好书,本人是作为有一定C++基础知识并对VC有一点感性认识的VC初学者来接触这本书的。应该说这本书并不真正适合像我这样的初学者,但通读完该书,还是有一些收获的,现只整理其中的一部分,作为我的一个学习笔记吧。 1. 安装VC++,为什么要先安装Internet Explorer?(是不是很多老鸟也不知道啊,侯俊杰先生的宗旨就是知其然,还要知其所以然,5555555555 ????)

因为微软的所有Visual Tools(包括Visual C++、Visual Basic、Visual FoxPro、Visual J++、Visual InterDev等)都集中由所谓的Visual Studio 管理,而这些工具有一个极大的目标,就是要协助开发Internet应用软件,所以它们希望能够和IE有所搭配。

2. SDK:Software Development Kit 原指软件开发工具,但现在已经变成了一个专有名词,凡以Windows raw API撰写的程序通常也称为SDK程序。也有人把Windows API称为SDK API。 3. 不同种类之对象的构造函数(对象诞生后第一个执行并且是自动执行的函数)及析构函数(对象行将毁灭,但未毁灭之前一刻,最后执行并且自动执行的函数)执行时机对比如下:

全局对象 程序一开始就执行(比程序进入点更早) 局部对象 静态对象 以new产生的对象 构造函数 对象诞生时执行 析构函数 程序即将结束时执行 程序流程离开该对象的存活范围时执行 程序将结束时执行,但比全局对象的析构函数早一步进行。 对象被delete时执行 4. C++并不是纯种的面向对象语言(SmallTalk 和 Java才是)。所以,MFC之中得以存在有不属于任何类的全局函数,它们统统在函数名称开头冠以Afx(x并没有什么意思,只是为了凑成一个响亮的名字,Af即Application Framework) 下面是常见的Afx全局函数:

AfxBeginThread:开始一个新的线程 AfxEndThread:结束一个旧的线程

AfxFormatString1:类似printf一般地将字符串格式化 AfxFormatString2:类似printf一般地将字符串格式化 AfxMessageBox:类似Windows API 函数 MessageBox AfxOuputDebugString:将字符串输往除错装置

AfxGetApp:获得application object (CwinApp派生对象)的指针

AfxGetMainWnd:获得程序主窗口的指针 AfxGetInstance:获得程序的instance handle 5. MFC数据类型

下面这些是和Win32程序共同使用的数据类型 BOOL:布尔值,取值为TRUE or FALSE BSTR:32-bit 字符指针

BYTE:8-bit整数,未带正负号

COLORREF:32-bit数值,代表一个颜色值 DWORD:32-bit整数,未带正负号 LONG:32-bit整数,带正负号

LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数 LPCSTR:32-bit指针,指向一个常数字符串 LPSTR:32-bit指针,指向一个字符串

LPCTSTR:32-bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCS LPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCS LPVOID:32-bit指针,指向一个未指定类型的数据

LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值

UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带 正负号整数,

WNDPROC:32-bit指针,指向一个窗口函数 WORD:16-bit 整数 ,未带正负号 WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit

下面这些是MFC独特的数据类型

POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常 用于MFC collection classes(即数据处理类,如CArray) LPCRECT:32-bit指针,指向一个不变的RECT结构 6. 奇怪的窗口类名称Afx:b:14ae:6:3e8f

用Spy++(VC++所附的一个工具)观察窗口类的名称时,会发现窗口类名称变成像Afx:b:14ae:6:3e8f这副奇怪的模样?

原来是Application Framework 把窗口类的名称转换为Afx:: x :y :z :w的类型,成为独一无二的窗口类型名称: x:窗口风格的hex值

y:窗口鼠标光标的hex值 z:窗口后台颜色的hex值 w:窗口图标的hex值 7. Serializable 的必要条件

让一个对象有Serializable能力,它必须派生自一个Serializable类,一个类要成为Serializable,必须有下列五大条件:

(1)从Cobject派生下来,如此一来,可保有RTTI、动态生成等机能

(2)类的声明部分必须有DECLARE_SERIAL宏,此宏需要一个参数:类名称

(3)类的实作部分必须有IMPLEMENT_SERIAL宏,此宏需要三个参数:一是类名称,二是基类名称,三是 schema no.

(4)改写Serialize虚拟函数,使它能够适当地把类的成员变量写入档案中

(5)为此类加上一个default构造函数(也就是无参数之构造函数),这个条件常为人所忽略,但它是必要的,因为若一个对象来自档案,MFC必须先动态生成它,而且在没有任何参数的情况下调用其构造函数,然后才从档案中读出对象数据。

唉,好东东实在太多了,比如对MFC六大关键技术之仿真,三大宏的内部揭密等等(咦,我不是在推销这本书吧,呵呵)感兴趣的话请看看这本书吧,可以找我借哦,所谓“书非借不能读也”。呵呵???

12 《深入浅出MFC》学习笔记之二

C程序也是Windows程序,所以它也有一个WinMain,但是我们在程序中看不到它的踪影。实际上,在程序进入点之前,有一个(而且只有一个)全局对象(在Hello程序中名为theApp),这是所谓的application object,当操作系统将程序加载并激活时,这个全局对象获得配置,其构造函数会先执行,比WinMain更早。

书中所举Hello程序,是一个简单的MFC程序,其主体在于WinMain和WndProc,而这两个部分其实都有相当程度的不变性。MFC就是把有着相当固定行为的WinMain内部操作封装在CWinApp中;把有着相当固定行为的WndProc内部操作封装在CFrameWnd中。也就是说,CWinApp代表程序本体,CFrameWnd代表一个主框窗口

虽然WinMain和WndProc内部操作有相当程度的不变性,但面对不同应用程序也需有变化,所以必须以这两个类为基础,派生自己的类,并改写其中一部分成员函数。

CWinApp----取代WinMain的地位

传统上SDK程序的WinMain所完成的工作现由CWinApp的三个函数完成: virtual BOOL InitApplication( ); virtual BOOL InitInstance( ); virtual BOOL Run( );

CFrameWnd-----取代WndProc的地位 CFrameWnd主要用来掌握一个窗口

引爆器------Application object

当执行Hello程序时,这个全局对象产生,于是构造函数(见APPCORE.CPP)执行起来,CWinApp之中的成员变量将因为这个全局对象的诞生而获得配置与初值,配置完成后,WinMain(MFC早已准备好,并由链接器直接加到应用程序中去的)登场。

AfxWinInit:是继CWinApp构造函数之后的第一个操作;

此后的操作是pApp->InitApplication(其中的pApp指向CMyWinApp对象,即本例中的theApp),因为CMyWinApp继承自CWinApp,而InitApplication又是CWinApp的一个虚拟函数,我们没有改写它(大部分情况下也不需要改它),所以上述操作相当于调用CWinApp::InitApplication。此程序的代码出现在APPCORE.CPP中; 继InitApplication之后,AfxWinMain调用pApp->InitInstance,InitInstance是CWinApp的一个虚拟函数(应用程序一定要改写这个函数,因为它在CWinApp中是个空函数,没有任何默任操作),我们改写了它,所以上述操作就是调有我们自己的这个InitInstance函数,我们将在该处展开我们的主窗口生命。

CMyWinApp::InitInstance一开始new了一个CMyFrameWnd对象,new会引发构造函数CmyFrameWnd::CMyFrameWnd,其中调用了CFrameWnd的成员函数Create,它将产生一个窗口。

搜索更多关于: VC+AO 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

11 《深入浅出MFC》学习笔记之一 龚建伟评:这篇学习笔记虽然不是系统的阐述某个问题,但读来让人感到收获不小,无论你是老鸟还是菜鸟,都会认同的。我希望XGM能够继续写下去,看了《深入浅出MFC》再来看这些笔记,也有温故知新之感 俟杰先生的《深入浅出MFC》是一本好书,本人是作为有一定C++基础知识并对VC有一点感性认识的VC初学者来接触这本书的。应该说这本书并不真正适合像我这样的初学者,但通读完该书,还是有一些收获的,现只整理其中的一部分,作为我的一个学习笔记吧。 1. 安装VC++,为什么要先安装Internet Explorer?(是不是很多老鸟也不知道啊,侯俊杰先生的宗旨就是知其然,还要知其所以然,5555555555 ????) 因为微软的所有Visual Tools(包括Visual C++、Visual Ba

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com