第1章 準備開發環境 1
1.1下載並安裝Visual Studio 2017 1
1.2運行第一個程序——Hello World 3
1.3安裝離線MSDN 5
1.4小結 7
第2章 Windows程序內部運行機制 8
2.1API與SDK 8
2.2窗口與句柄 9
2.3消息與消息隊列 10
2.4WinMain函數 11
2.4.1 WinMain函數的定義 12
2.4.2 窗口的創建 13
2.4.3 消息循環 20
2.4.4 編寫窗口過程函數 22
2.5動手寫第一個Windows程序 26
2.6消息循環的錯誤分析 30
2.7變量的命名約定 32
2.8小結 33
第3章 掌握C++ 34
3.1從結構到類 34
3.1.1 結構體的定義 34
3.1.2 結構體與類 36
3.2C++的特性 38
3.2.1 類與對像 39
3.2.2 構造函數 39
3.2.3 析構函數 42
3.2.4 函數的重載 43
3.2.5 this指針 44
3.2.6 類的繼承 46
3.2.7 虛函數與多態性、純虛函數 54
3.2.8 函數的覆蓋和隱藏 58
3.2.9 引用 61
3.2.10 C++類的設計習慣及頭文件重復包含問題的解決 63
3.2.11 VC++程序編譯鏈接的原理與過程 69
第4章 MFC框架程序剖析 71
4.1MFC應用程序向導 71
4.2基於MFC的程序框架剖析 74
4.2.1 MFC程序中的WinMain函數 76
4.2.2 MFC框架窗口 87
4.2.3 消息循環 93
4.2.4 窗口過程函數 95
4.2.5 文檔/視類結構 96
4.2.6 幫助對話框類 96
4.3窗口類、窗口類對像與窗口 97
4.3.1 三者之間關繫 97
4.3.2 在窗口中顯示按鈕 101
4.4本章小結 108
第5章 簡單繪圖 109
5.1MFC消息映射機制 109
5.1.1 類向導 110
5.1.2 消息映射機制 113
5.2繪制線條 118
5.2.1 利用SDK全局函數實現畫線功能 119
5.2.2 利用MFC的CDC類實現畫線功能 120
5.2.3 利用MFC的CClientDC類實現畫線功能 121
5.2.4 利用MFC的CWindowDC類實現畫線功能 123
5.2.5 在桌面窗口中畫線 124
5.2.6 繪制彩色線條 125
5.3使用畫刷繪圖 127
5.3.1 簡單畫刷 127
5.3.2 位圖畫刷 128
5.3.3 透明畫刷 131
5.4繪制連續線條 136
5.5繪制扇形效果的線條 138
5.6本章小結 140
第6章 文本編程 141
6.1插入符 141
6.1.1 創建文本插入符 141
6.1.2 創建圖形插入符 145
6.2窗口重繪 146
6.2.1 OnDraw函數 147
6.2.2 添加字符串資源 149
6.3路徑 151
6.4字符輸入 155
6.4.1 設置字體 160
6.4.2 字幕變色功能的實現 162
6.5本章小結 167
第7章 菜單 168
7.1菜單命令響應函數 168
7.2菜單命令的路由 171
7.2.1 程序類對菜單命令的響應順序 171
7.2.2 Windows消息的分類 172
7.2.3 菜單命令路由的過程 172
7.3基本菜單操作 174
7.3.1 標記菜單 175
7.3.2 默認菜單項 177
7.3.3 圖形標記菜單 179
7.3.4 禁用菜單項 182
7.3.5 移除和裝載菜單 185
7.3.6 MFC菜單命令更新機制 188
7.3.7 快捷菜單 192
7.4動態菜單操作 195
7.4.1 添加菜單項目 195
7.4.2 插入菜單項目 197
7.4.3 刪除菜單 200
7.4.4 動態添加的菜單項的命令響應 200
7.5電話本示例程序 202
7.5.1 動態添加子菜單的實現 203
7.5.2 顯示輸入的字符 205
7.5.3 添加菜單項及其命令響應函數 207
7.5.4 框架類窗口截獲菜單命令消息 210
7.6本章小結 217
第8章 對話框(一) 218
8.1對話框基本知識 218
8.1.1 常用控件介紹 218
8.1.2 對話框的種類 220
8.2對話框的創建和顯示 220
8.2.1 模態對話框的創建 224
8.2.2 非模態對話框的創建 225
8.3動態創建按鈕 227
8.4控件的訪問 231
8.4.1 控件的調整 232
8.4.2 靜態文本控件 233
8.4.3 編輯框控件 235
8.5對話框伸縮功能的實現 247
8.6輸入焦點的傳遞 253
8.7默認按鈕的進一步說明 261
8.8本章小結 261
第9章 對話框(二) 262
9.1 “逃跑”按鈕的實現 262
9.2屬性表單和向導的創建 269
9.2.1 創建屬性頁 272
9.2.2 創建屬性表單 277
9.2.3 向導的創建 279
9.3本章小結 296
附錄 296
第10章 定制應用程序外觀 299
10.1修改應用程序窗口的外觀 299
10.1.1 在窗口創建之前修改 299
10.1.2 在窗口創建之後修改 302
10.2修改窗口的光標、圖標和背景 304
10.2.1 在窗口創建之前修改 304
10.2.2 在窗口創建之後修改 308
10.3模擬動畫圖標 310
10.3.1 加載圖標資源 310
10.3.2 定時器的處理 312
10.4工具欄編程 314
10.4.1 在工具欄上添加和刪除按鈕 315
10.4.2 創建工具欄 316
10.5狀態欄編程 325
10.6進度欄編程 332
10.6.1 在窗口中創建進度欄 332
10.6.2 在狀態欄的窗格中創建進度欄 333
10.7在狀態欄上顯示鼠標當前位置 340
10.8本章小結 343
第11章 繪圖控制 344
11.1簡單繪圖 344
11.2設置對話框 349
11.2.1 設置線寬 349
11.2.2 設置線型 353
11.3顏色對話框 355
11.4字體對話框 360
11.5示例對話框 365
11.6改變對話框和控件的背景及文本顏色 368
11.6.1 改變整個對話框及其上子控件的背景色 369
11.6.2 僅改變某個子控件的背景及文本顏色 370
11.6.3 改變控件上的文本字體 373
11.6.4 改變按鈕控件的背景色及文本顏色 375
11.7位圖的顯示 379
11.8本章小結 384
第12章 圖形的保存和重繪 385
12.1坐標空間和轉換 385
12.1.1 坐標空間 385
12.1.2 轉換 386
12.1.3 邏輯坐標和設備坐標 390
12.2圖形的保存和重繪 392
12.2.1 集合類CPtrArray 394
12.2.2 OnPaint與OnDraw 398
12.3窗口滾動功能的實現 400
12.3.1 CScrollView類 400
12.3.2 圖形錯位現像 402
12文件 407
12.4.文件的使用 407
12.4.文件的保存與打開 411
12.5兼容設備描述表 413
12.6本章小結 416
第13章 文件和注冊表操作 417
13.1const char*和char* const 417
13.1.1 const char* 417
13.1.2 char* const 418
13.2C語言對文件操作的支持 419
13.2.1 文件的打開 419
13.2.2 文件的寫入 420
13.2.3 文件的關閉 422
13.2.4 fflush函數 423
13.2.5 文件指針定位 423
13.2.6 文件的讀取 424
13.2.7 二進制文件和文本文件 428
13.2.8 文本方式和二進制方式 430
13.3C++對文件操作的支持 433
13.4Win32 API對文件操作的支持 435
13.4.1 文件的創建和打開 435
13.4.2 文件的寫入 439
13.4.3 文件的讀取 440
13.5MFC對文件操作的支持 442
13.5.1 文件的寫入 443
13.5.2 文件的讀取 443
13.5.3 CFileDialog類 444
13.6INI文件的訪問 449
13.6.1 INI文件的結構 449
13.6.2 INI文件的寫入 450
13.6.3 INI文件的讀取 451
13.7CWinApp的注冊表讀寫函數 453
13.8注冊表的編程 455
13.8.1 注冊表API 455
13.8.2 注冊表訪問示例 462
13.9本章小結 468
第14章 文檔與串行化 469
14.1使用CArchive類對文件進行讀寫操作 469
14.2MFC框架程序提供的文件新建功能 472
14.2.1 IDR_MAINFRAME字符串資源 473
14.2.2 OnNewDocument函數的調用過程 477
14.3文檔串行化 485
14.3.1 文檔類的Serialize函數 485
14.3.2 MFC框架對Serialize函數的調用過程 487
14.4可串行化的類 495
14.4.1 實現類對串行化的支持 495
14.4.2 利用可串行化類的Serialize函數保存和加載對像 497
14.4.3 版本號 501
14.4.4 利用CObArray類對串行化的支持保存和加載數據 502
14.5文檔對像數據的銷毀 506
14.6本章小結 510
第15章 網絡編程 511
15.1計算機網絡基本知識 511
15.1.1 IP地址 512
15.1.2 協議 512
15.1.3 網絡的狀況 513
15.1.4 網絡異質性問題的解決 513
15.1.5 ISO/OSI七層參考模型 513
15.1.6 數據封裝 516
15.1.7 TCP/IP模型 516
15.1.8 端口 517
15.1.9 套接字(socket)的引入 517
15.1.10 網絡字節順序 518
15.1.11 客戶機/服務器模式 518
15.2Windows Sockets的實現 519
15.2.1 套接字的類型 519
15.2.2 基於TCP(面向連接)的socket編程 519
15.2.3 基於UDP(面向無連接)的socket編程 520
15.3相關函數 520
15.3.1 WSAStartup函數 521
15.3.2 socket函數 522
15.3.3 bind函數 522
15.3.4 inet_addr和inet_ntoa函數 523
15.3.5 inet_pton和inet_ntop函數 524
15.3.6 listen函數 525
15.3.7 accept函數 525
15.3.8 send函數 525
15.3.9 recv函數 526
15.3.10 connect 526
15.3.11 recvfrom 526
15.3.12 sendto函數 527
15.3.13 htons和htonl函數 527
15.4基於TCP的網絡應用程序的編寫 528
15.4.1 服務器端程序 528
15.4.2 客戶端程序 532
15.5基於UDP的網絡應用程序的編寫 535
15.5.1 服務器端程序 535
15.5.2 客戶端程序 537
15.6基於UDP的簡單聊天程序 538
15.6.1 服務器端程序 539
15.6.2 客戶端程序 542
15.7本章小結 544
第16章 多線程 545
16.1基本概念 545
16.1.1 進程 545
16.1.2 線程 549
16.2線程創建函數 550
16.3簡單多線程示例 551
16.4線程同步 555
16.4.1 火車站售票繫統模擬程序 555
16.4.2 多線程程序容易出現的問題 557
16.4.3 利用互斥對像實現線程同步 558
16.5保證應用程序隻有一個實例運行 566
16.6網絡聊天室程序的實現 567
16.6.1 加載套接字庫 568
16.6.2 創建並初始化套接字 569
16.6.3 實現接收端功能 570
16.6.4 實現發送端功能 575
16.7本章小結 577
第17章 線程同步與異步套接字編程 578
17.1事件對像 578
17.1.1 創建事件對像 578
17.1.2 設置事件對像狀態 579
17.1.3 重置事件對像狀態 579
17.1.4 利用事件對像實現線程同步 579
17.1.5 保證應用程序隻有一個實例運行 586
17.2關鍵代碼段 586
17.2.1 相關的API函數 587
17.2.2 利用關鍵代碼段實現線程同步 587
17.3線程死鎖 590
17.4互斥對像、事件對像與關鍵代碼段的比較 594
17.5基於消息的異步套接字 594
17.5.1 相關函數說明 595
17.5.2 網絡聊天室程序的實現 600
17.6本章小結 610
第18章 進程間通信 611
18.1剪貼板 611
18.1.1 數據發送 612
18.1.2 數據接收 616
18.2匿名管道 618
18.2.1 基礎知識 618
18.2.2 進程的創建 619
18.2.3 父進程的實現 624
18.2.4 子進程的實現 628
18.3命名管道 631
18.3.1 基礎知識 631
18.3.2 服務器端程序 635
18.3.3 客戶端程序 640
18.4郵槽 643
18.4.1 服務器端程序 644
18.4.2 客戶端程序 645
18.5本章小結 648
第19章 ActiveX控件 649
19.1ActiveX控件 649
19.1.1 ActiveX控件的好處 650
19.1.2 MFC ActiveX控件向導 650
19.1.3 ActiveX控件的注冊 654
19.1.4 ActiveX控件的測試 656
19.1.5 時鐘控件的實現 659
19.2屬性 660
19.2.1 標準屬性 661
19.2.2 自定義屬性 666
19.3方法 672
19.4事件 674
19.4.1 標準事件 675
19.4.2 自定義事件 676
19.5屬性的持久性 679
19.6環境屬性 681
19.7ActiveX控件測試程序 683
19.8本章小結 686
第20章 動態鏈接庫 688
20.1動態鏈接庫概述 688
20.2DLL的創建和使用 690
20.3隱式鏈接方式加載DLL 693
20.4完善DLL例子 699
20.5從DLL中導出C++類 701
20.6解決名字改編問題 704
20.7顯示加載方式加載DLL 709
20.8DllMain函數 715
20.9MFC DLL 716
20.10本章小結 717
第21章 HOOK編程 718
21.1HOOK編程 718
21.2本章小結 738