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