人力資源google chrome 源代碼 分析_第1頁
人力資源google chrome 源代碼 分析_第2頁
人力資源google chrome 源代碼 分析_第3頁
人力資源google chrome 源代碼 分析_第4頁
人力資源google chrome 源代碼 分析_第5頁
已閱讀5頁,還剩131頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、*(本文從從網(wǎng)上整整理得到到,源地地址 HYPERLINK /caimouse/archive/2008/09/07/2893806.aspx htttp:/t/caaimoousee/arrchiive/20008/009/007/2289338066.asspx)谷歌瀏覽覽器的源源碼分析析(1) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit

2、=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏隨著網(wǎng)絡(luò)絡(luò)技術(shù)的的發(fā)展,越越來越多多應(yīng)用都都已經(jīng)離離不開網(wǎng)網(wǎng)絡(luò),特特別像人人類大腦腦一樣的的知識庫庫的搜索索引擎,更更加是離離不開功功能強大大的云計計算。不不過,即即便云計計算非常常強

3、大,但但它還不不能直接接地把結(jié)結(jié)果呈現(xiàn)現(xiàn)給用戶戶,這樣樣就需要要一個客客戶端來來呈現(xiàn)出出來,這這個客戶戶端就是是瀏覽器器?,F(xiàn)在在越來越越多人上上網(wǎng),他他們每一一次上網(wǎng)網(wǎng),都離離不開瀏瀏覽的使使用,這這已經(jīng)是是一個不不可缺少少的軟件件了。這這里介紹紹和分析析谷歌推推出有創(chuàng)創(chuàng)新的瀏瀏覽器,它它的速度度比其它它瀏覽器器快很多多,那么么它是怎怎么實現(xiàn)現(xiàn)的呢?又采用用了什么么樣的技技術(shù)能達達到這樣樣呢?又又比如它它的標簽簽頁是每每一個進進程進行行顯示的的,這到到底又是是怎么樣樣實現(xiàn)的的呢?下下面來通通過分析析它的源源碼,一一一地解解開這種種高新技技術(shù)的使使用,以以及這種種高效算算法的奧奧秘。谷歌瀏覽覽器

4、的英英語名稱稱為Chhromme,它它的意義義是鉻。鉻是一一種有光光澤的、藍灰色色的堅硬硬金屬元元素。不不失光澤澤,抗腐腐蝕,最最早在鉻鉻鐵礦中中發(fā)現(xiàn)。用作催催化劑,可可加強鋼鋼合金的的強度和和生產(chǎn)不不銹鋼,可可以做防防腐鍍層層和玻璃璃制品中中的顏料料。原子子序數(shù)224;原原子量551.9996;比重77.188;化合合價2,33,6。谷歌起起這個名名稱,可可能是想想讓這個個瀏覽器器永遠不不失去光光澤,永永遠那么么吸引人人。鉻是是無毒,化化學性質(zhì)質(zhì)很穩(wěn)定定,有延延展性,含含雜質(zhì)時時硬而脆脆。熔點點18557C,沸沸點26672CC,密度度單晶為為7.222克/厘米33,多晶晶為7.14克克/厘

5、米米3;鉻鉻,原子子序數(shù)224,原原子量551.999611。鉻的的名稱來來自希臘臘文Chhromma,意意為顏色色。因為為這種元元素以多多種不同同顏色的的化合物物存在,故故被稱為為“多彩彩的元素素”??煽捎糜谥浦撇讳P鋼鋼,汽車車零件,工工具,磁磁帶和錄錄像帶等等。鉻鍍鍍在金屬屬上可以以防銹,也也叫可多多米,堅堅固美觀觀。紅、綠寶石石的色彩彩也來自自于鉻。作為現(xiàn)現(xiàn)代科技技中最重重要的金金屬,以以不同百百分比熔熔合的鉻鉻鎳鋼千千變?nèi)f化化,種類類繁多,令令人難以以置信。谷歌的開開發(fā)人員員稱,雖雖然網(wǎng)絡(luò)絡(luò)的發(fā)展展日新月月異,但但作為網(wǎng)網(wǎng)絡(luò)平臺臺的瀏覽覽器,卻卻沒有跟跟上網(wǎng)絡(luò)絡(luò)發(fā)展的的步伐。谷歌傾傾心

