⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browser.cs

📁 c#源代码
💻 CS
字号:
/* ***********************************************************
 *
 * Help 2.0 Environment for SharpDevelop
 * Browser Control
 * Based on "HtmlViewPane.cs" by Mike Krueger
 *
 * ********************************************************* */
namespace HtmlHelp2Browser
{
	using System;
	using System.Drawing;
	using System.Runtime.InteropServices;
	using System.Windows.Forms;
	using ICSharpCode.SharpDevelop.Gui;
	using ICSharpCode.SharpDevelop.BrowserDisplayBinding;
	using ICSharpCode.SharpDevelop.Services;
	using HtmlHelp2;

	public class HtmlHelp2BrowserPane : AbstractViewContent
	{
		protected HtmlHelp2BrowserControl help2Browser;

		public override Control Control
		{
			get { return help2Browser; }
		}

		public override bool IsDirty
		{
			get
			{
				return false;
			}
			set {}
		}

		public override bool IsViewOnly
		{
			get
			{
				return true;
			}
		}

		public HtmlHelp2BrowserPane(string fileName)
		{
			help2Browser                           = new HtmlHelp2BrowserControl();
			help2Browser.AxWebBrowser.TitleChange += new DWebBrowserEvents2_TitleChangeEventHandler(TitleChange);
			if(fileName != null) this.Load(fileName);
			else this.Load("about:blank");
		}

		public override void Dispose()
		{
			help2Browser.Dispose();
		}

		public override void Load(string url)
		{
			help2Browser.Navigate(url);
			this.FileName = url;
		}

		public override void Save(string url)
		{
			Load(url);
		}

		void TitleChange(object sender, DWebBrowserEvents2_TitleChangeEvent e)
		{
			this.TitleName = e.text;
			this.FileName  = help2Browser.AxWebBrowser.LocationURL;
		}
	}

	public class HtmlHelp2BrowserControl : UserControl
	{
		AxWebBrowser axWebBrowser = null;
		TextBox urlTextbox        = new TextBox();
		bool isHandleCreated      = false;
		string lastUrl            = null;
		int zoomFactor            = 2;

		public AxWebBrowser AxWebBrowser
		{
			get { return axWebBrowser; }
		}

		protected override void Dispose(bool disposing)
		{
			base.Dispose(disposing);
			if(disposing) { axWebBrowser.Dispose(); }
		}

		public HtmlHelp2BrowserControl()
		{
			Size                           = new Size(800, 800);
			Dock                           = DockStyle.Fill;

			axWebBrowser                   = new AxWebBrowser();
			axWebBrowser.BeginInit();
			axWebBrowser.Dock              = DockStyle.Fill;
			axWebBrowser.HandleCreated    += new EventHandler(this.CreatedWebBrowserHandle);
			axWebBrowser.NewWindow2       += new DWebBrowserEvents2_NewWindow2EventHandler(this.NewBrowserWindow);
			axWebBrowser.StatusTextChange += new DWebBrowserEvents2_StatusTextChangeEventHandler(this.StatusBarChanged);
			axWebBrowser.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.DocumentComplete);
			axWebBrowser.EndInit();
			Controls.Add(axWebBrowser);

			Panel panel                    = new Panel();
			Controls.Add(panel);
			panel.Dock                     = DockStyle.Top;
			Label label                    = new Label();
			panel.Controls.Add(label);
			label.Text                     = "URL:";
			label.TextAlign                = ContentAlignment.MiddleLeft;
			label.Width                    = 30;
			panel.Controls.Add(urlTextbox);
			urlTextbox.Left                = label.Right + 3;
			urlTextbox.Width               = (panel.Width > 700)?700:panel.Width;
			urlTextbox.BorderStyle         = BorderStyle.FixedSingle;
			urlTextbox.KeyDown            += new KeyEventHandler(UrlTextboxKeyDown);
			SHAutoComplete(urlTextbox.Handle, (uint)AutoCompleteFlags.Default);

			panel.Height                   = urlTextbox.Height + 6;
			label.Height                   = panel.Height;
			urlTextbox.Top                 = panel.Top + (panel.Height / 2) - (urlTextbox.Height / 2);
		}

