VC程序员的常见症状……

来源:互联网 发布:nodejs无法运行js文件 编辑:程序博客网 时间:2024/04/30 04:49

如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533

 

您是否:

  • 已被MFC绑死,离开MFC眼前漆黑一片
  • 一直对Windows API、C/C++标准库与MFC/ATL之间的暧昧关系心存疑惑
  • 接触Visual C++很长时间,却一直感觉没有真正入门
  • 觉得Visual C++是死水一片,前途黯淡
  • 具有严重的术语恐惧症,看到诸如MFC、ATL、STL、boost、QT、BCGControlBar、SkinMagic等字眼如坠云雾
  • 多次暗下决心要学好Visual C++,都以失败而告终
  • 看了很多的书,却"撩爪就忘",感觉看了也白看
  • 实在是弄不清楚CRT、Secure CRT是什么意思
  • 感觉Visual C++很好很强大,高手如云,却不知自己身处哪个层次
  • 理不清头绪,感觉Visual C++要学的太多,因此常常放弃
  • 常常问自己是否还有必要学习Visual C++,担心它与Web开发技术之间的关系
  • 实在不明白MessageBoxA、MessageBoxW和MessageBox是个什么关系
  • 总认为Visual C++开发的界面难以出手,却又不知道如何改进
  • 用过MFC::CMap,但不知道std::map实为何物
  • 感觉MFC消息处理机制挺神的,总感觉自己的代码身陷迷宫
  • 很担心Visual C++如何与Web应用之间的交互
  • 看见ODBC、DAO、OLE DB和ADO,总感觉是文字游戏,缺乏感性认识
  • 对.NET开发技术心存疑惑和抵触,多年以来仍抱着Visual C++ 6.0不放
  • 缺乏调试技巧,看别人的工程项目看不懂
  • 纸上谈兵很久,书买了不少,遇到实际项目还是犯晕,不知道从何下手,无法独立行走于江湖
  • 不清楚如何在MSDN中查询到自己需要的内容
  • 尽量不在Visual C++中接触到COM,能绕多远绕多远


如果您具备如上症状,请不要错过《把脉VC++》,呵呵,姑且在此做个宣传广告。china-pub似乎可以开始预定了。

 

 

这本书与中医没有任何关系,Visual C++尽管毛病不少,但这本书并不是来讨论如何治病救人的。书名中的"把脉",表达了我们的一种美好愿望,希望通过本书的讨论,帮助读者在实战项目之前,不再犯晕,能够火眼金睛,一下子把住Visual C++编程技术的奇经八脉。


任何一本大部头的书都会在其大纲中详细列出Visual C++的开发技术,但是很少有书将这些开发技术做过分类,指出各种技术的渊源所在,行文上也是照本宣科,将诸多知识点散得七零八落。结果读书的人也只好跟着来个"难得糊涂",好不容易将书"啃"完了,如释重负之余却发现仍然是寸步难行。Visual C++的技术盘根错节,每一门技术会有更多、更细的实现方式,那能否有一张详尽的脉络图来理顺Visual C++的脉络呢?还有,这些主脉技术与当今流行的软件分层模式之间又是个什么关系?冲突乎?重合乎?我们该如何把握?


本书中我们妄以蚍蜉撼树,将这些技术问题一一给出答案,并给出了一张详细的技术脉络图(见彩页)。希望读者朋友们不嫌粗糙,仔细审阅。


本书内容系统、完整,共分为5篇15章。


第1篇:Visual C++速览。讨论软件项目的开发模式及Visual C++的四大开发技术,结合Visual C++的历史讨论Visual C++的真实面目,以及它与其他技术之间的关系。


第2篇:Visual C++中对象的建模与表达。讨论如何采用标准C++、MFC、ATL来表达对象,以及对象之间的赋值与转换问题,并结合STL和MFC集合讨论对象容器的使用。


第3篇:Visual C++中对象的持久化。讨论如何将对象存储到文件、注册表、关系型数据库中,并读取出来。


第4篇:Visual C++中对象的展现。讨论如何在Visual C++中设计界面,如何使用GDI和GDI+绘制图形,以及如何利用Windows强大的消息机制实现界面的交互。


