2010-02-02 37 views
3

我在嘗試更改WebBrowser控件的顯示字體。在c#中更改WebBrowser控件的顯示字體?

我試圖

doc.execCommand("FontName", false, "Arial"); 

但似乎它適用於選定的文本。

我想要在IE-> Internet選項 - >常規 - >外觀 - >字體中設置字體的效果完全一樣。

在此先感謝。

Byoungjo

--------更新-------------

像米切爾指出,作爲做是ExeWB在做同樣的工作C#.Net是目標。

另外,更改註冊表有點過分,如果存在,可能需要更簡單的解決方案。否則,我只會對此FR說不。

+0

在所有頁面或當前頁面上有效嗎? – Lazarus 2010-02-02 16:28:43

+0

整體頁面沒有問題,但不改變用戶的IE設置。 – 2010-02-02 17:01:45

回答

2

那麼,從這個外觀你需要使用這個Microsoft article概述的execWB命令。

更新

但與本文檔的進一步研究,我沒有看到的execWB過,或正在使用的.NET瀏覽器控件中的選項將execCommand方法。

因此,你可能有實際的IE設置,這更可能是在註冊表中futz ..

+0

是的,修改註冊表是我迄今從網上找到的解決方案。但是,另一個意圖是不改變IE的默認設置。可以理解的是,我不希望我的應用程序改變用戶的IE顯示設置。 – 2010-02-02 16:41:03

+0

好吧,更棘手的方法是在呈現前向每個頁面插入嵌入式樣式表。否則,由於WebBrowser只是IE裏面的內容,所以需要在更高級別上更改設置。 – 2010-02-02 16:44:02

+0

嵌入式樣式表聽起來不錯,但是當我嘗試這個時: IHTMLStyleSheet styleSheet = doc。createStyleSheet(「」,0); styleSheet.cssText =「BODY {font-family:\」Arial \「}」; 它得到'錯誤HRESULT E_FAIL已從調用COM組件返回'。多一點幫助? – 2010-02-02 17:00:58

0

由於設置在HKEY_CURRENT_USER /軟件/微軟/ Internet Explorer,您應該能夠通過在您的瀏覽器網站上實現IDocHostUIHandler2 :: GetOverrideKeyPath覆蓋此設置。由於Windows窗體內部實現了IDocHostUIHandler實現,因此我認爲您不能在WebBrowserSite上實現IDocHostUIHandler2。我想你需要從頭開始,例如像http://www.codeproject.com/KB/miscctrl/csEXWB.aspx 另一種可能性是重寫IDocHostUIHandler :: GetHostInfo實現中的默認css。

+0

我選擇遵循Mitchel的建議。不過謝謝你的答案。 – 2010-02-06 18:14:41

+0

它在打印/預覽過程中不起作用。 – 23W 2013-08-20 13:36:54

2

其實,你可以調用ExecWB方法,你只需要間接地做。我有以下的代碼進行縮放上下的工作(使用C#4.0使得它更容易一些):

private const int OLECMDID_ZOOM = 63; 
    private const int OLECMDEXECOPT_DONTPROMPTUSER = 2; 

    private void SetZoom(int zoom) 
    { 
     dynamic obj = webBrowser1.ActiveXInstance; 

     obj.ExecWB(OLECMDID_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, zoom, IntPtr.Zero); 
    } 
+0

雖然這已經超出了現在的功能要求,但您的建議對於控制瀏覽器對象聽起來很不錯。 謝謝。 – 2010-06-11 09:22:53

0

如果你不關心去除選擇,這可能工作:

web.Document.ExecCommand("SelectAll", false, "null"); 
web.Document.ExecCommand("FontName", false, "Arial"); // or any desired font 
web.Document.ExecCommand("Unselect", false, "null"); 
相關問題