2010-04-09 11:56
1087人閱讀收藏
舉報html
c瀏覽器
webbrowser
dll磁碟
標 題:【翻譯】過年了,獻上小禮 - 使用純c在自己的視窗中嵌入html控制項
作 者:
xiep
時 間: 2010-01-22,13:42:29
鏈 接:
每個事件都有乙個唯一的字串名。例如,當滑鼠移到上面字型元素(即,將滑鼠指標移動到紅色文字上),發生的是乙個滑鼠懸停事件。當滑鼠離開字型元素時,事件發生的是乙個滑鼠離開(mouseout)事件。
對於頁面上的每個元素,都對應瀏覽器的乙個ihmtlelement物件。為了獲的某個元素的反饋必須獲得它對應的ihmtlelement物件。dll目錄中的dll.c中有乙個名為getwebelement的函式,使用者獲取特定元素的ihtmlelement物件。getwebelement是通過傳遞的包含瀏覽器物件視窗的控制代碼,和所需元素的編號(名稱)。要獲得ihtmlelement ,我們要經過幾個其他瀏覽器物件,我們必須先獲得瀏覽器的ihtmldocument2物件,和所需元素的ihtmlelementcollection物件,在獲取元素的idispatch介面,並最終從ihtmlelement物件的idispatch獲得元素的ihtmlelement物件。噢!
一旦我們有乙個元素的ihtmlelement,我們就可以附加到該元素從而得到反饋。如上所述,我們需要給瀏覽器提供乙個idispatch物件。事件發生時,瀏覽器將呼叫idispatch的invoke函式。我們必須獲取瀏覽器的ihtmlwindow3物件,然後idispatch為引數呼叫它的attachevent函式,為瀏覽器提供idispatch。
為了告訴瀏覽器字型元素的「滑鼠懸停」事件發生時,呼叫我們的idispatch的invoke函式,我們需要呼叫該字型元素ihtmlelement物件的put_onmouseover函式,並傳遞我們的idispatch物件指標(實際上我們需要將該指標包裝為乙個variant變數)。同樣的對於「滑鼠離開」事件,呼叫put_onmouseout函式。
不同型別的元素可能會有不同的事件,因此一些元素,如**,有更多的子物件我們可以通過其ihtmlelement的queryinte***ce函式獲得。例如,如果我們有乙個form元素的ihtmlelement,我們可以呼叫它的queryinte***ce獲得它的ihtmlformelement。然後,我們呼叫ihtmlformelement的put_onsubmit函式附加到其提交的事件(例如當使用者提交表單資料時)。檢視的msdn以確定哪些網頁元素含有子物件(即哪些元素產生哪些事件)。
當然,我們希望所有的關於com的東西都被封裝在cwebpage.dll中,我們需要做的是提供乙個建立代表應用程式本身的idispatch的函式。該函式就是createwebevthandler。idispatch的函式位於cwebpage.dll內部 ,因此應用程式不需要建立任何com物件。應用程式為為需要反饋的元素制定乙個id。例如,應用程式可能決定指派字型元素的編號為1。然後,當dll idispatch invoke獲取字型元素的滑鼠懸停事件,例如,我們給應用程式視窗傳送乙個自定義訊息。自定義的資訊將包括元素的id和時間的字串名稱(即「mouseover」)。
目錄htmlevents包含乙個例子程式和乙個示例網頁。該網頁上有幾個元素,包括乙個**,和乙個字型元素。應用程式能夠收到這兩個元素某些事件的反饋。
應用程式也能獲得頁面本身產生的事件(如使用者雙擊的空白區域的頁面),或瀏覽器的滾動條等。例子也能收到一些非頁面元素產生的事件。
應用程式還能得到更多事件反饋。請檢視msdn並實驗。
C 在子視窗中呼叫父視窗的方法
基本思想 1.c 中的每個form 窗體 都是class 類 2.每個form都有乙個mdiparent 屬性 設定或者獲取此窗體的當前多文件介面 mdi 的父窗體 具體實現 本例假設在父窗體 窗體類名 main 上有乙個方法setmainmenu 子窗體要呼叫該方法。1 父視窗定義setmainm...
使用js在新視窗中POST資料
最近在做自己的部落格,寫文章的時候有乙個預覽功能,當時使用的是彈出框來進行預覽,感覺體驗不是很好。在新視窗post action form的action屬性,要post的位址 url data form中的資料,資料格式為 data的值可以使用jquery的方法 form1 serializearr...
C 防止WebBrowser在新視窗中開啟鏈結頁面
在日常的開發中,大家有時需要用webbrowser載入url,來實現某些功能。而這時,我們就不希望所開啟的頁面中的鏈結,在新視窗中開啟,因為這樣的話,實際上是用系統預設的瀏覽器開啟了,從而脫離了你的webbrowser,也就不能被你所控制了。要解決這個問題,可以使用下面的方法 假設webbrowse...