注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當前位置: 首頁出版圖書科學技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計網(wǎng)絡(luò)編程Windows編程啟示錄

Windows編程啟示錄

Windows編程啟示錄

定 價:¥49.00

作 者: (美)Raymond Chen;聶雪軍 譯
出版社: 機械工業(yè)出版社
叢編項:
標 簽: Windows編程

ISBN: 9787111219194 出版時間: 2007-08-01 包裝: 平裝
開本: 16 頁數(shù): 335 字數(shù):  

內(nèi)容簡介

  為什么Windows的工作方式是這樣的? 為什么“關(guān)機”選項要放在開始菜單中(還有,為什么會設(shè)計一個“開始”按鈕)? 我怎么才能進入到對話框的消息循環(huán)中? 為什么GetWindowText函數(shù)會有著奇怪的行為? 為什么注冊表文件會被稱作“蜂窩”? 如果我們追溯Windows的歷史,就會發(fā)現(xiàn)在Windows中許多奇怪的事情都有著合乎邏輯的解釋。在理解了這些事情之后,您不僅能夠獲得開發(fā)能力的大幅提升,同時也能夠避免遭受更多的挫折。Raymond Chen在Micorsoft的Windows開發(fā)團隊中工作了十余年,他將為您揭開那些有必要知道的“Windows內(nèi)幕” Chen風趣的寫作風格、深入的洞察力以及引人深思的幽默,使他成為了世界上最優(yōu)秀的技術(shù)博客作者之一(博客地址:http://blogs.msdn.com/oldnewthing/)。在本書中,他不僅給我們帶來了許多幕后的故事,寶貴的技術(shù)建議,還帶來了許多啟發(fā)性的軼事;這些都將幫助您最大程度地理解Windows。● 如何設(shè)計像自動售貨機那樣有效的用戶界面。 ● 深入理解窗口和對話框的管理機制。 ● 為什么性能優(yōu)化與我們在直覺上的理解很不一樣? ● COM對象和Visual C++編譯器的薄弱之處。 ● 向后兼容的關(guān)鍵技術(shù)細節(jié)——Windows的做法以及這樣做的原因。 ● 大多數(shù)開發(fā)人員所不知道的Windows程序安全漏洞。 ● 如何使您的程序更好地在Windows系統(tǒng)中運行,做一個Windows系統(tǒng)的“良 好市民”。如果我們追溯Windows的歷史,就會發(fā)現(xiàn)Windows其中隱藏了許多奇怪的但都合乎邏輯的解釋。Raymond Chen在微軟工作了許多年,他見過許多關(guān)于Windows的趣事,而其他人可能只是略知一二。在這本書中,Raymond Chen將與您一起分享他的知識、經(jīng)歷以及Windows的一些奇聞軼事,本書將幫助我們更好地理解這個每天影響著成千上萬人的操作系統(tǒng)。每個人都能夠從本書中得到他們想要的東西。不僅如此,這本書讀起來也很輕松,從回憶Windows中“開始”按鈕的設(shè)計過程,到討論只有極客(Geek,指對技術(shù)極為癡迷的人)才會喜歡的GlobalAlloc,幾乎涵蓋了Windows系統(tǒng)從高層到底層的方方面面,可以說這是一本引人入勝的奇聞軼事集,它將幫助您真正地體會在設(shè)計和編寫高質(zhì)量軟件時所存在的困難以及蘊含于其中的樂趣。 本書通過一系列短文來講解Windows基本原理,例如:窗口和對話框的管理機制,如何設(shè)計像自動售貨機那樣有效的用戶界面,對性能優(yōu)化的理解,向后兼容的關(guān)鍵技術(shù)細節(jié),Windows程序的安全漏洞,如何使程序更好地在Windows系統(tǒng)中運行等。本書不僅講解Windows幕后的許多故事、寶貴的技術(shù)建議,還包括了許多啟發(fā)性的軼事,這些都將幫助讀者最大程度地理解Windows。.本書適合于軟件開發(fā)人員,或?qū)indows的發(fā)展歷史有興趣的讀者。

作者簡介

  Raymond Chen是微軟公司W(wǎng)indows部門的一位軟件工程師。他的博客“The Old New Thng”主要討論Windows發(fā)展歷史以及Win32編程。他還為TechNet雜志撰寫Wineows Confidential專欄。譯者簡介聶雪軍,2002年起從事軟件開發(fā)工作,主要開發(fā)語言為C++,具有較豐富的Windows和Linux開發(fā)經(jīng)驗。譯作有《C++編程風格》、《Exceptional C++中文版》等。

圖書目錄

譯者序
前言
第1章 用戶界面設(shè)計初探
為什么要單擊“開始(Start)”按鈕來關(guān)機?
為什么Windows沒有“專家模式”?
對話框的默認按鈕是“取消”
最好的設(shè)置是:即使你沒有意識到這些設(shè)置的存在,但它們依然按照你所期望的方式在工作。
為了顯示我們超群的智慧,現(xiàn)在就來問一個你回答不了的問題
為什么安裝程序不會問你是否希望保留操作系統(tǒng)文件的新版本?
功能設(shè)計的思考
什么時候應該禁止選項,而什么時候又該刪除選項?
什么時候應該將“…”放在按鈕或者菜單項的后面?
自動售貨機的用戶界面設(shè)計
室內(nèi)門鎖的用戶界面設(shè)計
Windows界面中“睫毛膏”的演變

第2章 Windows 95 的精選回憶錄
為什么在世界地圖中,當前時區(qū)沒有被加亮顯示?
為什么當內(nèi)存超過1G時,Windows 95無法啟動?
為什么在Windows 95中有些函數(shù)叫作BEAR,BUNNY和PIGLET?
BOZOSLIVEHERE和TABTHETEXTTOUTFORWINMPS表示什么含義?
在Windows 95特別版的包裝盒中都有些什么東西?
Windows引出了每個人的羅爾沙赫氏測試
登錄時的武術(shù)圖片
為什么一個非常大的詞典反而是不好的?
了解Windows 95的啟動聲音
如果你不在意正確性的話,那么編寫一個專欄是非常容易的
為什么在系統(tǒng)屬性頁中對內(nèi)存大小進行了取整?
為什么硬盤的指示燈每隔幾秒鐘閃一下?
尋求更快的系統(tǒng)陷阱
一個字節(jié)曾經(jīng)價值一美元
每個產(chǎn)品支持電話的費用相當于賣出一個Windows拷貝
為什么在Windows的光盤中沒有包含Tweak UI?
不能通過xcopy來安裝Windows
買下一個Egghead軟件商店
Windows PowerToy的歷史故事
Windows是如何選擇最終構(gòu)建編號?
為什么在安裝系統(tǒng)補丁包時,系統(tǒng)的構(gòu)建編號不會增加?

第3章 GetWindowText的秘密
窗口是如何管理文本的?
深入GetWindowText函數(shù)
如果我不喜歡這些規(guī)則,那該怎么辦?
能否給出一個說明這種差異的示例程序?
為什么GetWindowText的規(guī)則如此奇怪?

第4章 任務(wù)欄與通知區(qū)域
為什么有些人把任務(wù)欄叫作“托盤”?
為什么任務(wù)欄默認是在屏幕的底部?
為什么在任務(wù)欄中的時鐘并不顯示秒?
為什么在任務(wù)欄中不顯示模擬時鐘?
當任務(wù)欄豎直??繒r,為什么“開始”按鈕上的文本消失了?
為什么當用戶點擊“X”按鈕,通知圖標不會得到一個消息?

第5章 令人困惑的界面問題
那些小小的覆蓋圖標是什么?
為什么當我登錄的時候,有些我不希望看到的文件/文件夾會自動打開?
對文件來說,文件名字體的顏色代表什么含義?
為什么在高級選項對話框中,在每個選項后面都會加上“開”或者“關(guān)”?
是什么決定了Alt+Tab中圖標的順序?
為什么文件夾的只讀屬性非常奇怪?
當我點擊空白的任務(wù)欄按鈕時,這些按鈕消失了,發(fā)生了什么事?
“最小化所有窗口”和“顯示桌面”之間的區(qū)別是什么?
在菜單中的粗體文本表示什么含義?
自定義的網(wǎng)頁圖標是從何而來的?
任務(wù)管理器的標簽和按鈕到哪里去了?
拖動一個文件是表示移動還是復制?
為什么“鏈接”文件夾總是會不斷地自我創(chuàng)建?
為什么當你同時選擇多個文檔進行打印時,文檔的打印順序是亂的?
我在產(chǎn)品支持部門的一天
吹掉連接器上的灰塵
1G字節(jié)到底有多少?
為什么不能刪除“僅用于測試/評估”的標記?

第6章 GLOBALALLOC函數(shù)的歷史
從前的故事
選擇符
過渡到Win32
實現(xiàn)一瞥

第7章 Windows編程中的一些話題
“臨時”程序
獲得在標題圖標中的自定義右鍵菜單
CreateMenu與CreatePopupMenu有什么區(qū)別?
為什么窗口管理器會自動銷毀菜單?
僅當窗口在屏幕上可見時才進行繪制。
判斷窗口是否被覆蓋了?
用位圖刷來實現(xiàn)平鋪效果
DC畫刷的好處是什么?
用ExtTextOut函數(shù)來繪制實心矩形
用StretchBlt函數(shù)來繪制實心矩形
在顯示字符串時去掉那些難看的方框
沒有所有者的信號量
自動復位的事件只是一個愚蠢的信號量

第8章 窗口管理
為什么會收到偽WM_MOUSEMOVE消息?
為什么沒有WM_MOUSEENTER消息?
白屏
空心畫刷的作用是什么?
桌面窗口的有什么特殊的地方?
禁止窗口和激活窗口的正確順序。
在恢復窗口位置時的問題。
界面模態(tài)與代碼模態(tài)
WM_QUIT消息與模態(tài)
為模態(tài)界面設(shè)置正確的所有者窗口
與進入到模態(tài)的程序進行交互
定時消息框的簡單版本
臨時窗口
在GWLP_USERDATA中的附加窗口數(shù)據(jù)
定時消息框的改進版本
定時右鍵菜單
為什么窗口在被銷毀之后還會收到消息?

第9章 關(guān)于硬件的回憶錄
硬件的向后兼容性
光驅(qū)
微軟公司的網(wǎng)絡(luò):比“地獄”差1.7倍
有時候制造商會侮辱他們自己?
欺騙WHQL的驅(qū)動程序認證過程
20英尺長的計算機
USB手推車
檢測到了新設(shè)備:波音 747
超頻帶來的問題

第10章 對話框管理器的內(nèi)部工作機制
關(guān)于對話框過程
對話框過程的返回值
一種不同類型的對話框過程。
另一種不同類型的對話框過程
對話框模板的發(fā)展
經(jīng)典的16位模板
經(jīng)典的32位模板
16位擴展模板
32位擴展模板
小結(jié)
為什么需要對話框模板?
對話框是如何創(chuàng)建的
對話框創(chuàng)建的準備工作
創(chuàng)建框架窗口
創(chuàng)建控件
模態(tài)對話框的消息循環(huán)
基本的對話框消息循環(huán)
為什么要按照這種方式來構(gòu)造對話框消息循環(huán)?
將非模態(tài)對話框轉(zhuǎn)換為模態(tài)對話框
消息循環(huán)中的微妙問題
消息循環(huán)中其他的微妙問題
對話框中的自定義導航
對話框中的自定義快捷鍵
嵌套對話框以及DS_CONTROL
“啟動器”工具
根據(jù)內(nèi)部對話框來調(diào)整大小
為什么需要對話框循環(huán)?
為什么對話框編輯器從100開始設(shè)置控件的ID?
在DefDlgProc函數(shù)中做了哪些操作工作?
如何在對話框中設(shè)置焦點
為什么SetFocus函數(shù)不會管理默認的ID?
不要將焦點設(shè)置在被禁止的控件上
在IsDialogMessage中做了什么工作?
用Tab鍵來在非對話框中導航
對話框的“默認ID”是什么?
如何使用WM_GETDLGCODE消息
在IsDialogMessage中做了什么工作?
為什么有些消息框中的X按鈕是被禁止?

第11章 常見的軟件問題
為什么夏令時與我們的直覺不同?
為什么當文件被復制到軟盤時,文件的時間戳將發(fā)生改變?
不要相信返回地址
編寫排序比較函數(shù)
你可以從另一邊來理解契約
實用主義和純粹主義之間的爭論
優(yōu)化通常是違背直覺的
在服務(wù)器上,分頁=死機
不要保存任何能夠重新計算的結(jié)果
增加其他組件的開銷來提升性能
輪循的性能問題
檢測內(nèi)存泄漏的簡單方法
不好的緩沖策略將導致內(nèi)存泄漏

第12章 深入研究Visual C++編譯器
析構(gòu)函數(shù)在什么時候調(diào)用?
COM對象的布局
調(diào)節(jié)轉(zhuǎn)換器
指向成員函數(shù)的指針是非常奇怪的
什么是__purecall?

第13章 向后兼容性
有些應用程序的本意就是程序崩潰
當程序使用那些未正式公布的結(jié)構(gòu)時
為什么不禁止那些使用了未正式公布行為的程序?
為什么16位DOS和16位Windows仍然存在
對于像NUL和CON這樣的保留文件名該如何處理?
為什么(有時候)在UNC路徑前面是一個驅(qū)動器盤符?
不要輕視“獵鹿者”這個游戲的威力
有時候,游戲中的錯誤只有在玩了一段時間后才會顯現(xiàn)出來
Shell Folders鍵的故事
保持錯誤碼的向后兼容性是很重要的
沒錯,我們實現(xiàn)了這個功能
有些程序在為操作系統(tǒng)打補丁時將陷入困境
即使在內(nèi)部數(shù)據(jù)結(jié)果中也存在著兼容性問題
為什么Windows讓BIOS時間保持為本地時間。
版本號的檢測
破壞IUnknown::QueryInterface的幾種方式
當程序假設(shè)系統(tǒng)永遠不會發(fā)生改變——之一
當程序假設(shè)系統(tǒng)永遠不會發(fā)生改變——之二
偽顯示控制面板
偽可視化風格

第14章 一些名字的來源和歷史
在WPARAM和LPARAM中,字母W和L分布表示什么意思?
為什么在Windows98中,顯示器的最大數(shù)量是9?
為什么注冊表文件被叫作蜂房?
16位Windows中對資源的內(nèi)存管理
HINSTANCE和HMODULE之間的區(qū)別是什么?
在WinMain函數(shù)中,hPrevInstance參數(shù)的作用是什么?
為什么GlobalWire函數(shù)被叫作這個名字?
LocalAlloc和GlobalAlloc之間的區(qū)別是什么?
GMEM_SHARE標志的作用是什么?
為什么在轉(zhuǎn)換到LPARAM之前會進行一個多余的轉(zhuǎn)換?
為什么有些注冊表函數(shù)的名字以Ex結(jié)尾?
SHGetMalloc,SHAlloc和CoGetMalloc之間的區(qū)別是什么?
為什么Windows錯誤報告程序的昵稱是Dr.Warson?
DirectX 4出了什么問題?
為什么HANDLE類型的返回值是很不一致的?
為什么文本文件是以Ctrl+Z來結(jié)束的?
為什么行結(jié)束符是CR+LF?
TEXT,__TEXT與__T和UNICODE與__UNICODE
為什么對話框在初始創(chuàng)建的時候是隱藏的?
當程序在內(nèi)部進行修改時,沒有人會注意
如果FlushInstructionCache沒有做任何事情,那么為什么還要調(diào)用這個函數(shù)?
如果InitCommonControls沒有做任何事情,那么為什么還要調(diào)用這個函數(shù)?
為什么InterlockedIncrement/InterlockedDecrement這兩個函數(shù)只是返回結(jié)果的符號?
為什么會有一個WSASetLastError函數(shù)?
為什么在Windows中使用了基于廣播的機制?
在任務(wù)欄出現(xiàn)之前,窗口最小化之后被放到了什么地方?
為什么在計算桌面窗口大小時會把任務(wù)欄也包含在內(nèi)?
為什么在按下Alt鍵時,光標將停止閃爍?
ES_OEMCONVERT風格的作用是什么?
隱藏在文件系統(tǒng)隧道后面的故事
為什么NTFS和資源管理器在對文件名進行排序時是不一致的?
日期/時間控制面板并不是日歷
Windows95如何來重新設(shè)定DLL的加載基址?
SYSTEM_FONT和DEFAULT_GUI_FONT是什么字體?
為什么上下控件中的箭頭是相反的?
Windows 95發(fā)布會的門票

第15章 窗口消息的發(fā)送與接收
發(fā)送消息和投遞消息
發(fā)送消息的生命期
投遞消息的生命期
生成的投遞消息
SendMessageCallback將在什么時候調(diào)用回調(diào)函數(shù)?
當消息超時后,SendMessageTimeout函數(shù)將會執(zhí)行什么操作?
澄清一些關(guān)于消息處理的謬論
如何知道消息的發(fā)送者/投遞者?
不能用PostMessage來模擬鍵盤輸入

第16章 國際化編程
在Unicode上進行大小寫映射是很困難的
關(guān)于錯誤大小寫映射的趣事
為什么不能旋轉(zhuǎn)文字?
0409和1033是些什么目錄?
注意編碼頁
為什么默認的8比特編碼頁被叫作“ANSI”?
為什么默認的控制臺編碼頁被叫作“OEM”?
為什么OEM編碼頁經(jīng)常被叫作ANSI?
在Unicode和ANSI之間的轉(zhuǎn)換結(jié)果是合理的但也是奇怪的

第17章 安全
所有用戶都可以寫入的文件
在資源管理器中隱藏文件
竊取密碼
未驗證驅(qū)動程序的靜默安裝
調(diào)試代碼可能是一個安全漏洞
為什么共享數(shù)據(jù)段是一個安全漏洞
IE的增強安全配置并不信任內(nèi)部網(wǎng)絡(luò)

第18章 Windows 2000和Windows XP
為什么在XP開始菜單的“所有程序”列表中沒有智能菜單?
為什么沒有可以訪問開始菜單中快速啟動列表的函數(shù)接口?
為什么Windows XP Service Pack 2有時候會忘記CD自動播放設(shè)置?
不安全設(shè)備刪除對話框
關(guān)于Windows XP 中建議?按鈕的兩段回憶
為什么資源管理在刻錄完光盤之后會把光盤彈出來?
為什么Windows安裝程序會生成新的啟動扇區(qū)?
超自然力調(diào)試法:為什么在四處理器的機器中有三個處理器沒有發(fā)揮作用
超自然力調(diào)試法:為什么CPU使用率總在50%上下徘徊
DS_SHELLFONT標志的作用是什么?
為什么DS_SHELLFONT = DS_FIXEDSYS | DS_SETFONT?
DS_SHELLFONT在屬性頁上的效果是什么?

第19章 Win32中的設(shè)計問題
為什么在無法解析某個導入函數(shù)時,Win32不能加載這個模塊?
為什么要仔細檢查結(jié)構(gòu)的大?。?
為什么必須為了WM_DEVICECHANGE返回這個奇怪的值?
程序和用戶之間的戰(zhàn)爭
為什么不能截獲TerminateProces函數(shù)調(diào)用?
為什么有些進程在被終止之后還停留在任務(wù)管理器中?
理解WAIT_ABANDONED所帶來的結(jié)果
為什么不能將超鏈接放在通知圖標氣球提示中?
為什么在樹型控件中不能多次使用同一個節(jié)點?
奇怪的STRRET結(jié)構(gòu)
為什么不能將UTF-8設(shè)置為系統(tǒng)的ANSI編碼頁?
什么時候應該使用下沉的客戶區(qū)?
為什么沒有包羅萬象的Windows版本?
為什么禁止桌面窗口也是可能的?
窗口和菜單的嵌套限制分別是多少?
HWND_TOP和HWND_TOPMOST之間的區(qū)別是什么?

第20章 “稅收”
層次存儲管理
地緣政治學
遠處桌面連接與繪制
快速用戶切換和終端服務(wù)
多用戶
漫游用戶配置文件
重定向文件夾
“我的文檔”與“應用程序數(shù)據(jù)”
大地址空間
電源管理和檢測電池的電量
間歇性的網(wǎng)絡(luò)連接
反走樣字體和ClearType技術(shù)
高DPI顯示
多顯示器
工作區(qū)
在正確的位置上顯示彈出窗口
輔助功能

第21章 一些可笑的故事
非常容易誤解的“空”操作
不要讓市場部門搞亂你的幻燈片
異想天開的錯誤報告
小心這些示例URL
任何代碼都不是孤立的
我在Viusal Basic方面很專業(yè)
半透明的塑料
我遭遇的第一次死亡威脅
你無法擺開這些AOL CD
在接入電腦的電源之前給出嚴正的警告
蜘蛛紙牌不再排名第一
關(guān)于Red Poker的一些事情
注意產(chǎn)品小組的名字
分發(fā)列表的命名心理學
經(jīng)理和程序員之間的區(qū)別
用軟驅(qū)作為信號量
當一個標志中途改變了所代表的含義
把異想天開的尷尬作為一種溫和的指責方式
用物理對象來作為提醒
辦公室里的迪士高舞會
萬圣節(jié)主題的大廳

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號