欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
人生如夢(mèng),你我皆過(guò)客,來(lái)去匆匆......
用Visual C#打造多頁(yè)面網(wǎng)頁(yè)瀏覽器 用Visual C#打造多頁(yè)面網(wǎng)頁(yè)瀏覽器
一、簡(jiǎn)介
大家都知道,目前比較流行的網(wǎng)絡(luò )瀏覽器如Mozilla FireFox以及MyIE2等都具有多頁(yè)面瀏覽功能,每打開(kāi)一個(gè)新的頁(yè)面都自動(dòng)產(chǎn)生一個(gè)新的選項卡頁(yè)面,頁(yè)面的關(guān)閉也十分簡(jiǎn)便。這種設計思想使得用戶(hù)在瀏覽多個(gè)網(wǎng)頁(yè)時(shí)桌面十分簡(jiǎn)潔,也避免了用戶(hù)等待單頁(yè)面顯示的苦惱。由于這些瀏覽器一般都支持操作多種文件格式,所以當瀏覽本地機器上的多個(gè)文件時(shí)也極為方便。
本文使用Visual C詳細介紹如何實(shí)現這種多頁(yè)面瀏覽功能。同時(shí),還實(shí)現了下面附加功能: 打印, 打印預覽,頁(yè)面屬性,選項,查找,查看頁(yè)面源文件等。
二、關(guān)鍵技術(shù)分析
解決問(wèn)題的關(guān)鍵在于對瀏覽器控件WebBrowser的NewWindow2事件的編程。當需要顯示某種文件而生成一個(gè)新窗口時(shí),NewWindow2 事件即被激活。注意,該事件發(fā)生在WebBrowser控件的新窗口產(chǎn)生之前。例如,作為對導航到一個(gè)新窗口或者一個(gè)腳本控制的window.open方法的響應,即發(fā)生該事件。為了聲明當一個(gè)新窗口被打開(kāi)時(shí),將使用我們自己的瀏覽器程序,應該把參數ppDisp置為Application 對象。此時(shí),如果你選擇“在新窗口中打開(kāi)”,則新產(chǎn)生一個(gè)窗口來(lái)顯示W(wǎng)eb頁(yè)面。你也可以把RegisterAsBrowser設置為T(mén)RUE,這將導致新生成的WebBrowser控件參與到窗口命名的沖突問(wèn)題上。例如,如果一個(gè)窗口的名字在腳本的另外一處用到,那么該控件被派上用場(chǎng),而不是再產(chǎn)生一個(gè)新的窗口,因為控件在打開(kāi)一個(gè)新的窗口之前先檢查一下所有已存在的窗口名稱(chēng)以避免命名沖突。 在本文示例中,作為對該事件的響應,我們動(dòng)態(tài)地創(chuàng )建一個(gè)tab頁(yè)面,并通過(guò)調用CreateNewWebBrowser()方法產(chǎn)生一個(gè)WebBrowser控件作為其子控件――這里每一個(gè)子控件都有一個(gè)包含該控件相關(guān)信息的tag屬性。詳見(jiàn)下面的源碼:
private void axWebBrowser1_NewWindow2(object sender, AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
{
AxSHDocVw.AxWebBrowser  _axWebBrowser = CreateNewWebBrowser();
e.ppDisp = _axWebBrowser.Application;
_axWebBrowser.RegisterAsBrowser = true;
}
private AxSHDocVw.AxWebBrowser CreateNewWebBrowser()
{
AxSHDocVw.AxWebBrowser _axWebBrowser = new AxSHDocVw.AxWebBrowser();
_axWebBrowser.Tag = new HE_WebBrowserTag();
TabPage _TabPage = new TabPage();
_TabPage.Controls.Add(_axWebBrowser);
_axWebBrowser.Dock = DockStyle.Fill;
_axWebBrowser.BeforeNavigate2 += new AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(this.axWebBrowser1_BeforeNavigate2);
_axWebBrowser.DocumentComplete += new AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(this.axWebBrowser1_DocumentComplete);
_axWebBrowser.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
_axWebBrowser.NavigateError += new AxSHDocVw.DWebBrowserEvents2_NavigateErrorEventHandler(this.axWebBrowser1_NavigateError);
_axWebBrowser.NewWindow2 += new AxSHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(this.axWebBrowser1_NewWindow2);
_axWebBrowser.ProgressChange += new AxSHDocVw.DWebBrowserEvents2_ProgressChangeEventHandler(this.axWebBrowser1_ProgressChange);
_axWebBrowser.StatusTextChange += new AxSHDocVw.DWebBrowserEvents2_StatusTextChangeEventHandler(this.axWebBrowser1_StatusTextChange);
_axWebBrowser.TitleChange += new AxSHDocVw.DWebBrowserEvents2_TitleChangeEventHandler(this.axWebBrowser1_TitleChange);
_axWebBrowser.CommandStateChange += new AxSHDocVw.DWebBrowserEvents2_CommandStateChangeEventHandler(this.axWebBrowser1_CommandStateChange);
tabControl1.TabPages.Add(_TabPage);
tabControl1.SelectedTab = _TabPage;
return _axWebBrowser;
}
注意,每一個(gè)WebBrowser控件都有一個(gè)tag,我定義成一個(gè)簡(jiǎn)單的class,它用來(lái)包含一些該控件相關(guān)的獨有信息。請看:
public class HE_WebBrowserTag
{
public int _TabIndex = 0;
public bool _CanBack = false;
public bool _CanForward = false;
}
三、實(shí)現“查找”、“查看頁(yè)面源文件”、“選項”對話(huà)框等功能
注意 本例程中使用了一個(gè)未公開(kāi)的GUID,其在將來(lái)的系統中可以發(fā)生變更。
1、定義 IOleCommandTarget 接口
為定義一個(gè).NET接口以獲得關(guān)于一個(gè)COM接口的參考,請遵從下列步驟:
1) 賦予.NET接口相應的COM接口的GUID值;
2) 包含對接口中所有方法的類(lèi)型聲明;
3) 包含對Mshtml.dll和Shdocvw.dll文件的參考,在Visual C .NET工程中操作,請遵從:
A. 在項目菜單下單擊“添加引用”;
B. 單擊“COM” 選項卡;
C. 雙擊“Microsoft HTML Object Library” 和“Microsoft Internet Controls”。
4) 應該在程序命名空間聲明之前,包含下面的接口聲明以添加對Microsoft HTML (MSHTML) IOleCommandTarget接口的參照引用:
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
public struct OLECMDTEXT
{
public uint cmdtextf;
public uint cwActual;
public uint cwBuf;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=100)]public char rgwz;
}
[StructLayout(LayoutKind.Sequential)]
public struct OLECMD
{
public uint cmdID;
public uint cmdf;
}
// IOleCommandTarget的Interop定義
[ComImport,
Guid("b722bccb-4e68-101b-a2bc-00aa00404770"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleCommandTarget
{
//重要: 下面方法的順序非常重要,因為本示例中我們使用的是早期綁定,詳見(jiàn)MSDN中有關(guān).NET/COM互操作的參考。
void QueryStatus(ref Guid pguidCmdGroup, UInt32 cCmds,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] OLECMD[] prgCmds, ref OLECMDTEXT CmdText);
void Exec(ref Guid pguidCmdGroup, uint nCmdId, uint nCmdExecOpt, ref object pvaIn, ref object pvaOut);
}
2、為CGID_IWebBrowser定義一個(gè)GUID
必須定義CGI_IWebBrowser的GUID以通知MSHTML如何來(lái)處理你的命令I(lǐng)D。在.NET中實(shí)現如下:
private Guid cmdGuid = new Guid("ED016940-BD5B-11CF-BA4E-00C04FD70816");
private enum MiscCommandTarget { Find = 1, ViewSource, Options }
3、調用Exec()方法
注意,下列三個(gè)過(guò)程成功調用Exec()的前提是,已經(jīng)存在名為webBrowser的瀏覽器控件的被包容實(shí)例。
private mshtml.HTMLDocument GetDocument()
{
try
{
mshtml.HTMLDocument htm = (mshtml.HTMLDocument)axWebBrowser2.Document;
return htm;
}
catch
{
throw (new Exception("不能從WebBrowser控件中獲取文件對象"));
}
}
//查看源碼的方法
public void ViewSource()
{
IOleCommandTarget cmdt;
Object o = new object();
try
{
cmdt = (IOleCommandTarget)GetDocument();
cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.ViewSource,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
public void Find()
{
IOleCommandTarget cmdt;
Object o = new object();
try
{
cmdt = (IOleCommandTarget)GetDocument();
cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Find,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
}
catch(Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message);
}
}
//顯示“選項”對話(huà)框的方法
public void InternetOptions()
{
IOleCommandTarget cmdt;
Object o = new object();
try
{
cmdt = (IOleCommandTarget)GetDocument();
cmdt.Exec(ref cmdGuid, (uint)MiscCommandTarget.Options,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
}
catch
{
// 注意:因為該過(guò)程相應的CMDID是在Internet Explorer處理
// ,所以此處的異常代碼塊將總被激活,即使該對話(huà)框及其操作成功。
//當然,你可以通過(guò)瀏覽器選擇設置來(lái)禁止這種錯誤的出現。
//不過(guò),即使出現這種提示,對你的主機也無(wú)任何損害。
}
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Visual C#開(kāi)發(fā)瀏覽器過(guò)程淺析 - 51CTO.COM
重寫(xiě) WebBrowser 獲取 網(wǎng)絡(luò )連接錯誤信息
Implementing a PopUp blocker into a WebBrowse...
C#查看內存
winmm.dll 函數詳細引用方法(C#)
C#讀取硬盤(pán)序列號
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久