6、打造造的免費費瀏覽器器就是希希望能跟跟隨著網(wǎng)網(wǎng)絡(luò)的發(fā)發(fā)展而不不斷升級級換代,完完美的切切合網(wǎng)絡(luò)絡(luò)時代的的潮流。據(jù)了解,谷谷歌員工工每天使使用的最最多的應(yīng)應(yīng)用程序序就是瀏瀏覽器,通通過瀏覽覽器,查查看新聞聞資訊,觀觀看視頻頻聊天,玩玩網(wǎng)絡(luò)游游戲。谷谷歌的員員工說,如如果能夠夠開發(fā)出出一種全全新的瀏瀏覽器,才才能夠滿滿足人們們使用應(yīng)應(yīng)用程序序和網(wǎng)站站管理員員的要求求。谷歌歌希望能能夠提供供一種速速度更快快,穩(wěn)定定性更高高,安全全性更強強的瀏覽覽器。因因此Goooglle CChroome誕誕生了!為了學習習這個瀏瀏覽器,需需要通過過網(wǎng)絡(luò)把把這份達達到1GG以上的的代碼下下載下來來,需要要的時間間就

7、需要要好幾個個小時,然然后再把把硬盤空空間清空空為100G左右右大小,最最后配置置好VCC 20005,就就可以編編譯這個個“可多多米”了了。在我我的電腦腦上編譯譯,共需需要兩個個小時左左右,才才完全編編譯完成成,最后后生成下下面的可可多米,如如下圖:缺省編譯譯出來的的可多米米是英語語版本的的,從關(guān)關(guān)于對話話框里就就可以看看到。下下面是編編譯出來來的目錄錄圖片,如如下:上面是調(diào)調(diào)試版本本的輸出出文件,所所以程序序大小都都比較大大,沒有有經(jīng)過優(yōu)優(yōu)化的處處理。整整個程序序的大小小,需要要編譯1137個個工程,共共1G多多的源碼碼大小,這這是一個個非常旁旁大的一一個工程程。谷歌瀏瀏覽器的的源碼分分析

8、(22) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,s

9、tatus=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏這么大的的工程,我我從哪里里開始呢呢?我認認為從界界面開始始,這樣樣才可以以快速地地深入研研究。下下面就可可以先嘗嘗試修改改一個cchroome的的關(guān)于對對話框,上上一次看看到它是是英語的的,那么么我就來來把它改改成中文文的吧,這這樣有目目標了。從chhromme的工工程里可可以看到到它是支支持多種種語言的的,在WWinddowss平臺上上支持多多語言的的標準做做法,就就是寫多多個語言言的DLLL。因因此,cchroome也也不例外外,從aapp工工程集里里,就可可以看到

10、到如下圖圖所示:上面顯示示了多種種語言的的動態(tài)連連接庫資資源,其其中zhh-CNN是簡體體中文的的。接著打開開資源文文件的字字符串編編輯,如如下圖:把上面的的字符串串修改為為 “關(guān)關(guān)于 可可多米”,然然后把這這個工程程重新編編譯一下下,就會會生成下下面的文文件:然后運行行自己編編譯的可可多米,就就會顯示示出修改改的成果果,如下下圖:可以看到到關(guān)于對對話框的的標題,就就變成我我上面修修改的了了。這樣樣學習它它的修改改,就是是幾分鐘鐘的事情情,哈哈哈這樣就學學習了可可多米開開發(fā)漢化化的工作作,這是是本地化化的重要要做的一一件事情情,也學學習到怎怎么樣支支持多語語言的實實現(xiàn)方式式。那么么它的關(guān)關(guān)于對

11、話話框是從從那里顯顯示出來來的呢?怎么樣樣把字符符串更新新到上面面的呢?下一次次再告訴訴你。 谷歌歌瀏覽器器的源碼碼分析(3) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t)

12、,saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏前面修改改了chhromme關(guān)于于對話框框,并且且編譯顯顯示出來來了,那那么它是是在那里里調(diào)用顯顯示的呢呢?現(xiàn)在在就帶你你去了解解它。由由于它是是界面顯顯示,那那么不用用想,直直接到界界面的工工程里查查找它,也也就是到到目錄ssrcchrromeebrrowsservieews里里查看到到文件aabouut_cchroome_vieew.ccc。這個文件件

