Click here to Skip to main content
15,886,518 members
Articles / Multimedia / GDI+

Pretty IE Toolbar in C#

Rate me:
Please Sign up or sign in to vote.
4.89/5 (39 votes)
9 Sep 2008CPOL5 min read 173.5K   4.8K   121  
The article describes the work principles and ways of use of IEToolbarEngine. This is a toolbar for Internet Explorer, which has a reusable architecture.
//	This file is a part of the Command Prompt Explorer Bar project.
// 
//	Copyright Pavel Zolnikov, 2002
//
//			declarations of some COM interfaces and structues

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace BandObjectLib
{

	abstract class ExplorerGUIDs
	{
		public static readonly Guid IID_IWebBrowserApp = new Guid("{0002DF05-0000-0000-C000-000000000046}");
		public static readonly Guid IID_IUnknown =		 new Guid("{00000000-0000-0000-C000-000000000046}");
	}

	[Flags]
	public enum BrowserNavConstants 
	{
		navOpenInNewWindow = 0x1,
        navOpenInBackgroundTab = 0x1000,
		navNoHistory = 0x2,
		navNoReadFromCache = 0x4,
		navNoWriteToCache = 0x8,
		navAllowAutosearch = 0x10,
		navBrowserBar = 0x20,
		navHyperlink = 0x40
	}

	[Flags]
	public enum DBIM : uint
	{
		MINSIZE   =0x0001,
		MAXSIZE   =0x0002,
		INTEGRAL  =0x0004,
		ACTUAL    =0x0008,
		TITLE     =0x0010,
		MODEFLAGS =0x0020,
		BKCOLOR   =0x0040
	}

	[Flags]
	public enum DBIMF : uint
	{
		NORMAL = 0x0001,
		FIXED = 0x0002,
		FIXEDBMP = 0x0004,
		VARIABLEHEIGHT = 0x0008,
		UNDELETEABLE = 0x0010,
		DEBOSSED = 0x0020,
		BKCOLOR = 0x0040,
		USECHEVRON = 0x0080,
		BREAK = 0x0100,
		ADDTOFRONT = 0x0200,
		TOPALIGN = 0x0400,
		NOGRIPPER = 0x0800,
		ALWAYSGRIPPER = 0x1000,
		NOMARGINS = 0x2000
	}

	[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
	public struct DESKBANDINFO
	{
		public DBIM 		dwMask;
		public Point	    ptMinSize;
		public Point		ptMaxSize;
		public Point		ptIntegral;
		public Point		ptActual;
		[MarshalAs(UnmanagedType.ByValTStr, SizeConst=255)]
		public String		wszTitle;
		public DBIMF			dwModeFlags;
		public Int32		crBkgnd;
	};

	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")] 
	public interface IObjectWithSite
	{
		void SetSite([In ,MarshalAs(UnmanagedType.IUnknown)] Object pUnkSite);
		void GetSite(ref Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out Object ppvSite);
	}

	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("00000114-0000-0000-C000-000000000046")] 
	public interface IOleWindow
	{
		void GetWindow(out System.IntPtr phwnd);   
		void ContextSensitiveHelp([In] bool fEnterMode);
	}

	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("012dd920-7b26-11d0-8ca9-00a0c92dbfe8")] 
	public interface IDockingWindow
	{
		void GetWindow(out System.IntPtr phwnd);   
		void ContextSensitiveHelp([In] bool fEnterMode);

		void ShowDW([In] bool fShow);
		void CloseDW([In] UInt32  dwReserved);
		void ResizeBorderDW(
			IntPtr prcBorder,
			[In, MarshalAs(UnmanagedType.IUnknown)] Object punkToolbarSite,
			bool fReserved);
	}


	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("EB0FE172-1A3A-11D0-89B3-00A0C90A90AC")] 
	public interface IDeskBand
	{
		void GetWindow(out System.IntPtr phwnd);   
		void ContextSensitiveHelp([In] bool fEnterMode);

		void ShowDW([In] bool fShow);
		void CloseDW([In] UInt32  dwReserved);
		
		void ResizeBorderDW(
			IntPtr prcBorder,
			[In, MarshalAs(UnmanagedType.IUnknown)] Object punkToolbarSite,
			bool fReserved);

		void GetBandInfo(
			UInt32 dwBandID,
			UInt32 dwViewMode,
			ref DESKBANDINFO pdbi);
	}



	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("0000010c-0000-0000-C000-000000000046")]
	public interface IPersist
	{
		void GetClassID(out Guid pClassID);
	}

	

	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("00000109-0000-0000-C000-000000000046")]
    public interface IPersistStream : IPersist
	{
		new void GetClassID(out Guid pClassID);

        [PreserveSig]
		int IsDirty ();

        void Load ([In] System.Runtime.InteropServices.ComTypes.IStream pStm);

        //, MarshalAs (UnmanagedType.Interface)
        void Save ([In] System.Runtime.InteropServices.ComTypes.IStream pStm,
			[In, MarshalAs(UnmanagedType.Bool)] bool fClearDirty);

		void GetSizeMax ([Out] out long pcbSize);
	}


	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
	public interface _IServiceProvider
	{
		void QueryService(
			ref Guid guid, 
			ref Guid riid, 
			[MarshalAs(UnmanagedType.Interface)] out Object Obj);
	}


	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("68284faa-6a48-11d0-8c78-00c04fd918b4")]
	public interface IInputObject
	{
		void UIActivateIO(Int32 fActivate, ref MSG  msg);
		
		[PreserveSig]
		//[return:MarshalAs(UnmanagedType.Error)]
		Int32 HasFocusIO();

		[PreserveSig]
		Int32 TranslateAcceleratorIO(ref MSG msg);
	}

	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("f1db8392-7331-11d0-8c99-00a0c92dbfe8")]
	public interface IInputObjectSite
	{
		[PreserveSig]
		Int32 OnFocusChangeIS( [MarshalAs(UnmanagedType.IUnknown)] Object punkObj, Int32 fSetFocus);
	}

	public struct POINT
	{
		public Int32		x;
		public Int32		y;
	}

	public struct MSG 
	{
		public IntPtr		hwnd;
		public UInt32		message;
		public UInt32		wParam;
		public Int32		lParam;
		public UInt32		time;
		public POINT		pt;
	}

}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Russian Federation Russian Federation
Alexandr Golovanov is a .NET developer at KB_Soft Group, an offshore software development company located in Russia, Novosibirsk. Here he has worked
on various .NET projects.

Comments and Discussions