亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? toolbarex.cs

?? chaoshi guan li xitong
?? CS
?? 第 1 頁 / 共 3 頁
字號:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Drawing.Text;
using System.Diagnostics;
using System.Security;
using UtilityLibrary.Collections;
using UtilityLibrary.Win32;
using UtilityLibrary.General;
using UtilityLibrary.WinControls;
using UtilityLibrary.Menus;

namespace UtilityLibrary.CommandBars
{
	
	public enum BarType
	{
		ToolBar = 0,
		MenuBar = 1
	}
	
	/// <summary>
	/// Summary description for ToolBarEx.
	/// </summary>
	public class ToolBarEx : System.Windows.Forms.Control, IChevron
	{
		
		ToolBarItemCollection items = new ToolBarItemCollection();
		ToolBarItem[] handledItems = new ToolBarItem[0];
		bool[] handledItemsVisible = new bool[0];
		ChevronMenu chevronMenu = new ChevronMenu();
		BarType barType = BarType.ToolBar;
		const int DROWPDOWN_ARROW_WIDTH = 14;
		const int MARGIN = 3;
		const int MENUTEXT_MARGIN = 8;
		ImageList imageList = null;
		bool bGotIsCommonCtrl6 = false;
		bool isCommonCtrl6 = false;

		// To be used only when we have a menubar type
		enum State 
		{ 
			None, 
			Hot, 
			HotTracking 
		}
		State state = State.None;
		State lastState = State.None;
		Point lastMousePosition = new Point(0, 0);
		int trackHotItem = -1;
		int trackNextItem = -1;
		bool trackEscapePressed = false;
		IntPtr hookHandle = IntPtr.Zero;
		bool doKeyboardSelect = false;
		bool useNewRow = true;
		
		public ToolBarEx()
		{
			InitializeToolBar();
		}

		public ToolBarEx(bool useNewRow)
		{
			InitializeToolBar();
			this.useNewRow = useNewRow;
		}

		public ToolBarEx(BarType type)
		{
			barType = type;
			InitializeToolBar();
		}

		public ToolBarEx(BarType type, bool useNewRow)
		{
			barType = type;
			InitializeToolBar();
			this.useNewRow = useNewRow;
		}

		private void InitializeToolBar()
		{
			// We'll let the toolbar to send us messages for drawing
			SetStyle(ControlStyles.UserPaint, false);
			TabStop = false;
			// Always on top
			Dock = DockStyle.Top;
			Attach();
		}


		~ToolBarEx()
		{
			Detach();
		}

		void Attach()
		{
			items.Changed += new EventHandler(Items_Changed);
			
			int count = Items.Count;
			handledItems = new ToolBarItem[count];
			handledItemsVisible = new bool[count];

			for (int i = 0; i < count; i++)
			{
				ToolBarItem item = Items[i];
				item.Changed += new EventHandler(Item_Changed);
				handledItems[i] = item;
				handledItemsVisible[i] = item.Visible;
			}
		}

		void Detach()
		{
			foreach (ToolBarItem item in handledItems)
			{
				item.Changed -= new EventHandler(Item_Changed);
			}
			
			handledItems = null;
			handledItemsVisible = null;
			items.Changed -= new EventHandler(Items_Changed);

		}

		public bool UseNewRow
		{
			get { return useNewRow; }
		}
			
		public ToolBarItemCollection Items
		{
			get { return items; }
		}

		protected override Size DefaultSize
		{
			get { return new Size(1, 1); }
		}

		public BarType BarType
		{
			get { return barType; }

		}

		private bool IsCommonCtrl6()
		{
			// Cache this value for efficenty
			if ( bGotIsCommonCtrl6 == false )
			{			
				DLLVERSIONINFO dllVersion = new DLLVERSIONINFO();
				// We are assummng here that anything greater or equal than 6
				// will have the new XP theme drawing enable
				dllVersion.cbSize = Marshal.SizeOf(typeof(DLLVERSIONINFO));
				WindowsAPI.GetCommonControlDLLVersion(ref dllVersion);
				bGotIsCommonCtrl6 = true;
				isCommonCtrl6 = (dllVersion.dwMajorVersion >= 6);
			}
			return isCommonCtrl6;
		}