13、里聲明明了一個個類AbbouttChrromeeVieew,它它就是主主要負責責初始化化對話框框、布局局、顯示示字符串串等等,比比如顯示示“關(guān)于于可樂米米”的字字符串,就就是這樣樣實現(xiàn)的的,先調(diào)調(diào)用函數(shù)數(shù):#0011stdd:wwstrringg AbbouttChrromeeVieew:GettWinndowwTittle() cconsst reeturrn ll10nn_uttil:GeetSttrinng(IIDS_ABOOUT_CHRROMEE_TIITLEE);獲取資源源里的對對話框標標題,接接著:在上面的的斷點里里就是響響應(yīng)菜單單,然后后創(chuàng)建關(guān)關(guān)于對話話框,主主要調(diào)用用函數(shù)CCr

14、eaateCChroomeWWinddow來來創(chuàng)建窗窗口,把把AbooutCChroomeVVieww窗口綁綁定到這這個窗口口類型里里。由于于可多米米都是統(tǒng)統(tǒng)一的窗窗口樣式式,那么么它是通通過創(chuàng)建建一樣的的窗口類類CusstommFraameWWinddow來來實現(xiàn)的的。為了顯示示窗口的的標題,是是通過下下面的函函數(shù)關(guān)系系調(diào)用:1Broowseer:ExeecutteCoommaand瀏覽器器執(zhí)行菜菜單命令令。2ChrromeeVieews:Wiindoow:CreeateeChrromeeWinndoww創(chuàng)建窗窗口。3ChrromeeVieews:CuustoomFrrameeWinndow

15、w:IInitt初始化化窗口。4ChrromeeVieews:Wiindoow:Iniit初始化化窗口標標題。5AbooutCChroomeVVieww:GGetWWinddowTTitlle從關(guān)于于對話框框獲取標標題。理解上面面的函數(shù)數(shù)關(guān)系調(diào)調(diào)用就知知道怎么么樣顯示示標題了了,因此此也知道道關(guān)于對對話框所所有內(nèi)容容是由類類AbooutCChroomeVVieww來管理理的,但但窗口的的樣式是是由CuustoomFrrameeWinndoww類來管管理的。通過上面面的分析析,了解解了關(guān)于于對話框框的標題題顯示過過程,你你想修改改成什么么樣的內(nèi)內(nèi)容,就就要看你你的需要要了。下下一次再再仔細地地分

16、析有有關(guān)于對對話框怎怎么樣組組織其它它信息,比比如重要要的升級級功能。谷歌瀏瀏覽器的的源碼分分析(44) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scr

17、ollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏關(guān)于對話話框,主主要實現(xiàn)現(xiàn)了讓用用戶查看看當前軟軟件的版版本、軟軟件信息息和檢查查升級的的功能。因此這這個類主主要繼續(xù)續(xù)ChrromeeVieews:Viiew類類、ChhrommeViiewss:DDiallogDDeleegatte和GooogleeUpddateeStaatussLisstenner。其中CChroomeVViewws:Vieew實現(xiàn)現(xiàn)窗口的的布局和和顯示

18、問問題,CChroomeVViewws:DiaaloggDellegaate實實現(xiàn)了事事件響應(yīng)應(yīng),或者者窗口某某時是否否可以顯顯示按鈕鈕的問題題,GoooglleUppdatteSttatuusLiisteenerr是用來來實現(xiàn)接接收更新新程序狀狀態(tài)信息息。這個類的的聲明如如下:classs AAbouutChhrommeViiew : ppubllic ChrromeeVieews:Viiew,ppubllic ChrromeeVieews:DiialoogDeeleggatee,ppubllic GooogleeUpddateeStaatussLisstenner pubblicc:exx

19、pliicitt AbbouttChrromeeVieew(PProffilee* pproffilee);viirtuual AbbouttChrromeeVieew();/ Innitiialiize thee coontrrolss onn thhe ddiallog.vooid Iniit();/ Ovverrriddden froom CChroomeVViewws:Vieew:viirtuual voiid GGetPPrefferrredSSizee(CSSizee *oout);viirtuual voiid LLayoout();viirtuual voiid VViewwH

