VC程序員的常見症狀……

您是否:
  • 已被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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章