第5篇:Visual C++中对象的传输与调用。讨论如何在各种模块中传输和调用对象,让对象跨越包括进程、线程、DLL、ActiveX、COM及网络等在内的多种边界。

----------------------------------------------------


具体的目录如下:

 

第1篇  Visual C++速览

 

第1章  软件项目中的开发技术    3

1.1  关于软件项目的话题    3

1.2  软件项目的开发过程    3

1.2.1  软件的开发过程    3

1.2.2  排错(debug)    6

1.2.3  原型(prototype)    6

1.2.4  重构(refactor)    7

1.3  软件架构及软件分层    8

1.3.1  软件架构的原则    8

1.3.2  C/S与B/S模式    9

1.3.3  MVC模式    11

1.3.4  文档/视图结构    12

1.3.5  流行的三层结构    12

1.4  在Visual C++项目中的四大主脉技术    13

1.4.1  对象的建模与表达    14

1.4.2  对象的持久化    14

1.4.3  对象的界面展现    15

1.4.4  对象的传输与调用    16

1.4.5  从QQ和MSN说起    17

1.4.6  四大技术与三层结构    23

1.5  回到客栈管理系统    24

1.5.1  对象的建模与表达    24

1.5.2  对象的持久化    26

1.5.3  对象的界面展现    28

1.5.4  对象的传输与调用    29

1.6  本章小结    33

第2章  关于Visual C++的话题    35

2.1  Visual C++与C++    35

2.1.1  Visual C++不是唯一的C++编译器    35

2.1.2  Visual C++不是唯一的C++ IDE    37

2.1.3  Visual C++及MFC/ATL的版本    39

2.1.4  备受争议的Visual C++    40

2.1.5  Visual C++与boost、QT    42

2.2  熟悉Visual C++ IDE    43

2.2.1  文件、项目与解决方案    44

2.2.2  Visual C++代码编辑器    46

2.2.3  Visual C++资源编辑器    47

2.2.4  Visual C++应用向导    49

2.2.5  Visual C++调试器    50

2.3  脱离Visual C++编写程序    54

2.3.1  Dev-C++    54

2.3.2  控制台程序的编写    55

2.3.3  Windows程序的编写    56

2.4  使用Visual C++编写程序    61

2.4.1  Win32控制台程序的编写    61

2.4.2  让控制台程序支持MFC/ATL    62

2.4.3  Win32窗口程序的编写    65

2.4.4  MFC/ATL应用程序的编写    71

2.4.5  CLR程序的编写    78

2.5  茴字的N种写法    79

2.5.1  使用Windows API    80

2.5.2  使用C++标准库(stdcpp)    83

2.5.3  使用CRT(C运行时期库)    84

2.5.4  使用CRT库的宽字符版本    87

2.5.5  使用CRT库的安全版本    88

2.5.6  使用MFC/ATL    89

2.5.7  使用C++/CLI    91

2.5.8  该采用哪一种写法    92

2.6  Visual C++伴侣    93

2.6.1  源代码    93

2.6.2  MSDN与MSDN库    95

2.6.3  Visual Studio Tools    97

2.6.4  Visual Assist X    98

2.6.5  Visual C++资源网站    99

2.7  本章小结    101

第2篇  Visual C++中对象的建模与表达

第3章  常见对象的表达    105

3.1  C++基本类型    105

3.1.1  原始类型    105

3.1.2  复合类型    106

3.1.3  自定义类型    108

3.1.4  __intN    110

3.1.5  <climits>    110

3.2  字符与字符串    111

3.2.1  <cctype>    112

3.2.2  C-style字符串    114

3.2.3  Windows字符类型    115

3.2.4  <cstring>    115

3.2.5  std::string    117

3.2.6  ATL::CString    120

3.3  日期与时间    122

3.3.1  <ctime>    123

3.3.2  ATL::CTime与ATL::CTimeSpan    124

3.3.3  ATL::COleDateTime与ATL::COleDateTimeSpan    127

3.3.4  时间的格式化    127

3.4  位置与尺寸    129

3.4.1  POINT、SIZE、RECT    129

3.4.2  ATL::CPoint、ATL::CSize、ATL::CRect    130

3.5  智能指针(smart pointer)    131

3.5.1  std::auto_ptr    131

3.5.2  ATL::CComPtr与ATL::CComQIPtr    133

