VC++深入詳解(第3版)(基於VISUAL STUDIO
作 者: 孫鑫 著
定 價: 168
出?版?社: 電子工業出版社
出版日期: 2019年06月01日
頁 數: 748
裝 幀: 平裝
ISBN: 9787121362217
●目 錄 章 準備開發環境 1 1.1 並安裝Visual Studio 2017 1 1.2 運行個程序―― Hello World 3 1.3 安裝離線MSDN 5 1.4 小結 7 第2章 Windows程序內部運行 機制 8 2.1 API與SDK 8 2.2 窗口與句柄 9 2.3 消息與消息隊列 10 2.4 WinMain函數 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.2 C++的特性 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.1 MFC應用程序向導 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.1 MFC消息映射機制 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 0章 定制應用程序外觀 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 1章 繪圖控制 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 2章 圖形的保存和重繪 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.4 &nb文件 407 12.4文件的使用 407 12.4文件的保存與打開 411 12.5 兼容設備描述表 413 12.6 本章小結 416 3章 文件和注冊表操作 417 13.1 const char*和char* const 417 13.1.1 const char* 417 13.1.2 char* const 418 13.2 C語言對文件操作的支持 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.3 C++對文件操作的支持 433 13.4 Win32 API對文件操作的 支持 435 13.4.1 文件的創建和打開 435 13.4.2 文件的寫入 439 13.4.3 文件的讀取 440 13.5 MFC對文件操作的支持 442 13.5.1 文件的寫入 443 13.5.2 文件的讀取 443 13.5.3 CFileDialog類 444 13.6 INI文件的訪問 449 13.6.1 INI文件的結構 449 13.6.2 INI文件的寫入 450 13.6.3 INI文件的讀取 451 13.7 CWinApp的注冊表讀寫 函數 453 13.8 注冊表的編程 455 13.8.1 注冊表API 455 13.8.2 注冊表訪問示例 462 13.9 本章小結 468 4章 文檔與串行化 469 14.1 使用CArchive類對文件進行 讀寫操作 469 14.2 MFC框架程序提供的文件 新建功能 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 5章 網絡編程 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.2 Windows 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 6章 多線程 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 7章 線程同步與異步套接字編程 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 8章 進程間通信 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 9章 ActiveX控件 649 19.1 ActiveX控件 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.7 ActiveX控件測試程序 683 19.8 本章小結 686 第20章 動態鏈接庫 688 20.1 動態鏈接庫概述 688 20.1.1 靜態庫和動態庫 688 20.1.2 使用動態鏈接庫的好處 689 20.1.3 動態鏈接庫的加載 690 20.2 DLL的創建和使用 690 20.2.1 Dumpbin命令 691 20.2.2 從DLL中導出函數 692 20.3 隱式鏈接方式加載DLL 693 20.3.1 利用extern聲明外部 函數 694 20.3.2 Dependency Walker工具 697 20.3.3 利用_declspec(dllimport) 聲明外部函數 698 20.4 完善DLL例子 699 20.5 從DLL中導出C++類 701 20.6 解決名字改編問題 704 20.7 顯示加載方式加載DLL 709 20.7.1 LoadLibary函數 709 20.7.2 調用約定 711 20.7.3 根據序號訪問DLL中的 導出函數 714 20.8 DllMain函數 715 20.9 MFC DLL 716 20.10 本章小結 717 第21章 HOOK編程 718 21.1 HOOK編程 718 21.1.1 基本知識 718 21.1.2 進程內鉤子 720 21.1.3 全局鉤子 727 21.2 本章小結 738
內容簡介
本書在內容的組織上循序漸進、由淺入深;在知識的介紹上,從內到外、從原理到實踐。章首先為讀者介紹了Visual Studio 2017的安裝和使用,以及離線MSDN的安裝。第2章幫助讀者掌握Windows平臺下程序運行的內部機制。第3章幫助讀者復習C++中的重要知識,為後續知識的學習打下良好的基礎。第4章重點剖析MFC框架程序的運行脈絡,並與第2章的知識做對照,為讀者有效掃清學習MFC的迷霧。相信通過這一章的學習,很多以前學過MFC的讀者都會有一種恍然大悟的感覺。前四章可以歸為基礎部分,從第5章開始就是實際應用開發的講解了,包括繪圖、文本、菜單、對話框、定制程序外觀、圖形保存和重繪、文件和注冊表操作、網絡編程、多線程、進程間通信、ActiveX控件、動態鏈接庫、HOOK編程等多個主題,並且每一章都有一個完整的例子。本書的講解理論結合實際,選用的例子和代碼很好具有代表性和實用價值,我和我的學員......
"前 言 本書版《VC++深入詳解》,從2004年面市,至今已有15年之久,作為一本技術圖書,《VC++深入詳解》的生命力讓我驚嘆,時至今日,該書仍暢銷不衰。15年時光,可以讓一個幼童成長為成人,可以讓一個初涉軟件開發領域的編程新手成長為公司的CTO。15年內,我見證了很多程序愛好者通過閱讀本書進入軟件開發崗位。在給企業做培訓時,經常有企業同行告訴我他是看著我的圖書和視頻成長的,這讓我感到莫大的欣慰。 15年中,Visual C++ 6.0已經逐漸被Visual Studio開發環境所替代,本書的編輯、讀者都希望我能夠將本書進行改版,以適應當前最新的Visual Studio開發環境,然而由於我個人的原因,遲遲沒有將本書從Visual C++ 6.0升級到Visual Studio。不過,遲到的改版終於來了,本書以最新的Visual Studio 2017作為開發環境,將之前適用......
"