編輯推薦
《Windows程式設計(第5版 珍藏版)》作為Windows開發人員的必備參考,涵蓋基礎知識和中高級主題,全面地介紹了Windows程式設計所涉及的細枝末節,旨在幫助讀者從高屋見瓴的角度,建立完整的知識體系,為以後的職業生涯奠定良好的基礎。
全書共3部分23章。第1~12章著重介紹基礎知識,第13~18章的主題為圖形,第19~23章涉及更多高級主題。 適合任何層次的Windows程式設計師閱讀和參考,是幫助他們梳理和建立Windows知識體系的理想讀物。
關於Windows開發的種種問題,大家都習慣性地“Look it up in Petzold”。在這部備受業內人士尊崇的經典著作中,Charles Petzold,這位榮獲Windows Pioneer Award的作者,通過其清晰的結構、通俗的語言、睿智的見解,條分縷析地全面呈現了精彩的Windows編程世界。書中包含權威實例,適合任何層次的Windows程式設計師閱讀和參考。配套CD含可運行於VS2008的全新範例。
作者簡介
佩措爾德(Charles Petzold),從1984年起,Charles Petzold就一直在從事個人計算機編程方面的寫作工作,而且自1985年起就在微軟Windows上編寫程式。在1986年12月的Microsoft Systems Journal上,他發表了第一篇關 Windows編程的文章。在1986至1995年之間,他為PC Magazine系統環境專欄撰寫了大量的文章,為讀者們介紹Windows和OS/2編程的方方面面。
方敏,現任微軟Windows國際軟體工程首席測試部門主管,有著近20年軟體測試管理和開發的豐富經驗,曾參加過微軟多項重大產品和技術的研製,包括Windows Server/Client/Security,SQL Server,Exchange Server,MSN,COM+Setvices,Windows Media及微軟內部IT工具等。方敏擁有清華大學電子工程學學士和碩士學位,美國新墨西哥技術學院計算機碩士學位。
張勝,現任微軟總部高級軟體開發測試主管,10餘年軟體開發測試和團隊管理經驗,參與Visual Studio,SQL Server,Office Live的開發、測試和發布,現主管Office Communications Server本地化軟體開發測試工作。張勝擁有復旦大學計算機系碩士和學士學位。
梁路平,獲得清華大學計算機工程學士、加拿大滑鐵盧大學計算機科學數學碩士和UBC。計算機科學博士等學位。曾任清華大學計算機系教師,加拿大BNR/Nortel高級網路系統科學家,美國Microsoft系統性能工程師,程式設計師及MSN項目經理。上世紀80年代,代表清華大學與加拿大CDNNET中心談判,無償引進網路軟體開發環境EAN,並和中國網際網路之父清華大學胡道元教授歷史性地互換了中國大陸與北美之間的首封Email。業餘喜歡摻和社區公益活動、希望工程、海外中文教育,喜歡和朋友相聚、讀書、聽音樂,跟家人一起週遊世界。
目錄
第1部分 基礎知識
第1章 起步
1.1 Windows環境
1.1.1 Windows簡史
1.1.2 Windows的方方面面
1.1.3 動態連結
1.2 Windows編程選項
1.2.1 API及記憶體管理模式
1.2.2 語言選擇
1.2.3 編程環境
1.2.4 API文檔
1.3 你的第一個Windows程式
1.3.1 字元模式
1.3.2 Windows對應程式
1.3.3 頭檔案
1.3.4 程式入口
1.3.5 MessageBox函式
1.3.6 編譯、連結及運行
第2章Unicode簡介
2.1 字元集簡史
2.1.1 美國標準
2.1.2 美國以外的世界
2.1.3 擴展ASCII
2.1.4 雙位元組字元集
2.1.5 Unicode的解救方案
2.2 寬字元和c語言
2.2.1 char數據類型
2.2.2 更寬的字元
2.2.3 寬字元庫函式
2.2.4 維護一個原始碼檔案
2.3 寬字元和Windows
2.3.1 Windows頭檔案的類型
2.3.2 Windows函式調用
2.3.3 Windows的字元串函式
2.3.4 在Windows中使用printf
2.3.5 格式化的訊息框
2.3.6 國際化之於本書
第3章 視窗與訊息
3.1 視窗的創建
3.1.1 系統結構概述
3.1.2 HELLOWIN程式
3.1.3 通盤考慮
3.1.4 視窗類的註冊
3.1.5 視窗的創建
3.1.6 視窗的顯示
3.1.7 訊息循環
3.1.8 視窗過程
3.1.9 訊息的處理
3.1.10 聲音檔案的播放
3.1.11 WM_PAINT訊息
3.1.12 WM_DESTROY訊息
3.2 Windows編程中的若干難點
3.2.1 究竟是誰調用誰
3.2.2 佇列訊息和非佇列訊息
3.2.3 速戰速決
第4章 文本輸出
4.1 繪製和重繪
4.1.1 WM_PAINT訊息
4.1.2 有效矩形和無效矩形
4.2 GDI簡介
4.2.1 設備環境
4.2.2 獲取設備環境句柄:方法一
4.2.3 繪製信息結構
4.2.4 獲取設備環境句柄:方法二
4.2.5 TEXTOUT函式詳解
4.2.6 系統字型
4.2.7 字元大小
4.2.8 文本尺寸的度量
4.2.9 文本的格式化
4.2.10 綜合使用
4.2.11 SYSMETSl.C視窗過程
4.2.12 空間不夠
4.2.13 客戶區的尺寸
4.3 滾動條
4.3.1 滾動條的範圍和位置
4.3.2 滾動條訊息
4.3.3 加入滾動條的SYSMET
4.3.4 程式的繪製代碼的結構
4.4 效果更好的滾動
4.4.1 滾動條信息函式
4.4.2 最遠可以捲動到哪裡?
4.4.3 新的SYSMETS
4.4.4 可我不想用滑鼠
第5章 繪圖基礎
5.1 GDI的結構
5.1.1 GDI原理
5.1.2 GDI函式調用
5.1.3 GDI的基本圖形
5.1.4 其他
5.2 設備環境
5.2.1 獲取設備環境句柄
5.2.2 獲取設備環境的信息
5.2.3 DEVCAPSl程式
5.2.4 設備的尺寸
5.2.5 色彩ABC
5.2.6 設備環境屬性
5.2.7 保存設備環境
5.3 點和線的繪製
5.3.1 設定像素
5.3.2 直線
5.3.3 框線繪製函式
5.3.4 貝塞爾樣條曲線
5.3.5 使用現有畫筆
5.3.6 創建、選擇和刪除畫筆
5.3.7 填充空隙
5.3.8 繪圖模式
5.4 繪製填充區域
5.4.1 Polygon函式和多邊形填充模式
5.4.2 用畫刷填充內部
5.5 GDI映射模式
5.5.1 設備坐標和邏輯坐標
5.5.2 設備坐標系統
5.5.3 視口和視窗
5.5.4 使用MMTEXT
5.5.5 度量映射模式
5.5.6 自定義的映射模式
5.5.7 WHATSIZE程式
5.6 矩形、區域和剪裁
5.6.1 處理矩形
5.6.2 隨機矩形
5.6.3 建立和繪製區域
5.6.4 矩形與區域的剪裁
5.6.5 CLOVER程式
第6章 鍵盤
6.1 鍵盤基礎
6.1.1 忽略鍵盤
6.1.2 誰獲得了焦點?
6.1.3 佇列和同步
6.1.4 擊鍵和字元
6.2 擊鍵訊息
6.2.1 系統鍵擊和非系統鍵擊
6.2.2 虛擬鍵代碼
6.2.3 1param信息
6.2.4 轉義狀態
6.2.5 使用擊鍵訊息
6.2.6 為SYSMETS加上鍵盤處理功能
6.3 字元訊息
6.3.1 四類字元訊息
6.3.2 訊息排序
6.3.3 控制字元的處理
6.3.4 死字元訊息
6.4 鍵盤訊息和字元集
6.4.1 KEYVIEW1程式
6.4.2 非英語鍵盤問題
6.4.3 字元集和字型
6.4.4 Unicode解決方案
6.4.5 TrueType字型和大字型
6.5 插入符號(不是游標)
6.5.1 一些關於插入符號的函式
6.5.2 TYPER程式
第7章 滑鼠
7.1 滑鼠的基礎知識
7.1.1 一些基本術語
7.1.2 滑鼠的複數形式是什麼?
7.2 客戶區滑鼠訊息
7.2.1 簡單的滑鼠處理示例
7.2.2 處理Shift鍵
7.2.3 滑鼠雙擊
7.3 非客戶區滑鼠訊息
7.3.1 擊中測試訊息
7.3.2 訊息引發訊息
7.4 程式中的擊中測試
7.4.1 一個假想的例子
7.4.2 一個簡單的程式
7.4.3 使用鍵盤模仿滑鼠操作
7.4.4 在CHECKER中增加鍵盤接口
7.4.5 在擊中測試中使用子視窗
7.4.6 CHECKER程式中的子視窗
7.4.7 子視窗和鍵盤
7.5 捕獲滑鼠
7.5.1 設計一個矩形
7.5.2 捕獲的解決方案
7.5.3 BLOKOUT2程式
7.6 滑鼠的滾輪
第8章 計時器
8.1 計時器的基本知識
8.1.1 系統和計時器
8.1.2 計時器訊息不是異步的
8.2 使用計時器的三種方法
8.2.1 方法一
8.2.2 方法二
8.2.3 方法三
8.3 使用計時器作為時鐘
8.3.1 數字時鐘
8.3.2 獲取當前時間
8.3.3 顯示數字和冒號
8.3.4 考慮國際化
8.3.5 模擬時鐘
8.4 在狀態報告上使用計時器
第9章 子視窗控制項
9.1 按鈕類
9.1.1 創建子視窗
9.1.2 子視窗傳遞信息給父視窗
9.1.3 父視窗傳遞信息給子視窗
9.1.4 按鈕
9.1.5 複選框
9.1.6 單選按鈕
9.1.7 組合框
9.1.8 改變按鈕文本
9.1.9 可見的按鈕和啟用的按鈕
9.1.10 按鈕和輸入焦點
9.2 控制項和顏色
9.2.1 系統顏色
9.2.2 按鈕的顏色
9.2.3 WMCTLCOLORBTN訊息
9.2.4 自繪按鈕
9.3 靜態類
9.4 滾動條類
9.4.1 COLORS1程式
9.4.2 自動鍵盤接口
9.4.3 視窗子類
9.4.4 背景著色
9.4.5 給滾動條和靜態文本著色
9.5 編輯類
9.5.1 編輯類的樣式
9.5.2 編輯控制項的通知訊息
9.5.3 使用編輯控制項
9.5.4 傳遞給編輯控制項的訊息
9.6 列表框類
9.6.1 列表框的樣式
9.6.2 向列表框中添加字元串
9.6.3 項目的選擇和提取
9.6.4 接收來自列表框的訊息
9.6.5 簡單的列表框程式
9.6.6 列出檔案
9.6.7 Windows的HEAD程式
第10章 選單和其他資源
10.1 圖示、滑鼠指針、字元串和自定義資源
10.1.1 向程式添加圖示
10.1.2 獲得圖示的句柄
10.1.3 在應用程式中使用圖示
10.1.4 使用自定義滑鼠指針
10.1.5 字元串資源
10.1.6 自定義資源
10.2 選單
10.2.1 和選單有關的概念
10.2.2 選單結構
10.2.3 定義選單
10.2.4 在程式中引用選單
10.2.5 選單和訊息
10.2.6 範例程式
10.2.7 選單設計中的規範
10.2.8 定義選單的繁瑣方式
10.2.9 浮動彈出選單
10.2.1 0使用系統選單
10.2.1 1改變選單
10.2.1 2其他選單命令
10.2.1 3選單的另類用法
10.3 鍵盤加速鍵
10.3.1 為什麼你應該使用鍵盤加速鍵
10.3.2 指定加速鍵的一些規則
10.3.3 加速鍵表
10.3.4 載入加速鍵表
10.3.5 翻譯按鍵
10.3.6 接收加速鍵訊息
10.3.7 帶有選單和加速鍵的POPPAD程式
10.3.8 啟用選單項
10.3.9 處理選單項
第11章 對話框
11.1 模態對話框
11.1.1 創建一個About對話框
11.1.2 對話框及其模板
11.1.3 對話框過程
11.1.4 激活對話框
11.1.5 主題變換
11.1.6 更複雜的對話框
11.1.7 對話框控制項的套用
11.1.8 OK和Cancel按鈕
11.1.9 避免全局變數
11.1.1 0Tab停靠和選項組
11.1.1 1在對話框上繪圖
11.1.1 2關於對話框的其他函式.
11.1.1 3定義程式自己的控制項
11.2 非模態對話框
11.2.1 模態與非模態對話框的區別
11.2.2 新的COLORS程式
11.2.3 HEXCALC:視窗還是對話框?
11.3 公用對話框
11.3.1 完善POPPAD
11.3.2 Unicode檔案的讀/寫操作
11.3.3 改變字型
11.3.4 查找和替換
11.3.5 只調用一個函式的Windows程式
第12章剪貼簿 447
12.1剪貼簿的簡單用法 447
12.1.1剪貼簿數據的標準格式 447
12.1.2記憶體分配 449
12.1.3把文本傳到剪貼簿 451
12.1.4從剪貼簿中取得文本 452
12.1.5打開和關閉剪貼簿 453
12.1.6剪貼簿和Unicode 453
12.2剪貼簿的高級用法 457
12.2.1使用多種數據項 458
12.2.2延遲呈現 459
12.2.3私有數據類型 460
12.3實現一個剪貼簿查看器 462
12.3.1剪貼簿查看器鏈 463
12.3.2剪貼簿查看器函式和訊息 463
12.3.3一個簡單的剪貼簿查看器 465
第II部分關於圖的那些事兒
第13章使用印表機 471
13.1列印基礎 472
13.1.1列印和後台處理 472
13.1.2印表機設備環境 475
13.1.3DEVCAPS程式修訂版 477
13.1.4PrinterProperties函式調用 485
13.1.5檢查BitBlt的能力 485
13.1.6最簡單的列印程式 486
13.2列印圖形和文字 487
13.2.1列印精華 490
13.2.2用異常終止過程取消列印 491
13.2.3Windows如何使用
AbortProc 492
13.2.4實現異常終止過程 493
13.2.5增加一個列印對話框 495
13.2.6增加列印功能到POPPAD 498
第14章點陣圖和位塊傳輸 505
14.1點陣圖基礎 505
14.2點陣圖尺寸 506
14.2.1顏色和點陣圖 507
14.2.2現實世界的設備 507
14.2.3GDI中的點陣圖支持 510
14.3位塊傳輸 511
14.3.1簡單的BitBlt 511
14.3.2拉伸點陣圖 514
14.3.3StretchBlt模式 517
14.3.4光柵操作 517
14.3.5圖案Blt 519
14.4GDI點陣圖對象 522
14.4.1創建DDB 522
14.4.2點陣圖的位 524
14.4.3記憶體設備環境 525
14.4.4載入點陣圖資源 526
14.4.5單色點陣圖格式 529
14.4.6點陣圖畫刷 532
14.4.7在點陣圖上繪圖 534
14.4.8陰影點陣圖 537
14.4.9在選單中使用點陣圖 541
14.4.10非矩形的點陣圖圖像 552
14.4.11簡單的動畫效果 556
14.4.12視窗以外的點陣圖 559
第15章設備無關點陣圖 569
15.1DIB檔案格式 569
15.1.1OS/2風格的DIB 570
15.1.2自下而上存儲! 572
15.1.3DIB像素位 573
15.1.4Windows擴展DIB 574
15.1.5現實情況 577
15.1.6DIB壓縮 578
15.1.7顏色遮罩 581
15.1.8版本4的檔案頭 583
15.1.9版本5的頭檔案 587
15.1.10顯示DIB信息 588
15.2顯示和列印 594
15.2.1探究DIB 595
15.2.2從像素到像素 597
15.2.3DIB的顛倒世界 604
15.2.4順序顯示 610
15.2.5拉伸到合適大小 617
15.2.6顏色轉換、調色板和性能 625
15.3DIB和DDB的結合 626
15.3.1從DIB創建DDB 627
15.3.2從DDB到DIB 633
15.3.3DIB區塊 633
15.3.4DIB區塊的更多不同點 640
15.3.5檔案映射選項 641
第16章調色板管理器 643
16.1調色板的使用 643
16.1.1視頻硬體 643
16.1.2顯示灰色圖像 644
16.1.3調色板的訊息 650
16.1.4調色板索引方式 651
16.1.5查詢對調色板的支持 654
16.1.6系統調色板 655
16.1.7其他的調色板函式 655
16.1.8光柵操作的問題 656
16.1.9查看系統調色板 657
16.2調色板動畫 665
16.2.1彈球 666
16.2.2單一條目的調色板動畫 672
16.2.3工程套用 676
16.3調色板和現實世界中的圖像 680
16.3.1調色板和緊湊DIB 680
16.3.2通用調色板 688
16.3.3半色調調色板 693
16.3.4索引調色板顏色 697
16.3.5調色板和點陣圖對象 702
16.3.6調色板和DIB區塊 706
16.4一個DIB點陣圖庫的實現 711
16.4.1DIBSTRUCT結構 712
16.4.2信息獲取函式 713
16.4.3讀/寫像素信息 719
16.4.4創建和轉換 722
16.4.5DIBHELP頭檔案和宏 732
16.4.6DIBBLE程式 734
16.4.7簡單的調色板和最佳化的
調色板 753
16.4.8格式轉換 765
第17章文本和字型 769
17.1簡單文本輸出 769
17.1.1文本輸出函式 769
17.1.2文本的設備環境屬性 772
17.1.3使用庫存字型 773
17.2字型的背景知識 774
17.2.1字型分類 774
17.2.2TrueType字型 775
17.2.3屬性和樣式的區別 776
17.2.4點值 776
17.2.5行間距和字間距 776
17.2.6邏輯英寸問題 777
17.3邏輯字型 778
17.3.1邏輯字型的創建和選擇 778
17.3.2PICKFONT程式 779
17.3.3邏輯字型結構 792
17.3.4字型匹配算法 795
17.3.5獲取字型信息 796
17.3.6字元集和Unicode 798
17.3.7EZFONT系統 799
17.3.8字型旋轉 806
17.4字型枚舉 807
17.4.1枚舉函式 808
17.4.2ChooseFont對話框 808
17.5設定段落格式 816
17.5.1設定簡單的文本格式 816
17.5.2段落的處理 817
17.5.3列印預覽 824
17.6一些有趣和新奇的內容 833
17.6.1GDI路徑 834
17.6.2擴展的畫筆 835
17.6.3四個範例程式 838
第18章圖元檔案 845
18.1老式圖元檔案格式 845
18.1.1記憶體圖元檔案的簡單用法 846
18.1.2把圖元檔案存儲到磁碟 848
18.1.3老式的圖元檔案和剪貼簿 849
18.2增強型圖元檔案 853
18.2.1基本步驟 853
18.2.2窺探內部機制 856
18.2.3圖元檔案和GDI對象 862
18.2.4圖元檔案和點陣圖 867
18.2.5枚舉圖元檔案 870
18.2.6嵌入圖像 876
18.2.7增強型圖元檔案的查看
和列印程式 879
18.2.8顯示精確的圖元檔案圖像 887
18.2.9縮放比例和縱橫比 895
18.2.10圖元檔案中的映射模式 897
18.2.11使用映射模式顯示圖元
檔案 899
第III部分高級主題
第19章多文檔界面 905
19.1MDI的概念 905
19.1.1MDI的構成元素 905
19.1.2MDI支持 906
19.2MDI實現範例 907
19.2.1三個選單 917
19.2.2程式初始化 917
19.2.3創建子視窗 918
19.2.4更多框架視窗訊息的處理 919
19.2.5子文檔視窗 920
19.2.6清理 922
第20章多任務和多執行緒 923
20.1多任務的模型 923
20.1.1DOS下的多任務 923
20.1.2非搶占式的多任務 924
20.1.3PM和串列訊息佇列 925
20.1.4多執行緒解決方案 925
20.1.5多執行緒架構 926
20.1.6執行緒的麻煩 927
20.1.7Windows的好處 927
20.1.8新的!改進過的!加了
執行緒的! 928
20.2Windows中的多執行緒 929
20.2.1隨機矩形程式的多執行緒
版本 929
20.2.2編程競賽問題 932
20.2.3多執行緒的解決方案 937
20.2.4還有問題嗎? 944
20.2.5休眠的好處 945
20.3執行緒的同步 945
20.4觸發事件 947
20.4.1BIGJOB1程式 947
20.4.2事件對象 951
20.5執行緒本地存儲 955
第21章動態程式庫 957
21.1關於庫的基本知識 957
21.1.1庫:一詞多義 958
21.1.2一個簡單的DLL 958
21.1.3庫的入口點和退出點 961
21.1.4測試程式 962
21.1.5在DLL中共享記憶體 964
21.1.6STRPROG程式 969
21.1.7多個STRPROG實例共享
數據 973
21.2關於動態程式庫的其他話題 974
21.2.1沒有導入函式的動態
程式庫 974
21.2.2資源庫 975
第22章聲音和音樂 979
22.1Windows和多媒體 979
22.1.1多媒體硬體 979
22.1.2API概述 980
22.1.3使用TESTMCI程式來
學習MCI 981
22.1.4TESTMCI和CD音頻 985
22.2波形音頻 989
22.2.1聲音和波形 989
22.2.2脈衝編碼調製 990
22.2.3採樣率 990
22.2.4採樣大小 991
22.2.5用軟體生成正弦波 992
22.2.6數字錄音機 1000
22.2.7使用MCI的錄音機 1010
22.2.8用MCI命令字元串的
方法 1016
22.2.9波形音頻檔案格式 1019
22.2.10嘗試使用加法合成 1021
22.2.11波形音頻鬧鐘 1028
22.3MIDI和音樂 1035
22.3.1MIDI的工作方式 1035
22.3.2音色變換 1037
22.3.3MIDI通道 1037
22.3.4MIDI訊息 1038
22.3.5MIDI序列簡介 1040
22.3.6通過PC鍵盤演奏MIDI
合成器 1045
22.3.7MIDI打鼓機器 1059
22.3.8多媒體time函式 1075
22.3.9RIFF檔案I/O 1078
第23章嘗試網際網路 1081
23.1Windows套接字 1081
23.1.1套接字和TCP/IP 1081
23.1.2網路時間服務 1082
23.1.3NETTIME程式 1083
23.2WinInet和FTP 1093
23.2.1FTPAPI概述 1094
23.2.2UPDDEMO程式 1095