《偉大的產品:Windows進化啟示錄》是2016年電子工業出版社出版的圖書,作者是雷蒙德·陳。
基本介紹
- 中文名:偉大的產品:Windows進化啟示錄
- 作者:【美】Raymond Chen(雷蒙德·陳)
- 譯者:聶雪軍
- ISBN:9787121278297
- 頁數:476
- 定價:99.00元
- 出版社:電子工業出版社
- 出版時間:2016年3月
- 開本:16開
編輯推薦,內容簡介,圖書目錄,作者簡介,
編輯推薦
儘管一直被吐槽,但是Windows依然是用得最多的個人作業系統。是什麼原因讓人對它吐槽不斷,卻又始終不離不棄?讀完本書,相信你會有答案。從Windows 中‘開始(Start)’按鈕的設計過程,到討論只有極客們才會喜歡的GlobalAlloc,本書幾乎涵蓋了Windows 系統從高層到低層的方方面面,既有引人入勝的小八卦,也有深入的技術分析,它將幫助你真正地體會在設計和編寫高質量軟體產品的過程中存在的困難和不易。
內容簡介
憑藉在微軟Windows 開發團隊十多年的工作經驗,作者Raymond Chen 將向你揭示你不可不知的Windows 系統內幕。《偉大的產品:Windows進化啟示錄》的許多內容都是講述某項技術的來龍去脈,通過了解這些歷史故事,你不僅可以更加透徹地理解Windows 的設計思想,還可以澄清一些由來已久的誤解。
對於Windows 平台的開發者,閱讀《偉大的產品:Windows進化啟示錄》有助於提高工作效率;而對於軟體產品經理、UI 設計人員,則能從其中獲得不少有益的啟示。
圖書目錄
第 1 章 用戶界面設計初探
為什麼要單擊“開始(Start)”按鈕來關機
為什麼Windows 沒有“專家模式(expert mode)”
對話框的默認按鈕是“取消”
最好的設定是:即使你沒有意識到這些設定的存在,但它們依然按照你所期望的
方式在工作
為了顯示我們的超群智慧,現在就來問一個你回答不了的問題
為什麼安裝程式不會問你是否希望保留作業系統檔案的新版本
功能設計的思考
什麼時候應該禁止選項,而什麼時候又該刪除選項
什麼時候應該將“…”放在按鈕或者選單項的後面
自動售貨機的用戶界面設計
室內門鎖的用戶界面設計
Windows 用戶界面中“睫毛膏”的演變
第 2章 Windows 95 的精選回憶錄
為什麼在世界地圖中,當前時區沒有被加亮顯示
為什麼當記憶體超過 1GB 時,Windows 95 無法啟動
為什麼在Windows 95 中有些函式叫作BEAR、 BUNNY 和PIGLET
BOZOSLIVEHERE 和TABTHETEXTTOUTFORWIMPS 表示什麼含義
在Windows 95 特別版的包裝盒中都有些什麼東西
Windows 95 引出了每個人的羅爾沙赫氏測試
登錄時的武術圖片
為什麼一個非常大的詞典反而不好
了解Windows 95 的啟動聲音
如果不在意正確性,寫專欄文章是很容易的
為什麼在系統屬性頁中對記憶體的大小進行了取整
為什麼硬碟指示燈每隔幾秒鐘閃一下
尋求更快的系統陷阱
一個位元組曾經價值一美元
每個產品支持電話的成本相當於賣出一個Windows 拷貝
為什麼在Windows 的光碟中沒有包含Tweak UI
不能通過xcopy 來安裝Windows
買下一個Egghead 軟體商店
Windows PowerToys 的歷史故事
Windows 如何選擇最終構建編號
為什麼在安裝系統補丁包時系統的構建編號不會增加
第 3 章 GetWindowText 函式的秘密
視窗如何管理文本
深入了解GetWindowText 函式
如果我不喜歡這些規則,那該怎么辦
能否給出一個示例程式來說明這種差異
為什麼GetWindowText 的規則如此奇怪
第 4 章 系統列與通知區域
為什麼有些人把系統列叫作“托盤”
為什麼系統列默認是在螢幕的底部
為什麼在系統列中的時鐘並不顯示秒
為什麼不在系統列中顯示模擬時鐘
為什麼當系統列豎直停靠時,“開始”按鈕上的文本消失了
為什麼當用戶單擊“X”按鈕,通知圖示不會收到訊息
第 5 章 令人困惑的界面問題
那些小小的覆蓋圖示是什麼
為什麼當我登錄時,有些不希望看到的檔案/資料夾會自動打開
對檔案來說,檔案名稱字型的顏色代表什麼含義
為什麼在高級選項對話框中,在每個選項後面都會加上“開”或者“關”
Alt+Tab 中的圖示順序是如何確定的
為什麼資料夾的“唯讀”屬性非常奇怪
當我單擊空白系統列按鈕時,這些按鈕消失了,發生了什麼事
“最小化所有視窗”和“顯示桌面”之間的區別是什麼
在選單中的粗體文本表示什麼含義
自定義的網頁圖示是從何而來的
任務管理器的標籤和按鈕到哪裡去了
拖動一個檔案是表示移動還是複製
為什麼“連結”資料夾總是不斷地自我創建
為什麼同時選擇多個文檔進行列印時,文檔的列印順序是亂的
我在產品支持部門的一天
吹掉連線器上的灰塵
1G 位元組到底有多少
為什麼不能刪除“僅用於測試/評估”的標記
第 6 章 GlobalAlloc 函式的歷史
從前的故事
選擇符
過渡到Win 32
實現示例
第 7 章 Windows 編程中的一些話題
“臨時”程式
獲得在標題圖示中的自定義右鍵選單
CreateMenu 與CreatePopupMenu 有什麼區別
為什麼視窗管理器會自動銷毀選單
僅當視窗在螢幕上可見時才進行繪製
判斷視窗是否被覆蓋了
用點陣圖刷來實現平鋪效果
DC 畫刷的好處是什麼
用ExtTextOut 函式來繪製實心矩形
用StretchBlt 函式來繪製實心矩形
在顯示字元串時去掉那些難看的方框
沒有所有者的信號量
自動復位的事件只是一個毫無意義的信號量
第8 章 視窗管理
為什麼會收到偽WM_MOUSEMOVE 訊息
為什麼沒有WM_MOUSEENTER 訊息
白屏
空心畫刷的作用是什麼
桌面視窗有什麼特殊的地方
禁止視窗和激活視窗的正確順序
恢復視窗位置時的問題
界面模態與代碼模態
WM_QUIT 訊息與模態
為模態界面設定正確的所有者視窗
與進入模態的程式進行互動
定時訊息框的簡單版本
臨時視窗
在GWLP_USERDATA 中的附加視窗數據
定時訊息框的改進版本
定時右鍵選單
為什麼視窗在被銷毀之後還會收到訊息
第 9 章 關於硬體的回憶錄
硬體的向後兼容性
光碟機
微軟公司的網路:比“地獄”差 1.7 倍
有時候製造商會自取其辱
欺騙WHQL 的驅動程式認證過程
20 英尺長的計算機
USB 手推車
檢測到了新設備:波音 747
超頻帶來的問題
第 10 章 對話框管理器的內部工作機制
關於對話框過程
對話框模板的發展
為什麼需要對話框模板
對話框是如何創建的
模態對話框的訊息循環
嵌套對話框以及DS_CONTROL
為什麼需要對話框循環
為什麼對話框編輯器從 100 開始設定控制項的ID
在DefDlgProc 函式中做了哪些工作
不要將焦點設定在被禁止的控制項上
在IsDialogMessage 中做了什麼工作
為什麼有些訊息框中的“X”按鈕是被禁止的
第11 章 常見的軟體問題
為什麼夏令時與我們的直覺不同
為什麼當檔案複製到軟碟時,檔案的時間戳會發生變化
不要相信返回地址
編寫排序比較函式
可以從另一端來理解契約
實用主義和純粹主義之間的爭論
最佳化通常是違背直覺的
在伺服器上,分頁=當機
不要保存任何能夠重新計算的結果
通過增加其他組件的開銷來提升性能
輪循的性能問題
檢測記憶體泄漏的簡單方法
不好的快取策略將導致記憶體泄漏
第 12 章 深入研究Visual C++編譯器
析構函式在什麼時候調用
COM 對象的布局
調節轉換器
指向成員函式的指針是非常奇怪的
什麼是__purecall
第 13 章 向後兼容性
有些應用程式的本意就是要造成崩潰
當程式使用未公開的結構時
為什麼不阻止那些使用了未公開結構的程式
為什麼 16 位DOS 和 16 位Windows 仍然存在
像NUL 和CON 這些保留檔案名稱的作用是什麼
為什麼(有時候)在UNC 路徑前面是一個驅動器盤符
不要輕視“獵鹿者”這個遊戲的威力
有時候,遊戲中的bug 只有在玩了一段時間後才會顯現出來
Shell Folders 鍵的故事
保持錯誤碼的向後兼容性是很重要的
沒錯,我們實現了這個功能
有些程式在為作業系統打補丁時將陷入困境
即使在內部數據結構中也存在著兼容性問題
為什麼Windows 讓BIOS 時間保持為本地時間
版本號的檢測
破壞IUnknown::QueryInterface 的幾種方式
當程式假設作業系統永遠不會發生改變——之一
當程式假設作業系統永遠不會發生改變——之二
偽顯示控制臺
偽可視化風格
第 14 章 一些名字的來源和歷史
在WPARAM 和LPARAM 中,字母W 和L 分別表示什麼意思
為什麼在Windows 98 中,顯示器的最大數量是 9
為什麼註冊表檔案被叫作蜂窩
16 位Windows 中對資源的記憶體管理
HINSTANCE 和HMODULE 之間的區別是什麼
在WinMain 函式中,hPrevInstance 參數的作用是什麼
為什麼GlobalWire 函式被叫作這個名字
LocalAlloc 和GlobalAlloc 之間的區別是什麼
GMEM_SHARE 標誌的作用是什麼
為什麼在轉換到LPARAM 之前會進行一個多餘的轉換
為什麼有些註冊表函式的名字以Ex 結尾
SHGetMalloc,SHAlloc 和CoGetMalloc 之間的區別是什麼
為什麼Windows 錯誤報告程式的暱稱是DrWatson
DirectX 4 出了什麼問題
為什麼HANDLE 類型的返回值如此不一致
為什麼文本檔案是以Ctrl + Z 來結束的
為什麼行結束符是CR + LF
TEXT、__TEXT 與__T 和UNICODE 與__UNICODE
為什麼對話框在初始創建時是隱藏的
當程式在內部做修改時,沒有人會注意
如果FlushInstructionCache 沒有做任何事情,為什麼還要調用這個函式
如果InitCommonControls 沒有做任何事情,為什麼還要調用這個函式
為什麼InterlockedIncrement/InterlockedDecrement 這兩個函式只是返回結果的
符號
為什麼會存在WSASetLastError 函式
為什麼在Windows 中使用了基於廣播的機制
在系統列出現之前,視窗最小化之後被放到了什麼地方
為什麼在計算桌面視窗大小時會把系統列也包含在內
為什麼在按下Alt 鍵時,游標將停止閃爍
ES_OEMCONVERT 風格的作用是什麼
在檔案系統隧道背後隱藏的故事
為什麼NTFS 和資源管理器在對檔案名稱進行排序時是不一致的
日期/時間控制臺並不是日曆
Windows 如何重新設定DLL 的載入基址
SYSTEM_FONT 和DEFAULT_GUI_FONT 是什麼字型
為什麼上下控制項中的箭頭是相反的
Windows 95 發布會的門票
第 15 章 視窗訊息的傳送與接收
傳送訊息和投遞訊息
傳送訊息的生命期
投遞訊息的生命期
生成的投遞訊息
SendMessageCallback 將在什麼時候調用回調函式
當訊息逾時後,SendMessageTimeout 函式將執行什麼操作
澄清一些關於訊息處理的謬論
如何知道訊息的傳送者/投遞者
不能用PostMessage 來模擬鍵盤輸入
第 16 章 國際化編程
在Unicode 上做大小寫映射是很困難的
關於錯誤大小寫映射的趣事
為什麼不能旋轉文字
0409 和 1033是些什麼目錄
注意編碼頁
為什麼默認的 8比特編碼頁叫作“ANSI”
為什麼默認的控制台編碼頁叫作“OEM”
為什麼OEM 編碼頁經常被叫作ANSI
在Unicode 和ANSI 之間的轉換結果既是合理的但也是奇怪的
第 17章 安全
所有用戶都可以寫入的檔案
在資源管理器中隱藏檔案
竊取密碼
未驗證驅動程式的靜默安裝
調試代碼可能是一個安全漏洞
為什麼共享數據段是一個安全漏洞
IE 的增強安全配置並不信任內部網路
第 18章 Windows 2000 和Windows XP
為什麼在Windows XP“開始”選單的“所有程式”列表中沒有智慧型選單
為什麼沒有定義可以訪問“開始”選單中快速啟動列表的函式接口
為什麼Windows XP Service Pack 2 有時候會忘記CD 自動播放設定
不安全設備刪除對話框
關於Windows XP 中“Comments”按鈕的兩段回憶
為什麼資源管理器在刻錄完光碟之後會把光碟彈出來
為什麼Windows 安裝程式會生成新的啟動扇區
超自然力調試法:為什麼在四處理器的機器中有三個處理器沒有發揮作用
超自然力調試法:為什麼CPU 使用率總在 50%上下徘徊
DS_SHELLFONT 標誌的作用是什麼
為什麼DS_SHELLFONT = DS_FIXEDSYS | DS_SETFONT?
DS_SHELLFONT 在屬性頁上的效果是什麼
第 19章 Win 32中的設計問題
為什麼當無法解析某個導入函式時,Win 32就不會載入這個模組
為什麼要仔細檢查結構的大小
為什麼必須為了WM_DEVICECHANGE 返回一個奇怪的值?
程式和用戶之間的戰爭
為什麼不能截獲TerminateProcess 函式調用
為什麼有些進程在被終止之後還停留在任務管理器中?
理解WAIT_ABANDONED 所帶來的結果
為什麼不能把超連結放在通知圖示氣球提示中
為什麼在樹型控制項中不能重複使用同一個節點
奇怪的STRRET 結構
為什麼不能把UTF-8 設定為系統的ANSI 編碼頁
什麼時候應該使用下沉的客戶區
為什麼沒有包羅萬象的Windows 版本
為什麼可能發生禁止桌面視窗的情況
視窗和選單的嵌套限制分別是多少
HWND_TOP 和HWND_TOPMOST 之間的區別是什麼
第 20章 稅賦
遠程桌面連線與繪製
快速用戶切換和終端服務
多用戶
重定向資料夾
“我的文檔”與“應用程式數據”
大地址空間
電源管理和檢測電池的電量
間歇性的網路連線
反走樣字型和ClearType 技術
高DPI 顯示
多顯示器
工作區
在正確的位置上顯示彈出視窗
輔助功能
第 21章 一些可笑的故事
容易誤解的“空”操作
不要讓市場部門搞砸你的幻燈片
異想天開的Bug 報告
小心示例URL
任何代碼都不是孤立的
我在Viusal Basic 方面很專業
半透明的塑膠
我遭遇的第一次死亡威脅
你無法擺脫這些AOL CD
在接入電腦的電源之前發出嚴正警告
連環新接龍不再排名第一
關於Rat Poker 的一些事情
為產品小組取名時請三思
討論組的命名心理學
經理和程式設計師的區別
將軟碟作為信號量
當一個標誌中途改變了它代表的含義
把異想天開的尷尬作為一種溫和的指責方式
用物品來提醒
辦公室里的迪士科舞會
萬聖節主題的大廳
作者簡介
Remond Chen 是微軟公司Windows 部門的軟體工程師。他的網站“The Old New Thing”主要討論Windows 的發展歷史以及Win32 編程。他還為TechNet 雜誌撰寫Windows Confidential 專欄。
譯者簡介