友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出MFC第2版(PDF格式)-第110部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
#0063 for (j = 1; j 《 (MAXROW…1); j++) {
#0064 m_OcxGrid。SetRow(j);
#0065 m_dArray'i''j' = atof(m_OcxGrid。GetText());
#0066 }
#0067 }
#0068 CDialog::OnOK();
#0069 }
#0070
#0071 void CGridDlg::OnUpdatevalue()
#0072 {
#0073 CString str;
#0074 double value;
#0075 // LONG lRow; lCol;
#0076 int Row; Col;
#0077
#0078 if (m_OcxGrid。GetCellSelected() == 0) {
#0079 AfxMessageBox(〃No cell selected〃);
#0080 return;
#0081 }
#0082
#0083 UpdateData(TRUE);
#0084 value = atof(m_cellValue);
#0085 str。Format(〃%8。2f〃; value);
#0086
#0087 // saves current cell selection
#0088 Col = m_OcxGrid。GetCol();
#0089 Row = m_OcxGrid。GetRow();
#0090
#0091 m_OcxGrid。SetText(str); // copies new value to
#0092 // the selected cell
#0093 puteSums();
#0094
#0095 // restores current cell selection
#0096 m_OcxGrid。SetCol(Col);
#0097 m_OcxGrid。SetRow(Row);
840
…………………………………………………………Page 903……………………………………………………………
16 ponents & ActiveX Controls
第 章 站眾的肩膀 使用
#0098 }
#0099
#0100 void CGridDlg::OnSelChangeGrid()
#0101 {
#0102 if (m_OcxGrid) {
#0103 m_cellValue = m_OcxGrid。GetText();
#0104 UpdateData(FALSE); // calls DoDataExchange to update edit
control
#0105 GotoDlgCtrl(GetDlgItem(IDC_VALUE)); // position edit control
#0106 }
#0107 }
#0108
#0109 void CGridDlg::puteSums()
#0110 {
#0111 int i; j; nRows; nCols;
#0112 double sum;
#0113 CString str;
#0114
#0115 // adds up each row and puts the sum in the right col
#0116 // col count could have been changed by add row/delete row
#0117 nCols = (int) m_OcxGrid。GetCols();
#0118 for (j = 1; j 《 (MAXROW…1); j++) {
#0119 m_OcxGrid。SetRow(j);
#0120 sum = 0。0;
#0121 for (i = 1; i 《 nCols 1; i++) {
#0122 m_OcxGrid。SetCol(i);
#0123 sum += atof(m_OcxGrid。GetText());
#0124 }
#0125 str。Format(〃%8。2f〃; sum);
#0126 m_OcxGrid。SetCol(nCols 1);
#0127 m_OcxGrid。SetText(str);
#0128 }
#0129
#0130 // adds up each column and puts the sum in the bottom row
#0131 // row count could have been changed by add row/delete row
#0132 nRows = (int) m_OcxGrid。GetRows();
#0133 for (i = 1; i 《 MAXCOL; i++) {
#0134 m_OcxGrid。SetCol(i);
#0135 sum = 0。0;
#0136 for (j = 1; j 《 nRows 1; j++) {
#0137 m_OcxGrid。SetRow(j);
#0138 sum += atof(m_OcxGrid。GetText());
#0139 }
#0140 str。Format(〃%8。2f〃; sum);
#0141 m_OcxGrid。SetRow(nRows 1);
#0142 m_OcxGrid。SetText(str);
841
…………………………………………………………Page 904……………………………………………………………
第篇 深入 MFC 程式設計
#0143 }
#0144 }
下图是 OcxTest 的执行画面。
842
…………………………………………………………Page 905……………………………………………………………
5
附錄
深入湷觥FC
2nd Edition
843
…………………………………………………………Page 906……………………………………………………………
第五篇 附錄
844
…………………………………………………………Page 907……………………………………………………………
附錄A 無責任書評
附錄A 無責任書評
從搖籃到墳墓
Windows 的完全學習
侯捷 整理
/ 1996。08。12
侯俊傑先生邀請我為他嘔心瀝血的新作 深入湷錾钊霚出 MFC 寫點枺鳌N椅磳懳恼戮靡樱
深入湷錾钊霚出
但是你知道,要拒絕個和你住在同個大腦同個埽鼩さ娜杖找挂沟┑┫οΦ恼垺
求,是很困難的 …。不,簡直是不可能。於是,我只好重作馮婦!
事實也不全然是因為躲不過日日夜夜的轟炸,部份原因是,當初我還在雜誌主持
無責任書評時,就有讀者來信希望書評偶而變換口味,其個建議就是談談如何養成
Windows 程式設計的全面性技術。說到全面性,那又是個impossible mission !真的,
Windows 程式技術的領域實在是太廣了,我們從來不會說撸蜍涹w設計、多媒體程式設
計、通訊軟體設計 是屬於 程式技術的範疇,但,它們通常都被理所當然歸類
。。。 DOS
屬於Windows 程式設計領域。為什麼?因為幾乎所有的睿慷及莸乖凇indows 作業系
統的大傘之,幾乎每種技術都被涵蓋在千百計(並且以驚速度繼續增加)的
Windows API 之。
我的才智實不足以涵蓋這麼大面積的學問,更遑論從精挑細選經典之作介紹給你。那
麼,本文睿看筘葚莸摹竿耆珜W習」又怎麼說?呃,我指的是Windows 作業系統的核心
觀念以及程式設計的本伲鼘W能這路,至於撸颉⒍嗝襟w、通訊、Web Server 、資料庫、
統統被我歸類為「應用」領域。而 、 、 雖也都可以開發
Visual Basic Delphi Java Windows
程式,卻又被我屏棄在 C/C++ 的主流之外。
845
…………………………………………………………Page 908……………………………………………………………
第五篇 附錄
以謹就我的視野,分門別類把我心目認為必備的相關好書介紹出來。你很容易就
可以從我所列出的書名看出我的湵。涸谧鳂I系統方面,我只涉獵 Windows 3。1 和
( 是我的波焦點),在 方面,
Windows 95 Windows NT 4。0 Application Framework
我只涉獵 ( 和 是我的個獵物)。
MFC OWL Java
Windows 作業系統
Windows Internals / Matt Pietrek / Addison Wesley
最能夠反應作業系統奧秘的,就是作業系統內部資料結構以及API 的內部動作了。本書
藉著對這兩部份所做的逆向工程,剖析 Windows 的核心。
個設計良好的應用程式介面( )應該是個不必讓程式員擔心的黑盒子。本書的主
API
要立意並不在為了對 API 咦髟淼挠懻摱@得更多程式寫作方面的利益(雖然那其實
是個必然的額外收穫),而是藉由 虛擬碼,揭露出 作業系統的咦髟怼!
API Windows
時光漸漸過去,程式員漸漸成長,我們開始對 How 感到不足而想知道 Why 了,這就
是本書要給我們的枺鳌!
本書不談 Windows 官方手冊已有的資訊,它談「新資訊」。如何才能獲得手冊洠А
有記載的資訊?呵,原始碼說明切。看原始碼當然是不錯,問睿恰 indows 的原始
碼刻正鎖在美國 (微軟公司總部所在)的保險庫裡,搞不好就在比爾
WA; Redmond 。
蓋茲的桌。我們唯能夠取得的 Windows 原始碼大概只是 SDK 磁片的 defwnd。c
和 (這是DefWindowProc 和 DefDlgProc 的原始碼),以及 磁片的
defdlg。c DDK
大堆驅動程式原始碼。那麼作者如何獲得比你我更多的秘密呢?
Matt Pietrek 是軟體反組譯逆向工程的個翹楚。本書藉由個他自己開發的反組譯工
具,把獲得的結果再以 C 虛擬碼表現出來。我們在書看到許許多多的 Windows API
虛擬碼都是這麼來的。 還有個很有名的產品叫做 ,和
Pietrek BoundsChecker SOFT
(功能強大的 ,以企鵝為形象)搭配銷售。
ICE/W Windows Debugger
本書主要探討 Windows 3。1 386 加強模式,必要時也會提及標準模式以及 Windows
846
…………………………………………………………Page 909……………………………………………………………
附錄A 無責任書評
。書並洠в泻w虛擬驅動程式、虛擬機器、網路 、多媒體、 、
3。0 API DDE/OLE dialog/control
等主睿羌凇 indows 啟動程序、記憶體管理系統、視窗管理系統、訊息管理
系統、排程管理系統、繪圖系統身。本書對讀者有大要求 :
對 的保護模式定址方式、 、 已有基本認識。
Intel CPU segmentation selector
擁有 Windows SDK 手冊。
對作業系統有基礎觀念,例如什麼是多工,什麼是虛擬記憶體 等等。
。。。
作者常借用物件導向的觀念解釋 ,如果你懂 語言,知道類別與物件,知
Windows C++
道成員函式和成員變數的意義與其精神,對他的比喻當能心領神會。
對系統感興趣的,本書定讓你如魚得水。你唯可能的抱怨就是:大堆 API 函式
的虛擬碼令心煩氣燥。文字瀚海圖片沙漠的情形也再考驗讀者的定力與耐力。然而
小瑕不掩大瑜。我向來認為釀了瓶好酒的不必聲嘶力竭廣告它,這本書就是瓶
好酒。作者 自 起已登 Microsoft Systems Journal 的
Pietrek 1993/10 Windows Q&A
主持寶座,洠砂阉⒆拥倪@位子可是如坐針氈。現在他又主持同本刊物的另
個專欄: 。Dr。 Dobb's Journal 的Undocumented Corner 專欄也時有Pietrek
Under The Hood
的蹤影。
Undocumented Windows / Andrew Schulman; David Maxey;
Matt Pietrek / Addison Wesley
朋友們在書店裡選書的方式如何?看不看序?看不看前言?別抓起書像數鈔票般頁頁
流樱В䶮o目的的跳躍。從序可以看出作者的創作心路歷程,作者的抱負理想,還可
以看出作者的文筆斤兩。書序,好看得很呢。
大抵你可以從外文書的 Preface 或 Acknowledge 或 Introduction 或 Foreword 看到些類
似「序」這樣的輕鬆小品。本書 Windows Internals 的作者在其 Introduction 部份,
提到他的感謝,其對於該書編輯有這麼段感性談話 :
847
…………………………………………………………Page 910……………………………………………………………
第五篇 附錄
首先我要謝謝的,當然是我的編輯。洠в兴@本書幾乎不可能完成。當我們開始為這本
書築夢時,它看起來是那麼可怖,令畏縮。只因為我知道他可以助我臂之力我才有勇
氣進行去。幾乎我所寫的每筆資料他都有令驚訝的豐富知識,而且他也注意不讓太
多細節扼殺了想像空間。每次當我認為我已經鉅細靡遺涵蓋了整章細部討論,他會以
數百個毫不誇張的意見把我推回原點,促使我完成更詳細的討論。我不能夠想像是否還有
更好的編輯如他了。
備受 Matt Pietrek 推崇的這位編輯,正是稱 ! §Mr。 Undocumented! ¨ 的知名作家 Andrew
,也正是我現在要介紹的Undocumented Windows 書作者。
Schulman
任何看到這本書,再看到作者名字,恐怕都有這樣的疑惑:此書和 Windows Internals 有
何區別又有何關係? 提出了本書的目標設定:Windows Internals 探討的是
Schulman
的內部工作情況,這些 都是公開的,正式的;Undocumented Windows
Windows APIs APIs
探討的則是洠в谐霈F在 Windows 正式文件的資料。
想學點絕招現買現賣立刻用到自己軟體的可能會失望。搞清楚,本書名叫
Undocumented Windows 而不是 Undocumented WindowsAPI 。雖然它對 個以的未
250
公開函式都有描述,然而有半以的篇幅是在介紹如何以各種工具窺視 Windows 系
統,幫助我們了解什麼是 、什麼是 、什麼是 ,這者是 模
Module Task Instance KERNEL
組最重要的成份。當然它也對 GDI 模組和 USER 模組開膛剖腹番。書裡附了許多
軟體工具對 Windows 的偵測報告。這些程式有的是 Phar Lap 公司的正式出品,有的是
Schulman 的私貨。Phar Lap 公司做這類工具軟體真是輕而易舉,別忘記了他們是 DOS
Extender 的著名廠商。
本書第章漫談許多主睿讼喈數钠懻摗 indows 未公開祕密所引發的美國聯
邦交易委員會(U。S。 FTC )的關切。第章至第章分別介紹些工具。第五章到第八
章是本書第個重點,介紹 (其實就是 、 、 大模組)的
Windows KERNEL GDI USER
各個未公開結構、訊息、函式。很多資料不曾在 SDK 公佈,卻出現在DDK ,想深入
了解 Windows 的不妨有空注意 DDK 的文件。這章佔據412 頁。
848
…………………………………………………………Page 911……………………………………………………………
附錄A 無責任書評
第十章介紹的 ToolHelp 是本書第個重點。ToolHelp 是 Windows 3。1 新添的個動態
聯結函式庫,可以滿足程式對 Windows 內部資料的查詢。本章對 ToolHelp 的每個
API 用法、參數、結構、訊息都描述十分詳細。這些 API 允許我們取得 Global Heap 、
、 、 、以及
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!