第 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 的一些事情
為産品小組取名時請三思
討論組的命名心理學
經理和程序員的區彆
將軟盤作為信號量
當一個標誌中途改變瞭它代錶的含義
把異想天開的尷尬作為一種溫和的指責方式
用物品來提醒
辦公室裏的迪士科舞會
萬聖節主題的大廳
· · · · · · (
收起)