		protected override void CreateHandle() 
		{
			// Make sure common control library initilizes toolbars and rebars
			if ( !RecreatingHandle )
			{
				INITCOMMONCONTROLSEX icex = new INITCOMMONCONTROLSEX();
				icex.dwSize = Marshal.SizeOf(typeof(INITCOMMONCONTROLSEX));
				icex.dwICC = (int)(CommonControlInitFlags.ICC_BAR_CLASSES | CommonControlInitFlags.ICC_COOL_CLASSES);
				WindowsAPI.InitCommonControlsEx(icex);
			}
			
			base.CreateHandle();
		}
	
		protected override CreateParams CreateParams
		{
			get
			{
				CreateParams createParams = base.CreateParams;
				createParams.ClassName = WindowsAPI.TOOLBARCLASSNAME;
				createParams.ExStyle = 0;
				// Windows specific flags
				createParams.Style = (int)(WindowStyles.WS_CHILD | WindowStyles.WS_VISIBLE |
					WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS);
				// Common Control specific flags
				createParams.Style |= (int)(CommonControlStyles.CCS_NODIVIDER | CommonControlStyles.CCS_NORESIZE | 
					CommonControlStyles.CCS_NOPARENTALIGN);
				// ToolBar specific flags
				createParams.Style |= (int)(ToolBarStyles.TBSTYLE_TOOLTIPS | ToolBarStyles.TBSTYLE_FLAT | ToolBarStyles.TBSTYLE_TRANSPARENT);
				if (HasText()) createParams.Style |= (int)ToolBarStyles.TBSTYLE_LIST;
				
				return createParams;
			}
		}

		private bool HasText()
		{

			for (int i = 0; i < items.Count; i++)
			{
				// check if we need to make this toolbar TBSTYLE_LIST
				if ( items[i].Text != null && items[i].Text != string.Empty )
					return true;
			}
			return false;

		}
	