		private void CreatedWebBrowserHandle(object sender, EventArgs evArgs)
		{
			isHandleCreated = true;
			if (lastUrl != null) Navigate(lastUrl);
		}

		private void NewBrowserWindow(object sender, DWebBrowserEvents2_NewWindow2Event e)
		{
			HtmlHelp2BrowserPane help2Browser = new HtmlHelp2BrowserPane("");
			WorkbenchSingleton.Workbench.ShowView(help2Browser);
			help2Browser.WorkbenchWindow.SelectWindow();
			AxWebBrowser newBrowser           = (AxWebBrowser)((HtmlHelp2BrowserControl)help2Browser.Control).AxWebBrowser;
			e.ppDisp                          = newBrowser.Application;
			newBrowser.RegisterAsBrowser      = true;
		}

		private void StatusBarChanged(object sender, DWebBrowserEvents2_StatusTextChangeEvent e)
		{
			 IStatusBarService statusBarService = (IStatusBarService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IStatusBarService));
			 statusBarService.SetMessage(e.text);
		}

		private void DocumentComplete(object sender, DWebBrowserEvents2_DocumentCompleteEvent e)
		{
			try
			{
				object arg   = System.Reflection.Missing.Value;
				object dummy = 0;

				axWebBrowser.ExecWB(Interop.SHDocVw.OLECMDID.OLECMDID_ZOOM,
				                    Interop.SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER,
				                    ref arg,
				                    ref dummy);

				zoomFactor   = (int)dummy;
			}
			catch {}

			urlTextbox.Text = (string)e.uRL;
			ShowHelpBrowser.HighlightDocument();
		}

		private void UrlTextboxKeyDown(object sender, KeyEventArgs e)
		{
			if(e.KeyValue == 13 && urlTextbox.Text != null && urlTextbox.Text != "")
			{
				this.Navigate(urlTextbox.Text);
			}
		}

		#region published Toolbar Commands
		public void Navigate(string url)
		{
			if (!isHandleCreated)
			{
				lastUrl = url;
				return;
			}

			object arg = System.Reflection.Missing.Value;
			try
			{
				axWebBrowser.Navigate(url, ref arg, ref arg, ref arg, ref arg);
			}
			catch {}
		}

		public void GoBack()
		{
			try
			{
				axWebBrowser.GoBack();
			}
			catch {}
		}

		public void GoForward()
		{
			try
			{
				axWebBrowser.GoForward();
			}
			catch {}
		}

		public void StopLoadingSite()
		{
			try
			{
				axWebBrowser.Stop();
			}
			catch {}
		}

		public void RefreshSite()
		{
			try
			{
				object arg = 3;
				axWebBrowser.Refresh2(ref arg);
			}
			catch {}
		}

		public void ZoomText()
		{
			try
			{
				zoomFactor = (zoomFactor == 4)?0:zoomFactor+1;
				object zoomArg = zoomFactor;
				object dummy   = System.Reflection.Missing.Value;

				axWebBrowser.ExecWB(Interop.SHDocVw.OLECMDID.OLECMDID_ZOOM,
				                    Interop.SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_PROMPTUSER,
				                    ref zoomArg,
				                    ref dummy);
			}
			catch {}
		}
		#endregion

		#region AutoComplete@Win32API
		[DllImport("shlwapi.dll")]
		static extern int SHAutoComplete(IntPtr Handle, uint Flags);

		enum AutoCompleteFlags : uint
		{
			Default             = 0x00000000,
			FileSystem          = 0x00000001,
			UrlHistory          = 0x00000002,
			UrlMenu             = 0x00000004,
			UseTab              = 0x00000008,
			FileSystemOnly      = 0x00000010,
			UrlAll              = UrlHistory|UrlMenu,
			FileSystemDirs      = 0x00000020,
			AutoSuggestForceOn  = 0x10000000,
			AutoSuggestForceOff = 0x20000000,
			AutoAppendForceOn   = 0x40000000,
			AutoAppendForceOff  = 0x80000000
		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -