- 博客(0)
- 资源 (6)
- 收藏
- 关注
MFC深入浅出
1_MFC概述
2_MFC和Win32
3_CObject类
4_消息映射的实现
5_MFC对象的创建
6_应用程序的退出
7_MFC的DLL
8_MFC的进程和线程
2011-11-21
More Effective C++(完整版).chm
1. 译序(侯捷)
C++ 是一个难学易用的语言!
C++ 的难学,不仅在其广博的语法,以及语法背後的语意,以及语意背後的深层思维,以及深层思维背後的物件模型;C++ 的难学,还在於它提供了四种不同(但相辅相成)的程式设计思维模式:procedural-based,object-based,object-oriented,generic paradigm。
世上没有白吃的午餐。又要有效率,又要有弹性,又要前瞻望远,又要回溯相容,又要能治大国,又要能烹小鲜,学习起来当然就不可能太简单。
在如此庞大复杂的机制下,万千使用者前仆後续的动力是:一旦学成,妙用无穷。C++ 相关书籍之多,车载斗量;如天上繁星,如过江之鲫。广博如四库全书者有之(The C++ Programming Language、C++ Primer),深奥如重山复水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),细说历史者有之(The Design and Evolution of C++, Ruminations on C++),独沽一味者有之(Polymorphism in C++, Genericity in C++),独树一帜者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式库大全有之(The C++ Standard Library),另辟蹊径者有之(Generic Programming and the STL),工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++)。
这其中,「工程经验之累积」对已具C++ 相当基础的程式员而言,有著致命的吸引力与立竿见影的帮助。Scott Meyers 的Effective C++ 和More Effective C++ 是此类佼佼,Herb Sutter 的Exceptional C++ 则是後起之秀。
这类书籍的一个共通特色是轻薄短小,并且高密度地纳入作者浸淫於C++/OOP 领域多年而广泛的经验。它们不但开展读者的视野,也为读者提供各种C++/OOP 常见问题或易犯错误的解决模型。某些小范围主题诸如「在base classes 中使用virtual destructor」、「令operator= 传回*this 的reference」,可能在百科型C++ 语言书籍中亦曾概略提过,但此类书籍以深度探索的方式,让我们了解问题背後的成因、最佳的解法、以及其他可能的牵扯。至於大范围主题,例如smart pointers, reference counting, proxy classes,double dispatching, 基本上已属design patterns 的层级!
这些都是经验的累积和心血的结晶。
我很高兴将以下三本极佳书籍,规划为一个系列,以精装的形式呈现给您:
1. Effective C++ 2/e, by Scott Meyers, AW 1998
2. More Effective C++, by Scott Meyers, AW 1996
3. Exceptional C++, by Herb Sutter, AW 1999
不论外装或内容,中文版比其英文版兄弟毫不逊色。本书不但与原文本页页对译,
保留索引,并加上精装、书签条、译注、书籍交叉参考1、完整范例码2、读者服务3。
这套书对於您的程式设计生涯,可带来重大帮助。制作这套书籍使我感觉非常快
乐。我祈盼(并相信)您在阅读此书时拥有同样的心情。
侯捷2000/05/15 于新竹.台湾
[email protected]
http://www.jjhou.com
1 Effective C++ 2/e 和More Effective C++ 之中译,事实上是以Scott Meyers 的另一个产品Effective C++ CD 为本,不仅资料更新,同时亦将CD 版中两书之交叉参考保留下来。这可为读者带来旁徵博引时的莫大帮助。
2 书中程式多为片段。我将陆续完成完整的范例程式,并在Visual C++,C++Builder,GNU C++ 上测试。请至侯捷网站(http://www.jjhou.com)下载。
3 欢迎读者对本书范围所及的主题提出讨论,并感谢读者对本书的任何误失提出指正。
来信请寄侯捷电子信箱([email protected])。
2011-11-21
Effective STL 中文版.chm
Effective STL 中文版(完整版)
作者: winter
Winter总算找到《Effective STL》的完整中文版了,奉献给大家。书中作者解释了怎样结合STL组件来在库的设计得到最大的好处。这样的信息允许你对简单、直接的问题开发简单、直接的解决方案,也帮你对更复杂的问题设计优雅的方法。我描述了常见的STL使用错误,而且向你演示怎么避开它们。那帮助你躲开闪资源漏、不可移植的代码和未定义的行为。我讨论了优化代码的方法,所以你能使STL表现得像它应该的那样快速、光滑。
本书作者为Scott Meyers,由龚敏敏翻译。
前言
致谢
导读
容器
条款1:仔细选择你的容器
条款2:小心对“容器无关代码”的幻想
条款3:使容器里对象的拷贝操作轻量而正确
条款4:用empty来代替检查size()是否为0
条款5:尽量使用区间成员函数代替它们的单元素兄弟"
条款6:警惕C++最令人恼怒的解析
条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针
条款8:永不建立auto_ptr的容器
条款9:在删除选项中仔细选择
条款10:注意分配器的协定和约束
条款11:理解自定义分配器的正确用法
条款12:对STL容器线程安全性的期待现实一些
vector和string
条款13:尽量使用vector和string来代替动态分配的数组
条款14:使用reserve来避免不必要的重新分配
条款15:小心string实现的多样性
条款16:如何将vector和string的数据传给传统的API
条款17:使用“交换技巧”来修整过剩容量
条款18:避免使用vector<bool>
关联容器
条款19:了解相等和等价的区别
条款20:为指针的关联容器指定比较类型
条款21:永远让比较函数对相等的值返回false
条款22:避免原地修改set和multiset的键
条款23:考虑使用有序vector代替关联容器
条款24:当关乎效率时应该在map::operator[]和map-insert之间仔细选择
条款25:熟悉非标准散列容器
迭代器
条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator
条款27:用distance和advance把const_iterator转化成iterator
条款28:了解如何通过reverse_iterator的base得到iterator
条款29:需要一个一个字符输入时考虑使用istreambuf_iterator
算法
条款30:确保目标区间足够大
条款31:了解你的排序选择
条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase
条款33:提防在指针的容器上使用类似remove的算法
条款34:注意哪个算法需要有序区间
条款35:通过mismatch或lexicographical比较实现简单的忽略大小写字符串比较
条款36:了解copy_if的正确实现
条款37:用accumulate或for_each来统计区间
仿函数、仿函数类、函数等
条款38:把仿函数类设计为用于值传递
条款39:用纯函数做判断式
条款40:使仿函数类可适配
条款41:了解使用ptr_fun、mem_fun和mem_fun_ref的原因
条款42:确定less<T>表示operator<
使用STL编程
条款43:尽量用算法调用代替手写循环
条款44:尽量用成员函数代替同名的算法
条款45:注意count、find、binary_search、lower_bound、upper_bound和equal_range的区别
条款46:考虑使用函数对象代替函数作算法的参数
条款47:避免产生只写代码
条款48:总是#include适当的头文件
条款49:学习破解有关STL的编译器诊断信息
条款50:让你自己熟悉有关STL的网站
参考书目
附录A:区域设置和忽略大小写的字符串比较
附录B:在微软STL平台上的注意事项
词汇表
关于本电子书
2011-11-21
深入浅出MFC.chm -候捷
目 录
第0章 你一定要知道(导读)/1
这本书适合谁/1
你需要什么技术基础/1
你需要什么软硬件环境
让我们使用同一种语言
本书符号习惯/3
磁盘内容与安装
范例程序说明
第一篇 勿在浮砂筑高台 - 本书技术前提/3
第1章 Win32 程序基本观念/3
Win32程序开发流程/4
需要什么函数库(.LIB)/4
需要什么头文件(.H)/4
以消息为基础,以事件驱动之/5
一个具体而微的Win32 程序/5
程序进入点WinMain/10
窗口类之注册与窗口之诞生/11
消息循环/12
窗口的生命中枢—窗口函数/12
消息映射(Message Map)雏形/13
对话框的运作/14
模块定义文件(.DEF)/14
资源描述文件(.RC) /15
Windows 程序的生与死/15
闲置时间的处理:OnIdle /16
Console 程序/17
Console 程序与 DOS 程序的差别/17
Console 程序的编译链接/18
JBACKUP:Win32 Console 程序设计/19
MFCCON:MFC Console 程序设计/20
什么是C Runtime Library 的多线程版本/22
进程与线程(Process and Thread)/22
核心对象/22
一个进程的诞生与死亡/23
产生子进程/23
一个线程的诞生与死亡/24
以_beginthreadex取代CreateThread/25
线程优先权(Priority)/26
多线程程序设计实例/27
第2章 C++ 的重要性质 /29
类及其成员—谈封装(encapsulation)/29
基类与派生类—谈继承(Inheritance)/29
this 指针 /31
虚函数与多态(Polymorphism)/32
类与对象大解剖 /40
Object slicing 与虚函数 /42
静态成员(变量与函数) /44
C++程序的生与死:兼谈构造函数与析构函数 /46
四种不同的对象生存方式 /47
所谓“Unwinding”/48
运行时类型信息(RTTI) /48
动态生成(Dynamic Creation) /50
异常处理(Exception Handling) /50
Template /53
Template Functions /53
Template Classes /54
Templates 的编译与链接 /56
第3章 MFC六大关键技术之模拟/57
MFC类阶层/57
Frame1范例程序/57
MFC程序的初始化过程/59
Frame2范例程序/61
RTTI(运行时类型辨识)/65
CRuntimeClass与类型录网 /65
DECLARE_DYNAMIC / IMPLEMENT_DYNAMIC宏/66
Frame3 范例程序/71
IsKindOf(类型辨识)/77
Frame4 范例程序/77
Dynamic Creation(动态生成)/78
DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE 宏 /79
Frame6 范例程序 /84
Persistence(永续生存)机制 /91
Serialize(数据读写) /91
DECLARE_SERIAL/IMPLEMENT_SERIAL 宏 /95
没有范例程序
Message Mapping(消息映射)/97
Frame7 范例程序/104
Command Routing(命令循环)/112
Frame8 范例程序/119
本章回顾/130
第二篇 欲善工事先利其器- Visual C++ 5.0 开发工具
第4章 Visual C++ - 整合性软件开发环境
安装与组成
四个重要的工具
内务府总管:Visual C++ 整合开发环境
关于project
关于工具设定
Source Browser
Online Help
除错工具
VC++ 除错器
Exception Handling
程序代码产生器—AppWizard
东圈西点完成 MFC 程序骨干
Scribble Step0
威力强大的资源编辑器
Icon 编辑器
Cursor编辑器
Bitmap编辑器
ToolBar编辑器
VERSIONINFO资源编辑器
String Table编辑器
Menu 编辑器
Accelerator 编辑器
Dialog 编辑器
Console 程序的项目管理
第三篇 浅出MFC程序设计
第5章 总观Application Framework /130
什么是Application Framework /130
侯捷怎么说 /130
我怎么说 /131
别人怎么说 /133
为什么使用 Application Framework /134
Microsoft Foundation Class(MFC) /136
白头宫女话天宝:Visual C++与MFC/137
纵览MFC /138
General Purpose classes /138
Windows API classes /139
Application framework classes /140
High level abstractions /140
Afx全局函数 /140
MFC宏(macros) /141
MFC数据类型(data type)/142
第6章 MFC程序设计导论——MFC程序的生死因果 /144
不二法门:熟记MFC类的阶层架构 /144
需要什么函数库(.LIB) /146
需要什么含入文件(.H) /146
简化的MFC程序架构—以Hello MFC为例 /148
Hello 程序原始代码 /148
MFC 程序的来龙去脉 /152
我只借用两个类:CWinApp和CFrameWnd /152
CWinApp—取代WinMain的地位 /152
CFrameWnd—取代WndProc的地位 /154
引爆器—Application object /155
隐晦不明的 WinMain /156
AfxWinInit - AFX 内部初始化动作 /158
CWinApp::InitApplication /160
CMyWinApp::InitInstance /160
CFrameWnd::Create 产生主窗口(并注册窗口类)/161
奇怪的窗口类名称 Afx:b:14ae:6:3e8f/168
窗口显示与更新 /170
CWinApp::Run - 程序生命的活水源头/170
把消息与处理函数串接在一起:Message Map机制/172
来龙去脉总整理/173
Callback 函数/174
闲置时间(idle time)的处理:OnIdle/176
Dialog 与 Control/178
通用对话框(Common Controls)/178
本章回顾/179
第7章 简单而完整:MFC 骨干程序/180
不二法门:熟记 MFC 类的阶层架构/180
MFC程序的UI新风貌/180
Document/View 支撑你的应用程序 /181
利用Visual C++工具完成Scribble step0 /183
骨干程序使用哪些MFC类?/183
Document Template的意义 /187
Scribble的Document/View 设计/190
主窗口的诞生/192
工具列和状态列的诞生(Toolbar & Status bar)/193
鼠标拖放(Drag and Drop)/195
消息映射(Message Map)/196
标准菜单File/Edit/View/Window/Help/196
对话框 /199
改用CEditView /199
第四篇 深入MFC程序设计 /199
第8章 Document-View 深入探讨 /200
为什么需要 Document-View(形而上)/200
Document /200
View /201
Document Frame(View Frame)/202
Document Template /202
CDocTemplate 管理 CDocument / CView / CFrameWnd /202
Scribble Step1 的 Document(数据结构设计) /207
MFC Collection Classes 的选用 /207
Template-Based Classes /208
Template-Based Classes 的使用方法 /209
CScribbleDoc 的修改 /209
SCRIBBLEDOC.H /211
SCRIBBLEDOC.CPP /212
文件:一连串的线条 /215
CScribbleDoc 的成员变量 /215
CObList /215
CScribbleDoc 的成员函数 /215
线条与坐标点 /217
CStroke 的成员变量 /217
CArray<CPoint, CPoint> /217
CStroke 的成员函数 /217
Scribble Step1 的 View:数据重绘与编辑 /218
CScribbleView 的修改 /218
SCRIBBLEVIEW.H /219
SCRIBBLEVIEW.CPP /220
View 的重绘动作—GetDocument和OnDraw /222
CScribbleView的成员变量 /222
CScribbleView的成员函数 /223
View 与使用者的交谈(鼠标消息处理实例)/223
ClassWizard 的辅佐 /224
WizardBar 的辅佐 /225
Serialize:对象的文件读写 /225
Serialization以外的文件读写动作 /226
台面上的Serialize动作 /227
台面下的Serialize写文件奥秘 /231
台面下的Serialize读文件奥秘 /233
DYNAMIC / DYNCREATE / SERIAL 三宏/240
Serializable 的必要条件/244
CObject 类/245
IsKindOf/245
IsSerializable/245
CObject::Serialize/245
CArchive类/246
operator<<和operator>>/246
效率考虑/250
自定 SERIAL宏给抽象类使用 /250
在CObList中加入 CStroke 以外的类 /250
Document与View 交流—为Scribble Step4做准备/254
第9章 消息映射与命令循环 /255
到底要解决什么 /255
消息分类 /256
万流归宗 Command Target(CCmdTarget)/256
三个奇怪的宏,一张巨大的网 /257
DECLARE_MESSAGE_MAP 宏/257
消息映射网的形成:BEGIN_/ON_/END_ 宏 /258
米诺托斯(Minotauros)与西修斯(Theseus)/261
两万五千里长征—消息的流窜 /265
直线上溯(一般 Windows 消息) /265
拐弯上溯(WM_COMMAND 命令消息) /268
罗塞达碑石:AfxSig_xx 的秘密/273
Scribble Step2:UI 对象的变化/277
改变菜单/277
改变工具列/278
利用ClassWizard连接命令项识别代码与命令处理函数/280
维护UI对象状态(UPDATE_COMMAND_UI)/282
本章回顾/285
第10章 MFC 与对话框/285
对话框编辑器/286
利用ClassWizard 连接对话框与其专属类/288
PENDLG.H /290
PENDLG.CPP /291
对话框的消息处理函数 /292
MFC中各式各样的MAP /294
对话框数据交换与查核(DDX & DDV)/294
MFC中各式各样的DDx_函数 /297
如何唤起对话框 /297
本章回顾 /299
第11章 View功能之加强与重绘效率之提升/299
同时修改多个 Views:UpdateAllViews 和 OnUpdate/300
在View中定义一个 hint/302
把hint传给 OnUpdate/304
利用hint增加重绘效率/305
可卷动的窗口:CScrollView /307
大窗口中的小窗口:Splitter /313
分裂窗口的功能 /313
分裂窗口的程序概念/314
分裂窗口之实现/315
本章回顾 /317
第12章 印表与预览/317
概观/317
打印动作的后台原理 /320
MFC预设的打印机制 /324
Scribble打印机制的补强 /333
打印机的页和文件的页 /333
配置GDI绘图工具 /334
尺寸与方向:关于映射模式(坐标系统)/334
分页/336
表头(Header)与表尾/338
动态计算页代码/338
打印预览(Print Preview)/339
本章回顾/339
第13章 多重文件与多重显示 /339
MDI 和 SDI /340
多重显像(Multiple Views) /340
窗口的动态分裂 /342
窗口的静态分裂 /343
CreateStatic 和 CreateView /343
窗口的静态三叉分裂 /345
Graph 范例程序 /346
静态分裂窗口之观念整理 /354
同源子窗口 /355
CMDIFrameWnd::OnWindowNew/355
Text 范例程序 /356
非制式作法的缺点 /361
多重文件 /361
新的Document类 /362
新的Document Template /363
新的UI系统 /364
新文件的文件读写动作 /365
第14章 MFC多线程程序设计(Multi-threaded Programming in MFC)/367
从操作系统层面看线程/367
三个观念:模块、进程、线程/367
线程优先权(Priority) /368
线程排程(Scheduling) /369
Thread Context /370
从程序设计层面看线程 /371
Worker Threads 和UI Threads /371
错误观念 /372
正确态度 /372
MFC多线程程序设计 /372
探索CwinThread/372
产生一个Worker Thread/374
产生一个UI Thread /375
线程的结束/376
线程与同步控制 /376
MFC多线程程序实例 /378
第15章 定制一个AppWizard /380
到底Wizard是什么? /381
Custom AppWizard 的基本操作 /381
剖析AppWizard Components /385
Dialog Templates 和Dialog Classes /385
Macros /386
Directives /387
动手修改Top Studio AppWizard/387
利用资源编辑器修改IDD_CUSTOM1对话窗画面/387
利用ClassWizard 修改CCustom1Dlg类 /388
改写OnDismiss 虚函数,在其中定义macros /389
修改text template/389
Top Studio AppWizard执行结果/390
更多的信息/390
第16章 站上众人的肩膀—使用Components和ActiveX Controls/391
什么是Component Gallery /391
使用 Components /393
Splash screen /393
System Info for About Dlg /394
Tips of the Day /394
Components实际运用:ComTest 程序/395
修改ComTest 程序内容 /409
使用ActiveX Controls /411
ActiveX Control 基础观念:Properties、Methods、Events/411
ActiveX Controls 的五大使用步骤/412
使用“Grid”ActiveX Control:OcxTest 程序/413
2010-07-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人