結合MSHTML與WebBrowser生成美觀實用的WinForm應用程序(By Lostinet)

我用WinForm開發也有一段時間了。我覺得目前的WinForm開發速度是夠的,但是一些原本在HTML就很容易做到的事情,在WinForm中就很難實現了。 這個主要的原因可能是WinForm複用控件的能力非常強,但是可用的控件卻非常少。一般買回來的控件不但貴,而且也不是太好擴展。

作爲一個學了多年HTML的人,我當然希望在WinForm中依然能使用HTML的特徵,例如強大的CSS!,自動排版伸縮的特徵,(CSS與排版可以更方便打印!),以及腳本的編寫。(有時候寫腳本比寫WinForm的程序更爽。具體情況具體做)。

要做這個其實不難。但是要靈活運用則不容易了。

通常,使用WebBrowser控件的人,只是簡單地使用MSHTML調用WebBrowser裏的東西。也就是說,這個調用是單項的,只考慮到修改HTML來顯示某種東西。

今天我寫這個隨筆的意圖是告訴大家怎樣把用戶在WebBrowser裏的操作反饋給WinForm

做這個反饋的基石是 DotNet 的 InteropServices 。通過把DotNet的某個對象,傳到HTML DOM裏去,然後用腳本來操作該DotNet對象。

要做到這個,核心是:

  1. 獲取 WebBrowser.Document ,它實現了mshtml.IHtmlDocument /2/3/4/5 (其中IHtmlDocument2最有用)
  2. 這個Document是 System.Runtime.InteropServices.Expando.IExpando,通過它來設置和獲取Document的一些動態命名的成員。

例子中的代碼是:
mshtml.IHTMLDocument2 doc2=(mshtml.IHTMLDocument2)browser.Document;
System.Runtime.InteropServices.Expando.IExpando ex=(System.Runtime.InteropServices.Expando.IExpando)doc2;
System.Reflection.PropertyInfo piform1=ex.AddProperty("Form1");
piform1.SetValue(doc2,this,null);//從此,在HTML的document.Form1就是這個WinForm的Control了。你可以用腳本來調用Form1 !

有了這些交互,我們可以實現的東西實在太多太多了。

我下一步應該是研究一下,怎樣直接把WinForm的Control動態地嵌進這個HTML裏。(不是用 《 OBJECT 》來部署的形式)

轉自:http://blog.csdn.net/waxdollcheung/articles/324498.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章