当前位置: 主页 > 生物技术 > 软件与科研工具 > 生信分析与编程

《VC++技术内幕》(第四版)读书笔记

2005-10-02 17:32 站长 vczx.com 阅读 0
核心摘要: 本文是《VC++技术内幕》(第四版)的读书笔记,系统总结了Windows编程模式、MFC应用程序框架、消息映射与视图类、资源与编译、事件处理、映射模式、滚动视窗及设备环境类等核心知识点。笔记以实践为导向,包含代码示例和操作建议,适合VC++初学者和中级开发者参考学习。

本文是站长阅读《VC++技术内幕》(第四版,潘爱民、王国印译,清华大学出版社)的读书笔记,因工作繁忙,更新可能不及时,敬请谅解。

第一天 Windows的编程模式

Windows程序必须包含WinMain函数,其核心任务是创建应用程序的主窗口。与MS-DOS程序不同,Windows程序通过操作系统发送的消息来处理用户输入,这些消息严格定义且适用于所有程序。Windows提供图形设备接口(GDI),通过调用GDI函数与硬件交互,无需直接处理设备环境,系统自动将设备环境结构映射到物理设备。

Windows程序设计所需数据存储在资源文件中,连接器将编译好的二进制代码与二进制资源文件结合生成可执行程序。资源文件可包含位图、图标、菜单定义、对话框设计及自定义格式。Windows程序支持动态链接目标模块,多个应用程序可共享同一动态链接库。

VC++的源程序浏览器允许从类或函数角度浏览和编辑程序,而非直接操作文件。主要查看状态包括:Definitions and References(查看函数、变量等的定义和引用位置)、Call Graph/Caller Graph(函数调用与被调用图示)、Derived Class Graph/Base Class Graph(类层次关系图示)、File Outline(列出文件中的类、函数和数据成员)。相比Class View,Source Browser功能更强大。建议在VC++6中用AppWizard生成空程序,查看文件结构、类层次、函数、宏和结构定义。

第二天 MFC应用程序框架

MFC是C++的Microsoft Windows API封装,其应用程序采用标准化结构,代码短且运行速度快。VC++工具降低了编码复杂性,但学习MFC需先掌握C++基础。应用程序框架是类库的超集,定义了应用程序结构,包括WinMain函数、消息处理、诊断、DLL等支持。

示例:通过AppWizard创建单文档应用程序,在CMyAppView::OnDraw中添加pDC->TextOut(10,10,"愿vc在线能成为您学习vc最好的朋友!"),编译运行即可生成具有菜单、工具栏、状态栏等完整功能的Windows程序。进一步,手动创建Win32 Application,添加MyApp.h和MyApp.cpp,定义CMyApp和CMyFrame类,实现消息映射,展示MFC框架的底层机制。

第三天 消息映射和视图类

MFC通过宏将消息映射到派生类成员函数,而非使用虚函数。文档-视图结构是框架核心,将数据与用户观察分离,支持同一数据对应多个视图。视图是CView派生类的对象,包含头文件(.h)和源代码文件(.cpp)。

使用AppWizard创建SDI应用程序(工程名Exc01)会生成多个文件,其中Exc01View.cpp和Exc01View.h定义了核心视图类CExc01View,其基类CWnd提供窗口属性,CView提供与文档和框架窗口的联系。在视窗内绘图的关键函数是OnDraw,每次窗口重画时被调用。设备环境由CDC类表示,作为参数传递给OnDraw,可调用CDC成员函数完成绘制,如TextOut和Ellipse。

第四天 资源和编译

资源文件(.rc)决定应用程序用户界面,包括Accelerator、Dialog、Icon、Menu、String table、Toolbar、Version等。.rc文件还包含#include "afxres.h"和#include "afxres.rc"以引入通用MFC资源。建议在资源编辑器中编辑资源,避免手动修改resource.h导致丢失。

VC++编译模式分为Release Build和Debug Build。Release Build不调试,使用MFC Release库,优化速度;Debug Build允许调试,使用MFC Debug库,无优化。应在Debug模式下开发,Release模式下发布。诊断宏(如TRACE)在Debug窗口输出诊断信息,Release中自动过滤。预编译头文件分为自动和手工两种系统。

第五天 基本事件处理

用户操作触发Windows发送消息,如鼠标左键按下发送ON_LBUTTONDOWN消息。视图类需包含消息处理函数、函数声明、消息映射宏和DECLARE_MESSAGE_MAP语句,这些可通过ClassWizard完成。MFC对140种Windows消息提供直接控制函数,也可自定义消息。重要消息包括:WM_CREATE(窗口创建第一个消息)、WM_CLOSE(关闭窗口)、WM_QUERYENDSESSION(退出Windows)、WM_DESTROY(窗口关闭后清除)、WM_NCDESTROY(窗口取消最后一个消息)。

非静态数据成员以m_为前缀。窗口客户区域为矩形,CWnd::GetClient获取大小,仅允许在客户区域内绘图。Windows程序先登记窗口类(不同于C++类),每次调用CreateWindow时指定窗口类,连接窗口与窗口过程函数。

第六天 映射模式

映射模式即坐标系。默认MM_TEXT模式以像素为单位,y轴向下递增。要绘制固定物理尺寸图形,需改变映射模式,如MM_HIMETRIC(单位0.01mm,y轴向下递减)。常见固定比例映射模式包括MM_LOENGLISH(0.01英寸)、MM_HIENGLISH(0.001英寸)、MM_LOMETRIC(0.1mm)、MM_HIMETRIC(0.01mm)、MM_TWIPS(1/1440英寸,常用于打印机)。可变比例模式MM_ISOTROPIC(纵横比1:1)和MM_ANISOTROPIC(独立改变x、y比例)。

坐标转换规则:CDC成员函数使用逻辑坐标,CWnd成员函数使用设备坐标,选中测试和区域定义使用设备坐标,长期保存的值使用逻辑坐标。通常在CView::OnPrepareDC中设置映射模式,框架在调用OnDraw前调用此虚函数。

第七天 滚动视窗

CScrollView类支持窗口滚动,处理WM_HSCROLL和WM_VSCROLL消息。在OnInitialUpdate中设置滚动视窗初始化最合适。示例:创建基于CScrollView的应用程序,设置逻辑窗口大小、页面滚动量和行滚动量,实现键盘滚动控制。重要消息包括WM_CREATE、WM_CLOSE、WM_QUERYENDSESSION、WM_DESTROY、WM_NCDESTROY,需注意在OnDestroy中调用基类函数,终止析构在OnClose中处理。

第八天 设备环境类

GDI函数绘制点、线、矩形、椭圆、位图和文本。设备环境代表物理设备,每个C++设备环境对象对应Windows设备环境,由HDC句柄标识。MFC基类CDC包含所有绘图成员函数,派生类CClientDC和CWindowDC分别限于客户区域和整个窗口。创建CDC对象后需及时删除,可在堆栈中构造(自动析构)或通过GetDC获取后调用ReleaseDC释放。注意不要删除作为参数传递给OnDraw的CDC对象,框架自动管理。

设备环境当前状态包括:属性(如映射模式、文本颜色)、GDI对象(如画笔、画刷、字体、位图、调色板、区域)。

    发表评论