int OnMouseLLHook(int code, WM message, IntPtr state) { try { if (message == WM.LBUTTONDOWN) { var clientPos = virtualContextMenu.PointToClient(Cursor.Position); if (virtualContextMenu.Visible && virtualContextMenu.ClientRectangle.Contains(clientPos) == false) { virtualContextMenu.Hide(); } } if (message == WM.RBUTTONUP) { // コンテキストメニューを表示 virtualContextMenu.Items.Clear(); for (int i = 0; i < appGraph.edges.Count; i++) { AppEdge appEdge = appGraph.edges[i]; if (!IsValidEdge(appEdge, TriggerType.ContextMenu)) { continue; } var item = new ToolStripMenuItem(appEdge.ActionHandler.ContextMenuText); item.Click += (s, ee) => ExecuteActionHandler(appEdge); item.Invalidate(); virtualContextMenu.Items.Add(item); } if (virtualContextMenu.Items.Count >= 1) { ToolStripMenuItem[] itemList = new ToolStripMenuItem[virtualContextMenu.Items.Count]; for (int j = 0; j < virtualContextMenu.Items.Count; j++) { itemList[j] = virtualContextMenu.Items[j] as ToolStripMenuItem; } virtualContextMenu.Show(new Point(Cursor.Position.X, Cursor.Position.Y - 22 * virtualContextMenu.Items.Count)); } } return(CallNextHookEx(mouseHook, code, message, state)); } catch (Exception e) { Console.WriteLine(e); return(CallNextHookEx(mouseHook, code, message, state)); } }
private void CreateShortcutContextMenu() { RestoreShortcut(); _contextMenuShortcuts = new ContextMenuStrip(); _contextMenuShortcuts.Opening += (sender, args) => { _contextMenuShortcuts.Items.Clear(); _contextMenuShortcuts.Items.Add("Explorer", null, (o, eventArgs) => _explorerCleaner.OpenExplorer("")); _contextMenuShortcuts.Items.Add(new ToolStripSeparator()); var closedExplorers = _explorerCleaner.ClosedExplorers.OrderByDescending(x => x.IsFavorited) .ThenByDescending(x => x.LastUpdateDateTime).Take(10); foreach (var closedExplorer in closedExplorers) { var item = new ToolStripMenuItem(closedExplorer.LocationPath); item.Image = closedExplorer.IsFavorited ? Resources.favorite : null; item.Click += (o, eventArgs) => _explorerCleaner.OpenExplorer(closedExplorer); _contextMenuShortcuts.Items.Add(item); } if (_shortcuts.Length > 0) { _contextMenuShortcuts.Items.Add(new ToolStripSeparator()); foreach (var shortcutItem in _shortcuts) { _contextMenuShortcuts.Items.Add(shortcutItem.Name, null, (o, eventArgs) => shortcutItem.Exec()); } } args.Cancel = false; }; _contextMenuShortcuts.Closing += (sender, args) => { // 任意のクリックで閉じるが、カーソルがコンテキストメニューにあるときは閉じない(イベントが消えるので) if (args.CloseReason == ToolStripDropDownCloseReason.AppFocusChange && _contextMenuShortcuts.ClientRectangle.Contains( _contextMenuShortcuts.PointToClient(Cursor.Position))) { args.Cancel = true; } }; }
public void PerformClickOnContextMenu() { EmptyHandler del = delegate() { Point point = cMS_MatchedGestures.PointToClient(Cursor.Position); //Debug.WriteLine(string.Format("PerformClickOnContextMenu X: {0} Y: {1}", point.X, point.Y)); ToolStripItem item = cMS_MatchedGestures.GetItemAt(point); if (item == null) { point.Y -= 1; foreach (ContextMenuStrip contextMenu in m_cmsList) { point = contextMenu.PointToClient(Cursor.Position); item = contextMenu.GetItemAt(point); if (item != null) { break; } } } if (item != null) { ToolStripMenuItem menuItem = (ToolStripMenuItem)item; if (menuItem.DropDownItems.Count == 0) { item.PerformClick(); } } }; if (this.InvokeRequired) { this.Invoke(del); } else { del(); } }
protected virtual void OnShowContextMenu(ShowContextMenuEventArgs e) { var handler = ShowContextMenu; if (handler != null) { handler(e); if (e.ContextMenuToShow != null) { ContextMenuStrip toolStrip = (ContextMenuStrip)Control.FromHandle(Handle); Point client = toolStrip.PointToClient(Control.MousePosition); SourceItem = toolStrip.GetItemAt(client); previousItemBackColor = SourceItem.BackColor; SourceItem.BackColor = SystemColors.MenuHighlight; e.ContextMenuToShow.Closed -= restoreItemState; e.ContextMenuToShow.Closed += restoreItemState; keepOpen = true; e.ContextMenuToShow.Show(Control.MousePosition); keepOpen = false; } } }
private void CreateClipboardContextMenu() { _contextMenuClipboardHistories = new ContextMenuStrip(); _contextMenuClipboardHistories.Opening += (sender, args) => { _contextMenuClipboardHistories.Items.Clear(); var clipboardHistoriesItem = new ToolStripMenuItem("Clipboard Histories"); clipboardHistoriesItem.Enabled = false; _contextMenuClipboardHistories.Items.Add(clipboardHistoriesItem); _contextMenuClipboardHistories.Items.Add(new ToolStripSeparator()); foreach (var c in _clipboardItemQueue.Reverse()) { var item = new ToolStripMenuItem(c.ToString(), null, (o, eventArgs) => { Clipboard.SetText(c.GetText()); _contextMenuClipboardHistories.Close(ToolStripDropDownCloseReason.ItemClicked); SendCtrlV((IntPtr)_contextMenuClipboardHistories.Tag); }); item.ToolTipText = c.GetText(); _contextMenuClipboardHistories.Items.Add(item); _contextMenuClipboardHistories.Items.Add(new ToolStripSeparator()); } _contextMenuClipboardHistories.Items.RemoveAt(_contextMenuClipboardHistories.Items.Count - 1); }; _contextMenuClipboardHistories.Closing += (sender, args) => { // 任意のクリックで閉じるが、カーソルがコンテキストメニューにあるときは閉じない(イベントが消えるので) if (args.CloseReason == ToolStripDropDownCloseReason.AppFocusChange && _contextMenuClipboardHistories.ClientRectangle.Contains( _contextMenuClipboardHistories.PointToClient(Cursor.Position))) { args.Cancel = true; } }; }