20、ieerarrchyyChaangeed(bbooll iss_addd,CChroomeVViewws:Vieew* parrentt,CChroomeVViewws:Vieew* chiild);/ Ovverrriddden froom CChroomeVViewws:DiaaloggDellegaate:viirtuual intt GeetDiialoogBuuttoons() cconsst;viirtuual stdd:wwstrringg GeetDiialoogBuuttoonLaabell(DiialoogBuuttoon bbuttton) coonstt;viirtuu

21、al boool IIsDiialoogBuuttoonEnnablled(DiaaloggButttonn buuttoon) connst;viirtuual boool IIsDiialoogBuuttoonViisibble(DiaaloggButttonn buuttoon) connst;viirtuual boool CCanRResiize() cconsst;viirtuual boool CCanMMaxiimizze() coonstt;viirtuual boool IIsAllwayysOnnTopp() connst;viirtuual boool HHasAAlw

22、aaysOOnToopMeenu() cconsst;viirtuual boool IIsMoodall() connst;viirtuual stdd:wwstrringg GeetWiindoowTiitlee() connst;viirtuual boool AAcceept();viirtuual ChrromeeVieews:Viiew* GeetCoonteentssVieew();/ Ovverrriddden froom GGooggleUUpdaateSStattusLListteneer:viirtuual voiid OOnReeporrtReesullts(Gooog

23、leeUpddateeUpggraddeReesullt rresuult,GooogleeUpddateeErrrorCCodee errrorr_coode,connst stdd:wwstrringg& vverssionn);priivatte:/ Thhe vvisiiblee sttatee off thhe CChecck FFor Upddatees bbuttton.ennum CheeckBButttonSStattus CHEECKBBUTTTON_HIDDDENN = 0,CHEECKBBUTTTON_DISSABLLED,CHEECKBBUTTTON_ENAABLEE

24、D,;/ Uppdatte tthe UI to shoow tthe staatuss off thhe uupgrradee.vooid UpddateeStaatuss(GoooglleUppdatteUppgraadeRResuult ressultt,GoooglleUppdatteErrrorrCodde eerroor_ccodee);Prrofiile* prrofiile_;/ UII ellemeentss onn thhe ddiallog.ChhrommeViiewss:IImaggeViiew* abboutt_dllg_bbackkgrooundd_;Chhromm

25、eViiewss:LLabeel* aboout_tittle_labbel_;ChhrommeViiewss:TTexttFieeld* veersiion_labbel_;ChhrommeViiewss:TTexttFieeld* maain_texxt_llabeel_;/ UII ellemeentss wee addd tto tthe parrentt viiew.sccopeed_pptr tthroobbeer_;ChhrommeViiewss:IImaggeViiew succcesss_iindiicattor_;ChhrommeViiewss:IImaggeViiew u

26、pddatee_avvaillablle_iindiicattor_;ChhrommeViiewss:IImaggeViiew timmeouut_iindiicattor_;ChhrommeViiewss:LLabeel uupdaate_labbel_;/ Keeepss trrackk off thhe vvisiiblee sttatee off thhe CChecck FFor Upddatees bbuttton.ChheckkButttonnStaatuss chheckk_buuttoon_sstattus_;/ Thhe cclasss tthatt coommuunicc

27、atees wwithh Goooglle UUpdaate to finnd oout if an upddatee iss/ avvaillablle aand askks iit tto sstarrt aan uupgrradee.GoooglleUppdatte* goooglee_uppdatter_;/ Ouur ccurrrentt veersiion.sttd:wsttrinng ccurrrentt_veersiion_;/ Thhe vverssionn Goooglle UUpdaate repportts iis aavaiilabble to us.sttd:wst

