没有合适的资源?快使用搜索试试~ 我知道了~
『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因从网上看到此版译的最好。 这篇学习笔记是后补的,因为这本书我已经看到了第三十二章,之前并没有做笔记,只是随意的在书上画了画重点,可是越向后学越觉得前面的知识并没有掌握,所以决定重新来过并补上笔记。我认为只有踏踏实实的记录下每天的学习心得才能真正的有所收获。我个人认为学习这本经典之前最好先看看WINDOWS 32位编程的书,至少能用纯SDK写出一些小程序。
资源详情
资源评论
资源推荐
『VC++技术内幕』学习笔记
写在前面:
我看的『VC++技术内幕』版本为--潘爱民和王国印译清华大学出版的第四版,因从网上看
到此版译的最好。
这篇学习笔记是后补的,因为这本书我已经看到了第三十二章,之前并没有做笔记,只是
随意的在书上画了画重点,可是越向后学越觉得前面的知识并没有掌握,所以决定重新来
过并补上笔记。我认为只有踏踏实实的记录下每天的学习心得才能真正的有所收获。我个
人认为学习这本经典之前最好先看看 WINDOWS 32 位编程的书,至少能用纯 SDK 写出一
些小程序。
第一天:
WINDOWS 应用程序一定要有 WinMain 函数,该函数用来完成一些特殊的任务,象创建程
序的主窗口,主窗口用来处理消息的代码。MFC 将 WinMain 隐藏在框架中,不象写 SDK
程序时可以很容易的找到它。
WINDOWS 采用的消息处理机制也交给了程序框架,我们不必担心如何使这些消息和代码
联 系 起 来 。 并 且 WINDOWS 定 义 好 了 一 些 消 息 , 当 窗 口 被 创 建 时 系 统 就 会 发 送
WM_CREATE 消息,当点击鼠标左键时便系统会发送 WM_LBUTTONDOWN 消息,当用
户按下键盘时系统会发送 WM_CHAR 消息,当用户关闭窗口时系统会发送 WM_CLOSE 消
息,当用户进行菜单项选择或单击按钮时系统回发送 WM_COMMAND 消息,什么都不做
系统还会发送 WM_TIMER 消息。先不说别的,先搞清出这几个消息再说。从 MSDN 中可
以很方便的找到关于这几个消息的帮助文档。
WINDOWS 提供通用的图形设备接口(GUI),我们通过调用( GDI)函数和硬件打交道,
不必理会设备环境,WINDOWS 会自动将设备环境结构映射到相应的物理设备,这应该就
是设备无关性吧。
动态连接库(DLL)应该是代码重用的典型例子(不知道可不可这样说),把一些模块、
自己新编的类单独调试并编译成 DLL,及增加代码的可读性也提高了程序模块的灵活性。
用 Developer Studio 建立项目 Developer Studio 会创建很多中间文件,这些文件还是有必要
说一下的。
APS //支持 ResourceView
BSC //浏览器信息文件
CLW //支持 ClassWizard
DSP //项目文件,不能删除和用文本编辑器编辑
DSW //工作空间文件,不能删除和用文本编辑器编辑
MAK //外部的创建文件
NCB //支持 ClassView
OPT //保存工作空间的配置
PLG //建立日志文件
这些文件都有一定的作用,拿 CLW 来说,如果你有一个新类,需要加到 ClassWizard 中,
除了将相应的.h 和.cpp 加到 DSP 中还需要重新编译 CLW。PLG 文件记录着你的项目配置
信息。
VC++的源程序浏览器能够使我们从类或函数的角度来了解或编辑程序,而不是直接从文件
入手。在看别人的源代码时如果能熟练的使用源代码浏览器将会事倍功半。源程序浏览器
主要的查看状态有以下几种:
Definitions and References——选择任何函数、变量、类型、宏定义可以看到它在项目中的
定义,并且在何处和什么地方用到它。
Call Graph/Caller Graph——对于所选择的函数,给出它的调用与被调用函数的图示。
Derived Class Graph/Base Class Graph——给出类层次关系的图形表示,可以看到所选择的
类的派生类和基类以及成员。
File Outline——对于所选的文件,列出文件中的类、函数和数据成员,同时还显示它们定
义的位置和使用位置。
可见 Source Brower 比起 Class View 来功能多了很多也更加好用,以前我就不知道,因为一
般的 VC++书没有讲或根本没有注意这块,看到讲菜单、操作界面、编辑器时总是跳过,
心想“没吃过猪肉还没见过猪跑?这种东西不用学就会”。可实际上还是应该仔细的看看的
对于本章学习雷神建议大家在 VC++6 中用 AppWizard 生成一个空的程序,然后试着看看都
有那些文件,和他们的类层次、函数、宏、结构的定义,我就是这样干的,学编程不动手
是不行的。
第二天:Microsoft 基本类库应用程序框架
◎MFC 是 C++ 的 Microsoft Windows API , 如 果 想 要 开 发 WINDOWS 的 应 用 程 序 当
然 VC/MFC 是开发环境的首选。
◎MFC 产生的应用程序使用了标准化的结构。(我现在还体会不出这点的优势所在,请高
手指点)
◎MFC 产生的应用程序短而运行速度快。这应该说的是可以很容易的建立动态连接,其实
程序还是需要大量的 DLL,不过由于 WINDOWS 上有很多可以用 DLL 所以应用程序很短,
我是这样想的不知对否。
◎VC++工具降低了编码的复杂性。这点不容质疑比起 TC 方便太多了。
◎MFC 库功能非常丰富。书上列出了 MFC 从 1.0--4.21 的一些特性,我就不废话了,大家
应该看看。
这一章节主要介绍了 MFC 库的优点,其实我本人认为在某些特定环境下其实 MFC 不
一定就象说的那样好。我想不会有人用纯 VC 做 MIS 系统吧,太累了。我是这样理解编程
序的,如果把学编程看成学武的话,C/C++语言及编程思想(OOP)是内功,API 是基本功
( 编 程 思 想 是 内 功 、 API 是 基 本 功 这 适 用 于 任 何 WIN32 编 程 , 不 论 Visual C+
+、Delphi、C++Builder、VB......), VC/MFC 应该不同武功其中的一种,不同的学习方法
效果不一样,只要下工夫也都可以达到一定的境界。真正的高手是有着深厚的内功,扎实
的基本功,至于武功招数无所谓了,随便一站不丁不八全无破绽,无招胜有招了。对不住
扯远了。
C++可以通过类库来进行扩展,我们除了可以使用随编译器提供的类库外还可以很方
便使用软件公司销售的类库产品,甚至可以自己开发。而应用程序框架是一种类库的超集
它定义了程序的结构。
下面给出两个示例程序(一个是书上的一个是我写的):
雷神建议: 虽然现在很多书都附 CD,CD 上有书中所有示例的源代码,但还是应该亲自在
VC6 用手敲进去。这样可以加深印象以及感受一下编译除错后程序正确运行时的乐趣,因
为是纯手工打造。自从我敲了近一百个代码示例后,由于笔误的 BUG 就很少了,打字速度
也提高了。而且最好在原示例代码的基础上做些改动例如别千篇一律的显示 HELLO
WORLD!换点别的,这样做也可以加深对示例程序的理解。
我的 HELLO WORLD 用 AppWizard 向导创建一个显示一个字符串的单文档程序,只
需要敲入一行语句,主要是体验 MFC 的强大功能。
1、打开 VC++6 从菜单选择 NEW,给项目命名为”MyApp01“。
2、选择 MFC AppWizard[exe] 选项,除 STEP 1 选择单文档外其他 STEP 缺省。
3、在 Class View 选择 CMyApp01View 类的 OnDraw()成员函数双击会在 C++编译器看到以
下内容
void CMyApp01View::OnDraw(CDC* pDC)
{
CMyApp01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
在 // TODO: add draw code for native data here 的位置增加一行代码
void CMyApp01View::OnDraw(CDC* pDC)
{
CMyApp01Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->TextOut(10,10,"雷神愿意和所有学 VC 的朋友共同进步!"); //<-----------增加的一行
// TODO: add draw code for native data here
}
完了,就这么简单。编译运行。看到了吗?这个程序具备 WINDOWS 程序的所有特
性,例如有菜单、工具条、状态栏、最大化、关闭、甚至还有关于对话框、打印预览 .....全
了,这就是 AppWizard 通过 MFC 动态创建的一个应用程序。从这个小例子可以看出用
VC/MFC 设计 WINDOWS 程序多么方便。下面我们看看书上的例子,以便更进一步了解应
用程序框架。
书上的例子:
1、先建立一个 Win32 Application 的应用程序。
2、选择 Project->Add to project->Files,分别创建一个名为 MyApp.h 和一个名为 MyApp.cpp
的文件。
3、添加代码:(最好照敲以下代码到编译器,别用 Ctrl+C/Ctrl+V)
//***********************************************
// MyApp.h
//
class CMyApp:public CWinApp //见下②
{
public:
virtual BOOL InitInstance();
};
class CMyFrame:public CFrameWnd
{
public:
CMyFrame();
protected:
afx_msg void OnLButtonDown(UINT nFlags,CPoint point);
afx_msg void OnPaint();
DECLARE_MESSAGE_MAP()
};
//*****************************************************
// MyApp.cpp
//
#include "afxwin.h"
#include "myapp.h"
CMyApp theApp;//建立一个 CMyAPP 对象见下②
BOOL CMyApp::InitInstance ()
{
m_pMainWnd=new CMyFrame();
m_pMainWnd->ShowWindow (m_nCmdShow);
m_pMainWnd->UpdateWindow ();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()
CMyFrame::CMyFrame(){
Create(NULL,"MYAPP Application");
}
void CMyFrame::OnLButtonDown (UINT nFlags,CPoint point)
{
TRACE("Entering CMyFrame::OnLButtonDown - %lx,%d,%d\n",
(long)nFlags,point.x ,point.y);
}
void CMyFrame::OnPaint ()
{
CPaintDC dc(this);
dc.TextOut (0,0,"Hello World!");
}
4、编译运行,报错。为什么呢?原来还没有添加 MFC 的支持,在 Project Setting 选项
General 属性页选择”Use MFC in a Static Library"
5、再 Ctrl+F5,哈成功了。
剩余38页未读,继续阅读
mdwang
- 粉丝: 4
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0