第一部分 C++和MFC
第1章 起步 2
1.1 句柄和消息技術內幕 3
1.2 C++精髓 4
1.3 Visual C++ IDE和工作區(qū) 8
1.4 MFC基礎 9
1.5 基于對話框的應用程序 10
1.6 SDI和MDI應用程序 11
1.7 數據查看器 12
1.8 什么是線程 20
1.8.1 引言 20
1.8.2 何謂線程 20
1.8.3 為什么要使用多線程 22
1.8.4 更復雜的情況 22
第2章 數組和集合 24
2.1 從變體型安全數組設置和獲取值的函數 25
2.2 遍歷表容器 26
2.3 可排序CObArray類 28
2.4 可排序CObList類 32
第3章 文檔和視圖 37
3.1 體驗MFC:創(chuàng)建一個MFC應用程序 38
3.1.1 隱藏代碼 38
3.1.2 一個簡單的MFC應用程序 38
3.1.3 單文檔界面應用程序 40
3.1.4 結論 41
3.2 使用更理想跟蹤來理解文檔/視圖結構 41
3.2.1 目的 42
3.2.2 運行演示程序 42
3.2.3 在程序中使用CIndentedTrace 43
3.2.4 CIndentedTrace的工作方式 45
3.2.5 供更高級用戶參考 46
3.3 分割框之上的命令傳遞 48
3.4 在文檔-視圖應用程序中替換視圖 49
第二部分 Visual Studio
第4章 調試 55
4.1 一些常規(guī)調試技巧 56
4.1.1 以簡單. “傻瓜”化方式親密接觸 56
4.1.2 使用調試窗口 56
4.1.3 使用所有可用資源 56
4.1.4 閱讀, 閱讀, 再閱讀 56
4.2 為什么我的項目在發(fā)行模式下不工作 57
4.2.1 預處理器的差異 57
4.2.2 變量初始化差異 57
4.2.3 是否忽略了編譯器警告 58
4.2.4 是否刪除了任何資源 58
4.2.5 在發(fā)行模式中調試 58
4.2.6 補充 58
4.3 擴展Visual Studio 6.0調試器——利用未正式入檔的功能 59
第5章 插件和宏 63
5.1 WM_COMMAND用戶消息宏 64
5.2 插件Project Line Counter(v1.11) 67
5.2.1 描述 68
5.2.2 特征 68
5.2.3 源代碼 68
5.2.4 新版本的更新 68
5.3 文件對話框宏 69
5.3.1 FileDialogHandler 69
5.3.2 對WriteLn的注釋 73
5.4 注釋/取消注釋與其他宏 73
第三部分 Windows編程
第6章 Windows CE 80
6.1 CCeButtonST v1.2 81
6.1.1 摘要 81
6.1.2 如何在應用程序中集成CCeButtonST 82
6.1.3 類方法 83
6.1.4 評論 90
6.1.5 補充 90
6.2 CCeFileFind——Windows CE的文件查找類 92
6.3 檢測WindowsCE中的內存泄漏 93
6.3.1 引言 93
6.3.2 調試技巧 93
6.3.3 工作方式 94
6.3.4 補充 94
第7章 剪貼板 96
7.1 基本復制/粘貼和拖/放支持 97
7.1.1 綜述 97
7.1.2 在剪貼板上放置數據 97
7.1.3 串行化到剪貼板 97
7.1.4 從剪貼板讀取數據 98
7.1.5 從剪貼板串行化 99
7.1.6 拖/放支持 100
7.1.7 維護的問題 102
7.1.8 補充 102
7.2 高級復制/粘貼和拖/放支持 102
7.2.1 引言 102
7.2.2 在剪貼板上放置多種格式 103
7.2.3 延遲實施 105
7.2.4 常見剪貼板格式 107
7.2.5 剪貼板優(yōu)先順序 110
第8章 動態(tài)鏈接庫(.DLL) 111
8.1 MFC .DLL向導(一) 112
8.1.1 不同.DLL類型 112
8.1.2 構建.DLL 113
8.1.3 在客戶應用程序中使用.DLL 115
8.1.4 警告 117
8.2 MFC .DLL向導(二) 117
8.2.1 MFC問題 117
8.2.2 編譯器不兼容性問題 117
8.2.3 重新編譯 118
8.2.4 解決方案 118
8.2.5 結論 121
8.3 MFC .DLL向導(三) 121
8.3.1 從.DLL 中導出資源 121
8.3.2 建立客戶應用程序 122
8.3.3 導出基于CDialog的類 123
第9章 文件和文件夾 125
9.1 GetFolder:Shell擴展文件夾瀏覽器函數 126
9.1.1 綜述 126
9.1.2 代碼 126
9.1.3 補充 127
9.2 SHFILEOPSTRUCT和SHFileOperation 129
9.2.1 引言 129
9.2.2 解決名字沖突與hNameMappings成員 129
9.2.3 獲取文件名 130
9.2.4 示例代碼 130
9.3 優(yōu)化SHGetFileInfo獲得最優(yōu)性能 131
第10章 打印 133
10.1 生成WYSIWYG文本輸出 134
10.2 改進打印預覽工具欄 137
第11章 系統(tǒng) 140
11.1 進程和模塊枚舉類 141
11.2 從HWND獲取模塊(exe)文件名 141
11.3 NotQuiteNullDacl類 143
11.3.1 缺省的安全性并不總是完全令人滿意 143
11.3.2 Null Dacl解決方案 144
11.3.3 求助于NotQuiteNullDacl 145
11.3.4 使用NotQuiteNullDacl類 146
11.3.5 一些副作用 148
11.3.6 參考文獻 148
11.4 共享內存進程間通信(IPC) 148
第四部分 控件
第12章 Button控件 165
12.1 從CStatic派生的平面按鈕類 166
12.1.1 描述 166
12.1.2 小結 166
12.2 標題欄界面 167
12.3 CXPStyleButtonST v1.0 171
12.3.1 摘要 171
12.3.2 如何在應用程序中集成CXPStyleButtonST 172
12.3.3 靜態(tài)創(chuàng)建CXPStyleButtonST對象 172
12.3.4 動態(tài)創(chuàng)建CXPStyleButtonST對象 173
12.3.5 類方法 173
12.3.6 評論 174
12.3.7 致謝 174
12.4 CCharSetBtn控件 174
第13章 ComboBox控件 176
13.1 包含選項歷史的CComboBoxEx 177
13.1.1 摘要 177
13.1.2 如何使用 177
13.1.3 函數 178
13.2 包含選項工具提示的ComboBox 179
13.3 具有樹形下拉框的ComboBox 181
13.3.1 使用類 181
13.3.2 補充 182
13.4 CCheckComboBox:具有復選樹形下拉框的ComboBox 183
第14章 Edit控件 186
14.1 自動填充編輯控件 187
14.2 綜合提示文本和編輯控件的混合編輯控件 187
14.2.1 引言 187
14.2.2 顯示規(guī)則 188
14.2.3 使用CGreyEdit控件 188
14.3 Masked Edit控件(3) 189
14.4 Numeric Edit和Numeric Spin控件 192
第15章 ImageList控件 194
15.1 作為32bpp位圖在ImageList中載入8bpp(256色)位圖 195
第16章 ListBox控件 198
16.1 雙向ListBox選擇管理器 199
16.2 類似Visual Studio的ListBox類 201
16.2.1 如何使用 202
16.2.2 其他改進 203
16.2.3 補充 203
第17章 ListView控件 208
17.1 通過編程的辦法選擇某一項 209
17.2 使用回調排序列表(數字/文本) 209
17.2.1 第1步:實現類 209
17.2.2 第2步:實際運用 213
17.2.3 補充 213
17.3 (無限制)多選項的CreateDragImage 214
17.4 可修改的屬性列表控件 217
17.4.1 工作原理 218
17.4.2 如何使用 218
17.4.3 如何實現自定義屬性項值類 218
17.5 如何自定義屬性列表項值類 219
17.6 如果實現自定義屬性項管理器類 220
17.7 改進的地方 222
第18章 菜單 227
18.1 具有圖標的自繪菜單(3) 228
18.1.1 版本3.0中的新變化 228
18.1.2 引言 229
18.1.3 安裝(MDI應用程序) 229
18.1.4 安裝(SDI應用程序) 232
18.1.5 補充 233
第19章 對話框 236
19.1 更改編輯控件的背景色 237
19.2 可調節(jié)對話框基類 240
19.2.1 引言 240
19.2.2 用法 241
19.2.3 項目實例 241
19.3 不規(guī)則形狀的位圖對話框 241
19.3.1 用法 241
19.3.2 技巧 243
19.3.3 工作原理 243
19.3.4 補充 243
第20章 屬性表 247
20.1 在屬性頁中使用ON_UPDATE_COMMAND_UI 248
第21章 狀態(tài)欄 251
21.1 在狀態(tài)欄顯示光標位置 252
21.2 在狀態(tài)欄窗格顯示進度欄 253
第22章 工具欄 256
22.1 使用16M色圖像的工具欄 257
22.2 全功能24位色工具欄 257
22.3 并排停靠工具欄 261
第23章 TreeView控件 264
23.1 查找項(匹配TV_ITEM的任何成員) 265
23.2 拖放改進——鼠標停留時自動展開 267
第24章 Splitter控件 270
24.1 最小化拆分器 271
24.2 能在任何窗格中切換視圖的CSplitterWnd擴展 273
24.2.1 如何使用示例代碼 274
24.2.2 要點 274
24.2.3 補充 275
24.3 在拆分器窗格內實現標尺 275
24.3.1 引言 276
24.3.2 代碼 276
24.4 拆分器窗口內的工具欄 277
24.4.1 引言 277
24.4.2 代碼 277
第25章 其他控件 280
25.1 內存查看器——包含一個針對任意文本編輯器類型的強大類 281
25.1.1 摘要 281
25.1.2 普通文本編輯器是如何工作的 281
25.1.3 CSW_EditorBase類成員 282
25.1.4 如何使用類CSW_EditorBase 283
25.2 系統(tǒng)映像列表 284
25.3 CMacButton. CMacCheckBox和CMacRadioButton 285
25.4 類似Macintosh的進度控件 286
25.4.1 公有成員函數 287
25.4.2 在對話框中添加CMacProgressCtrl的步驟 287
25.4.3 補充 287
第五部分 圖形和多媒體
第26章 位圖和調色板 289
26.1 在CBitmap中裝載位圖文件的快速方法 290
26.2 調整圖像大小時如何保持長寬比例 290
26.3 透明位圖:真正的屏蔽方法 292
26.3.1 代碼的作用 292
26.3.2 MSDN 293
26.3.3 真正的屏蔽方法 293
26.3.4 如何使用 293
26.3.5 源代碼 293
26.3.6 透明顯示位圖(Zafir Anjum) 294
26.3.7 直接透明blt操作 294
26.3.8 補充 295
26.4 CPicture:Yovav編寫的顯示圖像的類 296
26.5 在MFC和ATL項目上添加GIF動畫 299
第27章 DirectX 303
27.1 使用Direct3D8的基礎知識 304
27.1.1 引言(#include windows.h ) 304
27.1.2 關于例程 304
27.1.3 何謂Direct3D8(Direct3D8=2*(Direct3D7+DirectDraw7)) 305
27.1.4 初始化(即如何開始) 306
27.1.5 從f(x, y) = x + y + z到2D圖像 308
27.1.6 光照管理(黑暗中的貓都是灰色) 310
27.1.7 材質管理(材質為什么是灰色) 311
27.1.8 結論 311
第28章 GDI 314
28.1 檢測顯示字體大小 315
28.1.1 引言 315
28.1.2 檢測字體大小的函數 315
28.2 繪制箭頭線 316
28.3 IPicture對象的流動 319
28.3.1 類 319
28.3.2 使用類 321
第29章 多媒體 323
29.1 直接從資源播放MIDI文件 324
29.1.1 引言 324
29.1.2 公有接口 324
29.1.3 可覆蓋的方法 325
29.1.4 用法 325
29.1.5 補充 326
29.2 CDR.EXE——通過編程實現CD驅動器的打開/關閉 326
29.3 透明動畫控件 328
29.4 簡單混音器控件封裝器 330
29.5 具有n道實時混音器的音頻類庫 332
第30章 OpenGL 335
30.1 簡單OpenGL類 336
30.1.1 特征 336
30.1.2 歷史 336
30.1.3 源代碼 337
30.1.4 支持類 337
30.1.5 演示項目 337
30.1.6 關于作者 337
30.2 在對話框中啟動OpenGL 338
30.3 啟動渲染模式 340
第六部分 數據庫
第31章 ADO 342
31.1 ADO是AOK(簡單ADI向導) 343
31.1.1 起步 343
31.1.2 _ConnectionPtr. _CommandPtr和_RecordsetPtr 343
31.1.3 動態(tài)綁定與DFX 345
31.1.4 何謂_variant_t和_bstr_t 346
31.1.5 更新. 插入和刪除 346
31.1.6 示例代碼 347
31.1.7 補充 348
31.2 ADO是AOK——第二部分 349
31.2.1 使用ATL創(chuàng)建泛型ADO COM對象 349
31.2.2 組件 354
31.2.3 技巧 367
31.2.4 結論 369
31.3 使用ADOX創(chuàng)建數據庫對象 369
31.3.1 概述 370
31.3.2 步驟 370
31.3.3 補充 372
第32章 ODBC 373
32.1 交互式SQL工具(MFC) 374
第33章 存儲過程 376
33.1 使用ADO執(zhí)行存儲過程 377
第34章 XML 381
34.1 從C++程序創(chuàng)建XML文件 382
34.2 使用微軟XML解析器創(chuàng)建XML文檔 383
34.2.1 MXXMLWriter組件基礎知識 383
34.2.2 處理XML文檔基礎知識 384
34.2.3 使用MXXMLWriter創(chuàng)建XML文檔 386
34.2.4 結論 388
第七部分 因特網與網絡
第35章 Socket編程 392
35.1 具有新面孔的聊天室 393
35.1.1 前言 393
35.1.2 基礎 393
35.1.3 使用CSocket的優(yōu)點 394
35.1.4 圖示和解釋 394
35.1.5 如何測試程序 395
35.1.6 特征 395
35.1.7 已知漏洞 396
35.1.8 改進建議 396
35.1.9 致謝 396
35.1.10 聲明 397
第36章 命名管道 399
36.1 Win32平臺下命名管道封裝器 400
36.1.1 背景 400
36.1.2 封裝器 400
36.1.3 示例 400
36.1.4 補充 401
36.2 連接管道類 402
36.2.1 目的 403
36.2.2 主要特征 403
36.2.3 簡介 403
36.2.4 客戶-服務器架構 404
第37章 網絡信息 406
37.1 獲得本地計算機的主機名和IP地址 407
37.2 檢驗是否連接到因特網的函數 409
37.2.1 致謝 409
37.2.2 工作原理 409
37.2.3 函數 410
37.3 使用HTTP的PC時鐘同步 411
37.3.1 引言 411
37.3.2 使用Windows API閱讀WWW網站 412
37.3.3 世界時與本地時 413
37.3.4 鏈接 413
37.3.5 VC++源代碼 413
第八部分 基于COM的技術
第38章 COM 418
38.1 基于MFC COM DLL的DllUnregisterServer 419
38.2 在COM中傳遞二進制數據 421
38.2.1 使用CBufferVariant 422
38.2.2 補充 423
38.3 未在文檔中說明的AFX函數:AfxGetClassIDFromString 424
38.3.1 綜述 424
38.3.2 示例 424
38.4 使用COM通道鉤子機制的COM委托 424
38.4.1 接口用法 427
38.4.2 源代碼. 演示程序. 更新及其他 427
38.4.3 致謝 427
第39章 DCOM 430
39.1 COM安全性入門(第一部分) 431
39.1.1 激活安全性 431
39.1.2 COM編程技巧一 432
39.1.3 訪問安全性 432
39.1.4 COM編程技巧二 434
39.1.5 下一篇文章內容預告:介紹身份和認證 434
39.2 COM安全性入門(第二部分) 434
39.2.1 身份 434
39.2.2 COM編程技巧三 437
39.2.3 認證 437
39.2.4 總結 439
39.3 遠程實例化_com_ptr_t對象 440
39.4 RNSO——運用DCOM的遠程通知者. 主題和觀察者服務器 442
39.4.1 何謂RNSO 442
39.4.2 RNSO的工作原理 442
39.4.3 RNSO的二進制文件 443
39.4.4 例程 443
39.4.5 為什么使用此框架 444
第40章 ActiveX 445
40.1 ActiveX控件向導 446
40.1.1 引言 446
40.1.2 創(chuàng)建ActiveX控件 446
40.1.3 關于作者 455
40.1.4 補充 455
40.2 ActiveX Shell注冊 455
40.2.1 自動安裝 456
40.2.2 手工安裝 456
40.2.3 用法 457
40.2.4 補充 458
40.3 ActiveX控件中的菜單 458
40.3.1 ATL 459
40.3.2 MFC 461
第41章 ATL和WTL 463
41.1 一個查看類型庫信息的ATL項目 464
41.1.1 Lib2Usr ATL組件 464
41.1.2 演示程序和更新過的源代碼 464
41.2 ATL Tear-Off接口 466
41.3 運用WTL進行DDX和DDV 473
41.3.1 引言 473
41.3.2 DDX/DDV的準確涵義 474
41.3.3 DDX實戰(zhàn) 475
41.3.4 在WTL擴展DDX 478
41.3.5 缺省數據處理器 480
第42章 單元和線程 481
42.1 理解COM單元(第一部分) 482
42.1.1 單元基礎知識 482
42.1.2 如何給線程分配單元 484
42.1.3 如何給進程中對象分配單元 485
42.1.4 如何給進程外對象分配單元 487
42.1.5 小結 487
42.2 理解COM單元(第二部分) 488
42.2.1 編寫能正常工作的COM客戶 488
42.2.2 編寫能正常工作的COM服務器 490
42.2.3 小結 492
42.3 精通COM線程模型 493
索引 502