		protected override void OnHandleCreated(EventArgs e)
		{
			// Send message needed for the toolbar to work properly before any other messages are sent
			WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_BUTTONSTRUCTSIZE, Marshal.SizeOf(typeof(TBBUTTON)), 0);
			// Setup extended styles
			int extendedStyle = (int)(ToolBarExStyles.TBSTYLE_EX_HIDECLIPPEDBUTTONS | 
				ToolBarExStyles.TBSTYLE_EX_DOUBLEBUFFER );
			if ( BarType == BarType.ToolBar ) extendedStyle |= (int)ToolBarExStyles.TBSTYLE_EX_DRAWDDARROWS;
			WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_SETEXTENDEDSTYLE, 0, extendedStyle);
			RealizeItems();
			base.OnHandleCreated(e);
		}

		protected override void OnMouseMove(MouseEventArgs e)
		{
			if ( barType == BarType.MenuBar)
			{
				Point point = new Point(e.X, e.Y);
				if ( state == State.Hot )
				{
					int index = HitTest(point);
					if ((IsValid(index)) && ( point != lastMousePosition))
						SetHotItem(index);
					return;
				}
				lastMousePosition = point;
			}
			
			base.OnMouseMove(e);
		}

		protected override void OnMouseDown(MouseEventArgs e)
		{
			if ( barType == BarType.MenuBar)
			{
				if ((e.Button == MouseButtons.Left) && (e.Clicks == 1))
				{
					Point point = new Point(e.X, e.Y);
					int index = HitTest(point);
					if (IsValid(index))
					{
						TrackDropDown(index);
						return;
					}
				}
			}
			
			base.OnMouseDown(e);
		}

		bool IsValid(int index)
		{
			int count = WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_BUTTONCOUNT, 0, 0);
			return ((index >= 0) && (index < count));
		}

		int HitTest(Point point)
		{
			POINT pt = new POINT();
			pt.x = point.X;
			pt.y = point.Y;
			int hit = WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_HITTEST, 0, ref pt);
			if (hit > 0)
			{
				point = PointToScreen(point);
				Rectangle bounds = RectangleToScreen(new Rectangle(0, 0, Width, Height));
				if ( !bounds.Contains(point) ) return -1;
			}
			return hit;
		}

		int GetNextItem(int index)
		{
			if (index == -1) throw new Exception();
			int count = WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_BUTTONCOUNT, 0, 0);
			index++;
			if (index >= count) index = 0;
			return index;
		}
			
		int GetPreviousItem(int index)
		{
			if (index == -1) throw new Exception();
			int count = WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_BUTTONCOUNT, 0, 0);
			index--;
			if (index < 0) index = count - 1;
			return index;
		}

		int GetHotItemIndex()
		{
			return WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_GETHOTITEM, 0, 0);
		}
		
		void SetHotItem(int index)
		{
			WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_SETHOTITEM, index, 0);
		}

		void TrackDropDown(int index)
		{
				
			while ( index >= 0 )
			{
				trackNextItem = -1;
		
				BeginUpdate();

				// Raise event
				ToolBarItem item = (ToolBarItem)items[index];
				item.RaiseDropDown();
				// Item state
				WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_PRESSBUTTON, index, -1);

				// Trick to get the first menu item selected
				if ( doKeyboardSelect )
				{
					WindowsAPI.PostMessage(Handle, (int)Msg.WM_KEYDOWN, (int) Keys.Down, 1);
					WindowsAPI.PostMessage(Handle, (int)Msg.WM_KEYUP, (int) Keys.Down, 1);
				}
				doKeyboardSelect = false;
				SetState(State.HotTracking, index);

				// Hook
				WindowsAPI.HookProc hookProc = new WindowsAPI.HookProc(DropDownHook);
				GCHandle hookProcHandle = GCHandle.Alloc(hookProc);
				hookHandle = WindowsAPI.SetWindowsHookEx((int)WindowsHookCodes.WH_MSGFILTER, 
					hookProc, IntPtr.Zero, WindowsAPI.GetCurrentThreadId());
				if ( hookHandle == IntPtr.Zero ) throw new SecurityException();

				// Ask for position
				RECT rect = new RECT();
				WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_GETRECT, index, ref rect);
				Point position = new Point(rect.left, rect.bottom-1);
				
				EndUpdate();
				Update();
				CommandBarMenu menu = item.ToolBarItemMenu;
				if ( menu == null ) return;
				menu.Show(this, position);
								
				// Unhook		
				WindowsAPI.UnhookWindowsHookEx(hookHandle);
				hookProcHandle.Free();
				hookHandle = IntPtr.Zero;

				// Item state
				WindowsAPI.SendMessage(Handle, (int)ToolBarMessages.TB_PRESSBUTTON, index, 0);
				SetState(trackEscapePressed ? State.Hot : State.None, index);

				index = trackNextItem;
			}
		}

		void TrackDropDownNext(int index)
		{
			if (index != trackHotItem)
			{
				WindowsAPI.PostMessage(Handle, (int)Msg.WM_CANCELMODE, 0, 0);
				trackNextItem = index;
			}
		}

		IntPtr DropDownHook(int code, IntPtr wparam, IntPtr lparam) 
		{
			if (code == (int)MouseHookFilters.MSGF_MENU)
			{
				MSG msg = (MSG) Marshal.PtrToStructure(lparam, typeof(MSG));
				Message message = Message.Create(msg.hwnd, msg.message, msg.wParam, msg.lParam);
				if ( DropDownFilter(ref message) )
					return (IntPtr) 1;
			}
			return WindowsAPI.CallNextHookEx(hookHandle, code, wparam, lparam);
		}

		bool DropDownFilter(ref Message message)
		{
			if (state != State.HotTracking) throw new Exception();

			// comctl32 sometimes steals the hot item for unknown reasons.
			SetHotItem(trackHotItem);

			if (message.Msg == (int)Msg.WM_KEYDOWN)
			{
				Keys keyData = (Keys)(int) message.WParam | ModifierKeys;
				if ( keyData == Keys.Left || keyData == Keys.Right )
					doKeyboardSelect = true;
                
				if (keyData == Keys.Left)
				{
					TrackDropDownNext(GetPreviousItem(trackHotItem));
					return true;
				}

				// Only move right if there is no submenu on the current selected item.
				ToolBarItem item = items[trackHotItem];
				if ((keyData == Keys.Right) && ((item.ToolBarItemMenu.SelectedMenuItem == null) 
					|| (item.ToolBarItemMenu.SelectedMenuItem.MenuItems.Count == 0)))
				{
					TrackDropDownNext(GetNextItem(trackHotItem));
					return true;
				}

				if (keyData == Keys.Escape)
				{
					trackEscapePressed = true;
				}
			}
			else if ((message.Msg == (int)Msg.WM_MOUSEMOVE) || (message.Msg == (int)Msg.WM_LBUTTONDOWN))
			{
				Point point = new Point(((int) message.LParam) & 0xffff, ((int) message.LParam) >> 16);
				point = this.PointToClient(point);

				if (message.Msg == (int)Msg.WM_MOUSEMOVE)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲另类一二三四区| 中文字幕不卡三区| 亚洲色欲色欲www| 92精品国产成人观看免费| 综合久久久久综合| 最好看的中文字幕久久| 亚洲欧美一区二区三区国产精品| 欧美专区日韩专区| 欧美撒尿777hd撒尿| 国内久久婷婷综合| 亚洲免费毛片网站| 一区二区三区美女视频| 日韩欧美一区二区不卡| 波多野结衣一区二区三区| 日本成人在线不卡视频| 国产精品国产精品国产专区不蜜| 欧美美女bb生活片| 国产精品99久久久| 美女任你摸久久 | 日韩影院免费视频| 国产精品毛片高清在线完整版| 在线成人高清不卡| 久久综合狠狠综合| 日韩三级免费观看| 91精品国产色综合久久不卡蜜臀| 97精品国产97久久久久久久久久久久| 色94色欧美sute亚洲13| av电影天堂一区二区在线| 欧美在线播放高清精品| 欧美一区二区三区四区久久 | 亚洲国产精品精华液ab| 亚洲日本va午夜在线影院| 日本成人在线电影网| 成人伦理片在线| 国产精品一二三四| 欧美日韩专区在线| 久久精品一区二区三区四区| 欧美成人bangbros| 欧美大片一区二区三区| 中文字幕在线观看不卡| 国产精品久久久久久久裸模| 亚洲3atv精品一区二区三区| 亚洲午夜免费电影| 亚洲国产欧美日韩另类综合 | 美女免费视频一区| 91免费视频观看| 99免费精品视频| 日韩三级.com| 亚洲国产cao| 岛国精品在线观看| 亚洲精品一区二区三区精华液| 日韩欧美国产高清| 亚洲电影在线播放| 91亚洲精品久久久蜜桃| 日本一二三四高清不卡| 国产麻豆成人精品| www.亚洲免费av| 亚洲精品一区二区在线观看| 婷婷开心激情综合| 国产精品正在播放| 欧美电影免费观看高清完整版在 | 欧美日韩中字一区| 亚洲女与黑人做爰| av不卡在线观看| 国产精品午夜在线| 国产精品正在播放| 久久久精品欧美丰满| 中文字幕一区在线| 成人亚洲一区二区一| 国产三级精品视频| 亚洲一区在线观看免费| 美女爽到高潮91| 91精品婷婷国产综合久久 | 国产精品人人做人人爽人人添| 久久精品噜噜噜成人88aⅴ| 国产河南妇女毛片精品久久久| 91亚洲大成网污www| 国产精品毛片久久久久久久 | 自拍偷自拍亚洲精品播放| 成人av一区二区三区| 91精品国产入口在线| 天天av天天翘天天综合网色鬼国产| 欧美午夜片在线观看| 久久精品网站免费观看| 国产一区二区三区在线观看免费| 精品国精品国产尤物美女| 国产精品亚洲视频| 亚洲欧美日韩国产综合| 欧美色网站导航| 欧美aaa在线| 色狠狠一区二区三区香蕉| 亚洲精品国产品国语在线app| 激情综合色丁香一区二区| 色综合色综合色综合| 久久综合久久鬼色中文字| 国产aⅴ精品一区二区三区色成熟| 7777精品伊人久久久大香线蕉超级流畅 | 欧美男男青年gay1069videost| 国产日产亚洲精品系列| 国产91精品在线观看| 亚洲乱码中文字幕| 欧美日韩精品电影| 国产精品主播直播| 亚洲精品乱码久久久久久久久 | 免费看欧美美女黄的网站| 26uuu亚洲综合色| 91日韩在线专区| 丁香六月综合激情| 亚洲国产视频在线| 久久精品这里都是精品| 日韩精品一区二| 99精品视频在线播放观看| 天天av天天翘天天综合网| 亚洲大片一区二区三区| 图片区日韩欧美亚洲| 精品不卡在线视频| 色视频成人在线观看免| 精品在线播放免费| 亚洲美女电影在线| 精品国产乱码久久久久久蜜臀| 91污片在线观看| 久久超碰97中文字幕| 亚洲精品成人悠悠色影视| 精品黑人一区二区三区久久 | 欧美一区二区三区四区五区| 成人精品国产一区二区4080| 日韩福利视频导航| 亚洲视频免费在线| 国产欧美精品在线观看| 亚洲精品亚洲人成人网| 久久综合狠狠综合久久综合88| 欧美三级韩国三级日本一级| 成人黄页毛片网站| 国产乱子伦视频一区二区三区 | 九九国产精品视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 综合色天天鬼久久鬼色| 久久久久久久综合狠狠综合| 欧美一区二区三区思思人| 欧美四级电影在线观看| 色婷婷综合久久| 波多野结衣中文字幕一区| 国产成人亚洲综合a∨婷婷图片| 日韩电影在线观看一区| 亚洲小少妇裸体bbw| 一区二区视频在线| 国产精品久久久久久久久久免费看 | 国产精品久久久久7777按摩| 精品国产伦一区二区三区观看体验| 欧美挠脚心视频网站| 国产日韩欧美精品电影三级在线| 欧美人妇做爰xxxⅹ性高电影| 欧美在线视频全部完| av不卡一区二区三区| 91丨porny丨户外露出| 91视频在线观看免费| 91欧美一区二区| 欧美自拍丝袜亚洲| 欧美日韩综合在线| 这里只有精品视频在线观看| 91精品国产黑色紧身裤美女| 7777精品伊人久久久大香线蕉的 | 99国产精品99久久久久久| av在线一区二区三区| 成人丝袜18视频在线观看| 成人午夜电影久久影院| 91蝌蚪国产九色| 欧美日韩精品系列| 日韩西西人体444www| 国产日韩av一区二区| 一区二区三区在线高清| 天堂va蜜桃一区二区三区漫画版| 美腿丝袜亚洲综合| 国产成人在线电影| 欧美性videosxxxxx| 欧美成人a在线| 国产精品护士白丝一区av| 亚洲精品综合在线| 奇米精品一区二区三区在线观看 | 国内成人自拍视频| 成人一二三区视频| 欧美视频一区二区| 国产日韩精品一区二区三区| 一区二区三区欧美久久| 久久99国产乱子伦精品免费| av高清不卡在线| 日韩一级在线观看| 国产精品久久一级| 蜜臀av一区二区在线观看| 大胆欧美人体老妇| 欧美一区二区观看视频| 国产精品美女久久久久久2018 | 精品国产青草久久久久福利| 国产欧美精品国产国产专区 | 狠狠色丁香婷婷综合| 欧美中文字幕一区二区三区亚洲| 久久久久久亚洲综合| 亚洲综合小说图片| 不卡的av电影在线观看| 日韩精品一区二区三区视频在线观看|