3.6  Windows数据类型    134

3.6.1  基本数据类型    134

3.6.2  Windows句柄    135

3.7  MFC对象模型    138

3.7.1  MFC::CObject    139

3.7.2  CObject与RTTI    142

3.7.3  CRuntimeClass    145

3.7.4  百般非议MFC    148

3.8  MFC与ATL    148

3.9  命名规则与名字危机    149

3.10  本章小结    151

第4章  对象的赋值与转换    153

4.1  对象的初始化与赋值    153

4.1.1  struct与class    153

4.1.2  对象的初始化    154

4.1.3  聚合(aggregate)    154

4.1.4  对象的赋值    155

4.1.5  sizeof及字节对齐    155

4.1.6  内存块操作函数memxxx    157

4.1.7  POD对象    158

4.2  对象的类型转换(cast)    160

4.2.1  隐式转换    160

4.2.2  显式转换    161

4.2.3  向上转换与向下转换    163

4.2.4  变体VARIANT    163

4.2.5  _variant_t、CComVariant与COleVariant、CDBVariant    166

4.3  对象的数值转换(conversion)    168

4.3.1  xtoy    168

4.3.2  sprintf、sscanf    168

4.3.3  std::stringstream    170

4.4  数学运算    171

4.4.1  <cmath>    171

4.4.2  随机数    173

4.4.3  复数std::complex    173

4.5  字符与编码    174

4.5.1  字节与字符    175

4.5.2  ANSI、MBCS与UNICODE    175

4.5.3  TCHAR、_T与_TEXT    177

4.5.4  strcpy、wcscpy与_tcscpy    178

4.5.5  MessageBoxA、MessageBoxW与MessageBox    179

4.5.6  ATL::CStringT与std::basic_string    179

4.5.7  BSTR、_bstr_t与ATL::CComBSTR    180

4.5.8  字符串的长度    181

4.5.9  字符的编码转换    183

4.6  使用第三方库    187

4.6.1  万能类型boost::any    187

4.6.2  万能转换器boost::lexical_cast    189

4.6.3  有理数boost::rational    191

4.7  本章小结    192

第5章  对象容器    193

5.1  常见容器    193

5.1.1  向量(vector)    193

5.1.2  列表(list)    194

5.1.3  映射(map)    195

5.1.4  集合(set)    195

5.1.5  队列(queue)    196

5.1.6  栈(stack)    196

5.1.7  选择合适的集合    197

5.2  C++标准容器    198

5.2.1  std::vector    199

5.2.2  std::list    200

5.2.3  std::deque    200

5.2.4  std::map、std::multimap    201

5.2.5  std::set、std::multiset    202

5.2.6  std::bitset    203

5.2.7  std::queue、std:: priority_queue    204

5.2.8  std::stack    205

5.3  泛型算法    206

5.3.1  指示器    206

5.3.2  函数对象    207

5.3.3  泛型算法介绍    210

5.4  MFC/ATL容器    215

5.4.1  MFC::CArray    217

5.4.2  MFC::CList    218

5.4.3  MFC::CMap    218

5.4.4  集合元素的遍历    219

5.5  本章小结    221

第3篇  Visual C++中对象的持久化

第6章  使用文件存取对象    225

6.1  文件操作的几种方式    225

6.1.1  使用CRT函数std::fxxx()    225

6.1.2  使用标准C++库std::fstream    227

6.1.3  使用Windows API    229

6.1.4  使用MFC::CFile    232

6.1.5  文本文件与二进制文件    234

6.2  使用文本文件存取对象    236

6.2.1  文本内容的存取    237

6.2.2  properties文件的读取    237

6.2.3  INI文件的读取    241

6.2.4  CSV文件的读取    243

6.3  使用二进制文件存取对象    247

6.3.1  文件指针的定位    247

6.3.2  定长数据块的读写    248

6.3.3  变长数据块的读写    250

6.3.4  使用MFC::CArchive    254

6.3.5  Windows资源文件的读取    259

6.4  使用XML存取对象    262

6.4.1  XML及其语法    262

6.4.2  XML的解析方式    264

6.4.3  使用MsXML存取XML    266

6.4.4  使用ADO.NET存取XML    271

6.5  本章小结    276

