如何打造标签式IE浏览器(C#)

发布时间:2009年07月15日      浏览次数:642 次
1,看看效果图
图一:
http://www.cnblogs.com/images/cnblogs_com/zhouyinhui/Surfer_part.PNG
图二:
http://www.cnblogs.com/images/cnblogs_com/zhouyinhui/Surfer.PNG
2,关于Browser控件
如果您用的IDE是VisualStudio 2005, 那么您会发现,上面有个WebBrowser控件,请 不要 使用该控件来开发这个浏览器(原因是它缺少了很多参数,将使您的工作在中途陷入困境)
请使用axWebBrowser控件。在VisualStudio的工具箱中,右击鼠标 -----> 选择项 -----> Com组件 -------> "Microsoft Web 浏览器", 然后该控件就被添加到工具箱了.
3,导航到指定网页
导航函数为Navigate(String),使用它打开指定的网页
4,“在新窗口中打开”
首次创建网页浏览器时,都会为这样一个问题而郁闷:当“在新窗口中打开”时,新弹出的页面将在您系统默认的浏览器中打开,而不是在你所编写的浏览器中。这也是为什么不使用VisualStudio2005的WebBrowser控件的原因之一。
注意到axWebBrowser控件的NewWindow2事件,参数DWebBrowserEvents2_NewWindow2Event e 有一个ppDisp字段(VisualStudio2005的WebBrowser控件没有该字段), 设置e.ppDisp = myBrowser.Application; 就可以了。其中myBrowser只的是您要在其中打开网页的那个axWebBorwser对象。
NewWindow3事件只支持XP sp2以后的版本。
5,“前进”与“后退”
它们分别对应控件的GoBack()和GoForward()函数。
但,如何判断但前可否前进或后退?(axWebBrowser控件没有WebBrowser控件的CanGoBack与CanGoForward属性)。
注意到,axWebBrowser控件的CommandStateChange事件,参数DWebBrowserEvents2_CommandStateChangeEvent e有两个字段e.command和e.enable。 e.command: 值为1时针对前进按钮,值为2时针对后退按钮;e.enable:表明所针对的按钮当前是否可用。您可以根据此来启用或停用“前进”“后退”按钮。
6,“页面另存为”,“打印”,“打印预览”,“查找”等
它们对应axWebBrowser的同一个函数ExecWB( ) ,只是传入的参数不同而已。
7,“Internet选项”,“参看源文件”
在这之前,您应该添加对“msHtml.dll”的引用,添加引用-----> Com ---->"microsoft HTML object library"
  然后定义定义 IOleCommandTarget 接口:
[ComImport, Guid("b722bccb-4e68-101b-a2bc-00aa00404770"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IOleCommandTarget
{
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);
}
 并定义一个函数来取得axWebBrowser对象的当前文档(mshtml.HTMLDocument对象):
/**//// <summary>
/// 获取当前的HtmlDocument对象
/// </summary>
/// <returns></returns>
private mshtml.HTMLDocument GetCurrentHtmlDocument()
{
mshtml.HTMLDocument doc = null;
AxWebBrowser browser = this.GetCurrentBrowser();
if (browser != null)
{
doc = browser.Document as mshtml.HTMLDocument;
}
return doc;
}
注意mshtml.HTMLDocument别忘记加mshtml限定,否则会与System.Windows.Forms.HTMLDocment产生歧义。
以及一个枚举:
private enum MiscCommandTarget
{
Find = 1,
ViewSource,
Options
}
然后我们的查找函数的函数体就可以这样写了:
//查找
mshtml.HTMLDocument doc = this.GetCurrentHtmlDocument();
if (doc != null)
{
IOleCommandTarget cmdTarget = doc as IOleCommandTarget;
Object o = new object();
try
{
cmdTarget.Exec(ref cmdGuid, (uint)MiscCommandTarget.Find,
(uint)SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, ref o, ref o);
}
catch
{
}
}
8,“收藏夹”
“收藏夹”,没有必要去调用API,您完全可以读取“C:\Documents and Settings\UserName\Favorites”下的文件夹和文件来打造您自己的个性收藏夹
收藏夹路径:string path = Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
   收藏夹文件,也就是收藏夹目录下的那些快捷方式,其后缀名为“.url”,虽然您在操纵系统中中看不到其后缀。其实际为一个纯文本文件,将它拖到记事本中,可以看到其内容,比如:
[InternetShortcut]
URL=http://zhouyinhui.cnblogs.com/
Modified=
IconFile=
IconIndex=0
有了这些知识,您完全可以任意操纵“收藏夹”了。
另外,如果您希望当收藏夹中文件或文件夹有任何改动时,你的程序都能自动发现,并做出相应反应,那么请注意一个叫做“FileSystemWatcher”的控件。
文章来源:http://hi.baidu.com/1shome/blog/item/d9b4ae50eaaba6581038c2de.html
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!