28、trinng nnew_verrsioon_aavaiilabble_;DIISALLLOWW_EVVIL_CONNSTRRUCTTORSS(AbbouttChrromeeVieew);通過關(guān)于于對話框框的分析析,可以以理解到到chrromee瀏覽器器窗口基基本組成成,以及及窗口繼繼承關(guān)系系,還有有事件的的響應(yīng)方方式。前前面三次次分析,主主要是入入門的分分析,也也是了解解這么一一個大工工程的一一種手段段。比如如測試整整個工程程是否可可以編譯譯,是否否可以修修改代碼碼等等。后面的的分析會會以瀏覽覽器輸入入HTTTP連接接開始,直直到打開開網(wǎng)頁顯顯示為一一個主線線,做一一個基本本的分析析。谷歌瀏覽

29、覽器的源源碼分析析(5) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,

30、top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏當用戶打打開瀏覽覽器之后后,最希希望輸入入的地方方,是瀏瀏覽器的的連接框框。目前前谷歌瀏瀏覽器把把輸入連連接框與與搜索引引擎輸入入合并到到一起,可可以說完完美的組組合,讓讓界面更更加簡潔潔,方便便實用,并并且它自自動完成成的功能能更加強強勁,如如下圖所所示:上面輸入入了 HYPERLINK http:/www.c/ wwww.cc時,它它就會自自動地在在后面添添加智能能選擇的的連接,并并且可以以GOOOGLEE里搜索索輸入的的內(nèi)容,又又如下面面:上面在輸輸

31、入框里里輸入我我的名字字,就會會自動彈彈出查找找的內(nèi)容容,或者者可能搜搜索的連連接。這這些功能能都比較較完美的的實現(xiàn),這這可以說說是史無無前例的的輸入創(chuàng)創(chuàng)新,真真正人性性化的體體現(xiàn),那那么它又又是怎么么樣實現(xiàn)現(xiàn)的呢?其主要要功能是是在文件件srccchhrommebbrowwserrauutoccomppletteaautoocommpleete_ediit.ccc里實實現(xiàn),具具體的實實現(xiàn)方式式內(nèi)容等等下一次次再去分分析。谷歌瀏瀏覽器的的源碼分分析(66) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None

32、?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏前面已經(jīng)經(jīng)介紹了了這么引

33、引人的輸輸入自動動完成功功能,并并且可以以在輸入入超級連連接框里里直接通通過GOOOGLLE搜索索所有的的內(nèi)容,這這是比較較大的創(chuàng)創(chuàng)新,不不但可以以節(jié)省界界面的占占用面積積,還很很方便大大家查詢詢的需要要,比如如記不住住的連接接,根本本不需要要去記了了,只要要你記住住需要的的內(nèi)容就就行了。這樣既既不需要要到什么么門戶網(wǎng)網(wǎng)站去找找連接,也也不需要要去記住住眾多的的網(wǎng)站,這這個功能能是非常常方便的的。這個輸入入框的自自動完成成的功能能,是比比較智能能化的。因為它它會根據(jù)據(jù)以往的的輸入自自動完成成,或者者智能提提示所需需要的連連接或者者內(nèi)容。下面就來來先看這這個類的的定義:#0011/ Proovi

34、ddes thee immpleemenntattionn off ann eddit conntrool wwithh a droop-ddownn#0022/ auttocoomplletee boox. Thee boox iitseelf is impplemmentted in auttocoomplletee_poopupp.ccc#0033/ Thiis ffilee immpleemennts thee eddit boxx annd mmanaagemmentt foor tthe poppup.#0044/#0055/ Thiis iimpllemeentaatioon i

35、is ccurrrenttly appproppriaate forr thhe UURL barr, wwherre tthe#0066/ auttocoomplletee drropddownn iss allwayys ddispplayyed beccausse ttherre iis aalwaays a#0077/ deffaullt iitemm. FFor webb paage auttofiill andd ottherr apppliicattionns, thiis iis#0088/ proobabbly nott appproopriiatee. WWe mmay w

36、annt tto aadd a fflagg too deeterrminne wwhicch#0099/ of theese moddes were in.#0100claass AuttocoomplleteeEdiit#0111: ppubllic CWiindoowImmplAuttocoomplleteeEdiit,#0122CRiichEEdittCtrrl,#0133CWiinTrraitts ,#0155pubblicc CRRichhEdiitCoommaandss,#0166pubblicc Meenu:Deeleggatee 類AuttocoomplleteeEdiit繼

37、承承了類CCWinndowwImppl、類類CRiichEEdittCommmannds、類Meenu:Deeleggatee。其中中類CWWinddowIImpll實現(xiàn)了了Winndowws窗口口,它是是WTLL里的窗窗口模板板類,主主要用來來創(chuàng)建窗窗口界面面類,并并且使用用類CRRichhEdiitCttrl作作為基類類,類CCRicchEdditCCtrll主要調(diào)調(diào)用Wiindoows里里的編輯輯類。類類CRiichEEdittCommmannds實實現(xiàn)RiichEEditt的命令令功能。Mennu:Dellegaate類類是實現(xiàn)現(xiàn)智能下下拉式菜菜單的提提示界面面。因此此,要學學習開發(fā)發(fā)

38、chrromee,需要要先學習習WTLL的開發(fā)發(fā),它是是一套基基于模板板的窗口口框架。下一次次再仔細細地分析析自動完完成的實實現(xiàn)過程程。谷歌瀏瀏覽器的的源碼分分析(77) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.locati

39、on.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏當我們鍵鍵入字母母或者文文字開始始時,那那么類AAutoocommpleeteEEditt就會從從窗口消消息里獲獲取到相相應(yīng)的字字母或者者文字,然然后根據(jù)據(jù)輸入的的信息到到本地或或者網(wǎng)絡(luò)絡(luò)上保存存的信息息庫里查查找相應(yīng)應(yīng)的輸入入提示,這這就是自自動完成成的實現(xiàn)現(xiàn)。下面面就來先先分析輸輸入的函函數(shù):#0011vvo

40、idd AuutoccomppletteEddit:OnnChaar(TTCHAAR cch, UINNT rrepeeat_couunt, UIINT flaags) #0022/ Doontt leet aalt-entter beeep.Noot ssuree thhis is neccesssaryy, aas tthe staandaard#0033/ allt-eenteer wwilll hiit DDisccarddWMSSysCCharr() andd geet tthroown awaay, andd#0044/ cttrl-altt-ennterr dooesnnt se

41、eem tto rreacch hheree foor ssomee reeasoon?Att leeastt noot oon#0055/ myy syysteem sstilll, thiis iis hharmmlesss aand mayybe neccesssaryy inn ottherr loocalles.下面把aalt-entter組組合鍵消消息過濾濾掉。#0066iff (cch = VVK_RRETUURN & (fllagss & KF_ALTTDOWWN)#0077retturnn;#0088#0099/ Esscappe iis pproccesssed in On

42、KKeyDDownn.Donnt lett anny WWM_CCHARR meessaagess prropaagatte#0100/ ass wee doontt waant thee RiichEEditt too doo annythhingg fuunkyy.下面把EESC鍵鍵的消息息過濾掉掉。#0111iff (cch = VVK_EESCAAPE & !(fflaggs & KFF_ALLTDOOWN)#0122retturnn;#0133下面把TTAB鍵鍵的消息息過濾掉掉。#0144iff (cch = VVK_TTAB) #0155/ Donnt addd taabs to

43、thee innputt.#0166retturnn;#0177#0188這里處理理其它有有用的按按鍵消息息。#0199HaandlleKeeysttrokke(GGetCCurrrenttMesssagge()-mmesssagee, cch, reppeatt_coountt, fflaggs);#0200AutoocommpleeteEEditt:OOnChhar函函數(shù)是WWTL里里的WMM_CHHAR消消息處理理,當用用戶鍵入入字母時時就會觸觸發(fā)這個個消息。這個函函數(shù)先跳跳過幾個個不要處處理的消消息,最最后調(diào)用用函數(shù)HHanddleKKeysstrooke來來處理,如如下:#0011v

