protected virtual TabPageEx OverTab() { TabPageEx over = null; var pt = PointToClient(Cursor.Position); var mouseInfo = new User32.TCHITTESTINFO(pt, User32.TabControlHitTest.TCHT_ONITEM); var currentTabIndex = User32.SendMessage(Handle, User32._TCM_HITTEST, IntPtr.Zero, ref mouseInfo); if (currentTabIndex > -1) { var currentTabRct = GetTabRect(currentTabIndex); if (currentTabIndex == 0) currentTabRct.X += _tabHOffset; if (_alignments == TabAlignments.Top) currentTabRct.Y += 3; else currentTabRct.Y -= 3; if (currentTabRct.Contains(pt)) over = TabPages[currentTabIndex] as TabPageEx; } return over; }
protected override bool GetHitTest(Point point) { ISelectionService _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); if (_selectionService != null) { object selectedObject = _selectionService.PrimarySelection; if (selectedObject != null && selectedObject.Equals(this.Control)) { Point p = this.Control.PointToClient(point); User32.TCHITTESTINFO hti = new User32.TCHITTESTINFO(p, User32.TabControlHitTest.TCHT_ONITEM); Message m = new Message(); m.HWnd = this.Control.Handle; m.Msg = User32._TCM_HITTEST; IntPtr lParam = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(hti)); System.Runtime.InteropServices.Marshal.StructureToPtr(hti, lParam, false); m.LParam = lParam; base.WndProc(ref m); System.Runtime.InteropServices.Marshal.FreeHGlobal(lParam); if (m.Result.ToInt32() != -1) return hti.flags != User32.TabControlHitTest.TCHT_NOWHERE; } } return false; }