上一次說到處理wm_char訊息,當使用者每鍵入乙個字元時,萬能連線框就會去進行一次查詢的過程,然後把智慧型提示資訊顯示出來。說到autocompleteedit::handlekeystroke函式的操作,那麼它為什麼需要凍結這個函式的使用呢?現在就來分析這部份的內容。如下:
scopedfreeze freeze(this, gettextobjectmodel());
在這行**裡,首先會呼叫函式gettextobjectmodel()來獲取乙個文件itextdocument介面,然後再使用它的功能。這個函式的**如下:
#001itextdocument* autocompleteedit::gettextobjectmodel() const
#009return text_object_model_;
#010}
通過上面的分析,可見使用ccomqiptr智慧型指標可以省了很多com呼叫的操作,這真是模板類的強大功能的使用之處。當把itextdocument介面獲取回來之後,對於richedit操作就可以輕鬆訪問了,scopedfreeze類生成乙個區域性物件,這個物件實現了對richedit自動凍結和解凍結的功能,這個過程是通過區域性物件在棧裡生命週期的特性應用。如下面的**:
#001autocompleteedit::scopedfreeze::scopedfreeze(autocompleteedit* edit,
#002itextdocument* text_object_model)
#003: edit_(edit),
#004text_object_model_(text_object_model)
#010}
#011
#012autocompleteedit::scopedfreeze::~scopedfreeze()
#028}
#029}
從上面的**可以看到建構函式裡凍結,析建構函式裡解凍結,如果需要就會自動更新視窗的顯示。
通過上面的分析,學會使用richedit的凍結視窗的輸入,並且解凍結和更新視窗的顯示,也同時學會使用智慧型指標來操作com介面的方便性,最後還學會了使用棧物件的生命週期來方便對加鎖和解鎖的操作,以便降低**的出錯率。
谷歌瀏覽器的原始碼分析 8
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!上一次說到處理wm char訊息,當使用者每鍵入乙個字元時,萬能連線框就會去進行一次查詢的過程,然後把智慧型提示資訊顯示出來。說到autocompleteedit handlekeystroke函式的操作,那麼它為什麼需要凍結這個函式的使用呢?現在...
谷歌瀏覽器的原始碼分析 30
上次說到函式winhttpreaddata 通過上面的函式可以看到,當資料接收完成後,就會呼叫docallback函式處理接收到的資料。docallback函式的 如下 看到這裡又是乙個 函式c run的通知,它是呼叫開始建立這個連線時設定的 物件。如果是http請求,那麼這個請求 函式是物件url...
谷歌瀏覽器的原始碼分析 32
上一次說到在類resourcedispatcher會收到接收http資料訊息,並進一步處理資料。那麼resourcedispatcher類又把接收到的資料發往何處呢?這是需要我們去搞懂它的。通過進一步的跟蹤,會發現在resourcedispatcher onreceiveddata函式呼叫webco...