44、voidd AuutoccomppletteEddit:HaandlleKeeysttrokke(UUINTT meessaage, TCCHARR keey,#0022UUINTT reepeaat_ccounnt, UINNT fflaggs) 凍結(jié)RiichEEditt的更新新。#0033SccopeedFrreezze ffreeeze(thiis, GettTexxtObbjecctMoodell();處理消息息變化前前的動作作。#0044OnnBefforeePosssibbleCChannge();處理消息息#0055DeefWiindoowPrroc(messsagge, ke

45、yy, MMAKEELPAARAMM(reepeaat_ccounnt, flaags);處理消息息變化后后的動作作。#0066OnnAftterPPosssiblleChhangge();#0077在這里為為什么要要進行窗窗口的消消息凍結(jié)結(jié)呢?又又為什么么需要進進行消息息處理和和消息變變化后處處理呢?谷歌瀏瀏覽器的的源碼分分析(88) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelect

46、ion():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏上一次說說到處理理WM_CHAAR消息息,當用用戶每鍵鍵入一個個字符時時,萬能能連接框框就會去去進行一一次查找找的過程程,然后后把智能能提示信信息

47、顯示示出來。說到AAutoocommpleeteEEditt:HHanddleKKeysstrooke函函數(shù)的操操作,那那么它為為什么需需要凍結(jié)結(jié)這個函函數(shù)的使使用呢?現(xiàn)在就就來分析析這部份份的內(nèi)容容。如下下:ScoppedFFreeeze freeezee(thhis, GeetTeextOObjeectMModeel();在這行代代碼里,首首先會調(diào)調(diào)用函數(shù)數(shù)GettTexxtObbjecctMoodell()來來獲取一一個文檔檔ITeextDDocuumennt接口口,然后后再使用用它的功功能。這這個函數(shù)數(shù)的代碼碼如下:#0011IITexxtDoocummentt* AAutoocomm

48、pleeteEEditt:GGetTTexttObjjecttModdel() cconsst 先判斷這這個接口口是否獲獲取到,如如果已經(jīng)經(jīng)獲取到到就不再再去重復(fù)復(fù)獲取了了。#0022iff (!texxt_oobjeect_moddel_) #0033/ Thiis iis llaziily iniitiaalizzed, innsteead of beiing iniitiaalizzed in thee#0044/ connstrructtor, inn orrderr too avvoidd huurtiing staartuup pperfformmancce.這里使用用了智能能指針

49、來來獲取IIRicchEdditOOle接接口。#0055CCoomPttr olle_iinteerfaace;獲取到的的IRiichEEdittOlee接口綁綁定到智智能指針針里。#0066olee_innterrfacce.AAttaach(GettOleeIntterffacee();下面通過過=操作作符獲取取ITeextDDocuumennt接口口,如果果你深入入去分析析這個賦賦值操作作符,會會看到它它自動去去調(diào)用IIRicchEdditOOle的的接口IIUnkknowwn:QueeryIInteerfaace來來查詢到到ITeextDDocuumennt接口口,這個個過程對對于程

50、序序員來說說是完全全不用關(guān)關(guān)心的,這這就是使使用muutabble CCoomQIIPtrr teext_objjectt_moodell_定義義的作用用。#0077texxt_oobjeect_moddel_ = olee_innterrfacce;#0088#0099reeturrn ttextt_obbjecct_mmodeel_;#0100通過上面面的分析析,可見見使用CCCommQIPPtr智智能指針針可以省省了很多多COMM調(diào)用的的操作,這這真是模模板類的的強大功功能的使使用之處處。當把把ITeextDDocuumennt接口口獲取回回來之后后,對于于RicchEddit操操作就可

51、可以輕松松訪問了了,SccopeedFrreezze類生生成一個個局部對對象,這這個對象象實現(xiàn)了了對RiichEEditt自動凍凍結(jié)和解解凍結(jié)的的功能,這這個過程程是通過過局部對對象在棧棧里生命命周期的的特性應(yīng)應(yīng)用。如如下面的的代碼:#0011AAutoocommpleeteEEditt:SScoppedFFreeeze:SccopeedFrreezze(AAutoocommpleeteEEditt* eeditt,#0022IITexxtDoocummentt* ttextt_obbjecct_mmodeel)#0033: eeditt_(eeditt),#0044ttextt_obbjec

52、ct_mmodeel_(texxt_oobjeect_moddel) #0055/ Frreezze tthe scrreenn.#0066iff (ttextt_obbjecct_mmodeel_) #0077lonng ccounnt;#0088texxt_oobjeect_moddel_-FFreeeze(&coountt);#0099#0100#0111#0122AAutoocommpleeteEEditt:SScoppedFFreeeze:SScoppedFFreeeze() #0133/ Unnfreeezee thhe sscreeen.#0144/ NOOTE: Iff thh

53、is desstruuctoor iis rreacchedd whhilee thhe eeditt iss beeingg deestrroyeed (forr#0155/ exxampple, beecauuse we douublee-cllickked thee eddit of a ppopuup aand cauusedd itt too#0166/ trranssforrm tto aan uuncoonsttraiinedd wiindoow), itt wiill no lonngerr haave an HWNND, andd#0177/ teext_objjectt_m

54、oodell_ mmay poiint to a ddesttroyyed objjectt, sso ddo nnothhingg heere.#0188iff (eeditt_-IsWWinddow() & ttextt_obbjecct_mmodeel_) #0199lonng ccounnt;#0200texxt_oobjeect_moddel_-UUnfrreezze(&couunt);#0211if (coountt = 0) 這里需要要手動地地更新窗窗口的顯顯示。#0222/ WWe nneedd too UppdatteWiindoow() heere inssteaad oo

55、f IInvaaliddateeRecct() beecauuse, ass#0233/ ffar as I ccan telll, thee eddit likkes to synnchrronoouslly eerasse iits bacckgrrounnd#0244/ wwhenn unnfreeeziing, thhus reqquirringg uss too syynchhronnoussly reddraww iff wee doontt#0255/ wwantt fllickker.#0266eeditt_-UpddateeWinndoww();#0277#0288#0299

56、從上面的的代碼可可以看到到構(gòu)造函函數(shù)里凍凍結(jié),析析構(gòu)造函函數(shù)里解解凍結(jié),如如果需要要就會自自動更新新窗口的的顯示。通過上面面的分析析,學會會使用RRichhEdiit的凍凍結(jié)窗口口的輸入入,并且且解凍結(jié)結(jié)和更新新窗口的的顯示,也也同時學學會使用用智能指指針來操操作COOM接口口的方便便性,最最后還學學會了使使用棧對對象的生生命周期期來方便便對加鎖鎖和解鎖鎖的操作作,以便便降低代代碼的出出錯率。谷歌瀏覽覽器的源源碼分析析(9) HYPERLINK javascript:d=document;t=d.selection?(d.selection.type!=None?d.selection.cre

57、ateRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+&u=+escape(d.location.href)+&c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes);saveit.focus(); o 收藏到我的網(wǎng)摘中,并分享給我的朋友 收藏為了處理理字符消消息實現(xiàn)現(xiàn)自動完完成的功功能,這這是怎么

58、么樣實現(xiàn)現(xiàn)的呢?其實是是先記錄錄字符消消息響應(yīng)應(yīng)前的字字符串以以及選中中狀態(tài),接接著再處處理消息息,最后后才查詢詢可能的的輸入,做做出智能能提示。#0011vvoidd AuutoccomppletteEddit:OnnBefforeePosssibbleCChannge() #0022/ Reecorrd oour staate.記錄當前前已經(jīng)輸輸入的字字符串。#0033teext_befforee_chhangge_ = GGetTTextt();記錄當前前選中的的字符位位置。#0044GeetSeelecctioon(ssel_befforee_chhangge_);#0055seele

59、cct_aall_befforee_chhangge_ = IIsSeelecctAlll(ssel_befforee_chhangge_);#0066上面就保保存字符符消息響響應(yīng)前的的狀態(tài),接接著下來來就是消消息響應(yīng)應(yīng)后的處處理了,如如下:#0011bbooll AuutoccomppletteEddit:OnnAftterPPosssiblleChhangge() #0022/ Prreveent thee usser froom sseleectiing thee pphanntomm neewliine att thhe eend of thee#0033/ eddit.IIf tth

60、eyy trry, we jusst ssileentlly mmovee thhe eend of thee seelecctioon bbackk too#0044/ thhe eend of thee reeal texxt.判斷用戶戶新選中中狀態(tài)。#0055CHHARRRANGGE nnew_sell;#0066GeetSeelecctioon(nnew_sell);#0077coonstt innt llenggth = GGetTTexttLenngthh();#0088iff (neww_seel.ccpMiin leengtth) | (neew_ssel.cpMMax lle

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論