📄 browser.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 + -