第7章  使用注册表存取对象    277

7.1  注册表及其结构    277

7.1.1  注册表的结构    277

7.1.2  常见的注册表根键    278

7.2  使用注册表API    279

7.2.1  关于注册表操作的API    279

7.2.2  使用Windows API写注册表    280

7.2.3  使用Windows API读注册表    282

7.3  使用CRegKey存取注册表    286

7.3.1  ATL::CRegKey    286

7.3.2  使用CRegKey写注册表    287

7.3.3  使用CRegKey读注册表    289

7.4  本章小结    292

第8章  使用数据库存取对象    293

8.1  数据库概述    293

8.1.1  关系型数据库    293

8.1.2  SQL语句    295

8.1.3  常见数据库访问技术    296

8.2  使用ODBC操纵数据库    297

8.2.1  ODBC    297

8.2.2  使用ODBC API    298

8.2.3  使用MFC::CDatabase    302

8.2.4  封装自己的Recordset    304

8.3  使用DAO操纵数据库    309

8.4  使用OLE DB操纵数据库    313

8.4.1  OLE DB的结构    313

8.4.2  OLE DB使用者模板    314

8.4.3  使用OLE DB访问数据库    315

8.4.4  使用ATL向导创建OLE DB使用者    318

8.5  使用ADO操纵数据库    321

8.5.1  ADO是对象封装接口    322

8.5.2  常见数据源的连接串    322

8.5.3  使用ADODB组件    323

8.5.4  使用ADODC控件    326

8.6  使用ADO.NET操纵数据库    330

8.6.1  ADO.NET与ADO    330

8.6.2  ADO.NET的联机模式    330

8.6.3  ADO.NET的脱机模式    332

8.7  本章小结    337

第4篇  Visual C++中对象的界面展现

第9章  界面的布局    341

9.1  常见界面元素    341

9.1.1  窗口(Window)    341

9.1.2  菜单(Menu)    346

9.1.3  控制栏(Control Bar)    349

9.1.4  客户区与非客户区    358

9.1.5  位图与图标(Bitmap、Icon)    361

9.2  界面的静态布局    363

9.2.1  使用对话框    364

9.2.2  使用控件    368

9.2.3  动态创建对话框和控件    369

9.2.4  使用代码控制控件    371

9.2.5  映射控件变量    373

9.2.6  使用容器放置控件    379

9.2.7  通用对话框    383

9.2.8  使用Windows Forms    386

9.3  界面的动态布局    390

9.3.1  框架窗口    390

9.3.2  文档/视图结构    394

9.3.3  文档与文档模板    396

9.3.4  视图与CView    398

9.3.5  框架窗口都忙些什么    399

9.3.6  拆分窗口    401

9.4  系统托盘    405

9.5  本章小结    408

第10章  界面的绘制与交互    409

10.1  窗口与绘图    409

10.1.1  在DOS下画一个圈    409

10.1.2  在Windows下画一个圈    411

10.1.3  使用GDI绘制的假按钮    414

10.1.4  创建真正的按钮    415

10.1.5  使用GDI+绘图    417

10.2  让界面交互起来    420

10.2.1  一个假的控制台消息系统    420

10.2.2  真正的Windows消息系统    425

10.2.3  鼠标的3次不同点击    428

10.3  MFC对消息机制做了什么?    430

10.3.1  消息映射(Message Mapping)    431

10.3.2  消息映射宏    435

10.3.3  消息路由(Message Route)    436

10.3.4  消息反射(Message Reflection)    440

10.3.5  消息泵(Message Pump)    445

10.4  使用第三方库    447

10.4.1  DirectX    447

10.4.2  OpenGL    450

10.4.3  Qt    452

10.5  本章小结    454

第11章  界面的美化    457

11.1  界面美化的基本途径    457

11.1.1  设定窗口样式(Window Style)    458

11.1.2  调用函数设定控件的扩展样式    462

11.1.3  调用函数设定颜色    464

11.1.4  调用函数设定背景图    465

11.2  重载消息进行界面自绘    466

11.2.1  WM_PAINT    466

11.2.2  OnDraw()与OnPaint()    468

11.2.3  WM_ERASEBKGND    468

11.2.4  =WM_CTLCOLOR    470

11.2.5  =WM_DRAWITEM    472

11.2.6  =WM_MEASUREITEM    476

11.2.7  =NM_CUSTOMDRAW    479

11.3  使用ActiveX控件增强界面    482

11.3.1  ActiveX控件的注册    483

11.3.2  在对话框中引入控件    484

11.3.3  将控件映射成变量    486

11.3.4  常见ActiveX控件推荐    488

11.4  使用第三方库    491

11.4.1  Xtreme Toolkit与BCGControlBar    492

11.4.2  SkinMagic与换肤技术    494

11.5  本章小结    497

第5篇  Visual C++中对象的传输与调用

第12章  进程间对象的传输与调用    501

12.1  进程的操作    501

12.1.1  进程及其常见操作    501

12.1.2  关于进程操作的CRT函数    502

12.1.3  关于进程操作的Windows API    503

12.1.4  Windows进程的创建    504

12.1.5  Windows进程的终止    508

12.2  进程间的通信    510

12.2.1  使用Windows消息传输对象    510

12.2.2  使用文件映射共享数据    512

12.2.3  使用剪贴板传输对象    518

12.2.4  使用匿名管道传输对象    521

12.2.5  使用命名管道传输对象    526

12.2.6  使用邮槽传输对象    530

12.3  本章小结    533

第13章  线程间对象的传输与调用    535

13.1  线程的操作    535

13.1.1  关于线程操作的CRT函数    535

13.1.2  关于线程操作的Windows API    536

13.2  MFC对线程操作的封装    536

13.2.1  工作者线程    537

13.2.2  带界面的工作者线程    539

13.2.3  界面线程    541

13.3  线程通信    543

13.3.1  利用全局对象进行通信    543

13.3.2  利用入口参数进行通信    545

13.3.3  利用Windows消息进行通信    547

13.4  线程同步    549

13.4.1  编写安全的售票程序    550

13.4.2  同步对象CSyncObject    553

13.4.3  利用临界区(Critical Section)实现同步    554

13.4.4  利用互斥体(Mutex)实现同步    556

13.4.5  利用信号量(Semaphore)实现同步    558

13.4.6  利用事件(Event)实现同步    559

13.4.7  CMultiLock 和CSingleLock    563

13.5  本章小结    566

第14章  模块间对象的传输与调用    569

14.1  静态库与动态链接库    569

14.1.1  将mcd包装成mcd.lib    569

14.1.2  将mcd包装成mcd.dll    571

14.1.3  mcd.dll的调用    574

14.1.4  显式调用与隐式调用    576

14.1.5  将类封装成DLL    578

14.2  ActiveX控件    581

14.2.1  将mcd包装成mcd.ocx    581

14.2.2  为mcd.ocx添加SetNumbers方法    586

14.2.3  为mcd.ocx添加Direction属性    589

14.2.4  在HTML中测试McdOcx控件    593

14.3  COM    596

14.3.1  一个不是COM的C++接口    596

14.3.2  一个貌似COM的DLL    601

14.3.3  真假COM    609

14.3.4  使用ATL设计COM组件    611

14.3.5  在JavaScript中测试COM组件    615

14.3.6  使用COM API调用COM组件    616

14.3.7  使用#import方式调用COM组件    619

14.4  本章小结    621

第15章  网络间对象的传输与调用    623

15.1  使用Socket完成网络通信    623

15.1.1  如何向网络上发送一个比特?    623

15.1.2  TCP/IP协议与TCP、UDP    624

15.1.3  Winsock与Winsock API    625

15.1.4  用Socket实现C/S模式    626

15.1.5  使用Winsock打造mcd的网络版    627

15.2  使用MFC::Csocket完成网络通信    632

15.2.1  Winsock与CAsyncSocket、CSocket    632

15.2.2  使用CSocket打造mcd的网络版    634

15.2.3  使用CSocket打造mcd的UDP版    638

15.2.4  使用CSocket事件    640

15.2.5  使用CSocket连接Web站点    648

15.3  使用WinInet API完成网络通信    653

15.3.1  WinInet API与WinInet类    653

15.3.2  使用WinInet API连接mcd的web版    654

15.3.3  使用MFC::WinInet类连接客栈的Web版    658

15.4  本章小结    663

 

原创粉丝点击