如何禁用默认的双击和右键单击PowerPoint事件功能
本文关键字:单击 PowerPoint 事件 功能 右键 何禁用 默认 双击 | 更新日期: 2023-09-27 18:01:57
在我使用VSTO的PowerPoint插件中,我正在实现一个Application-level Mouse Hook
来捕获鼠标事件,如双击,右键单击,鼠标over等,通过使用从Codeplex下载的MouseKeyboardActivityMonitor.dll
。我这样做的原因是因为PowerPoint没有鼠标相关的事件可听,并且它给出的事件在PowerPoint的编辑模式下不会触发。
在我的插件中,当用户单击图表时,会出现一个菜单,允许用户在图表上执行各种功能。一切正常。我已经捕获了鼠标事件并显示了自定义菜单,但是当菜单在执行某些操作后关闭时出现了问题,屏幕上出现了PowerPoint的默认菜单。
示例:当用户双击图表时,我像这样显示表单菜单。
//Listening to the MouseDoubleClick event
MyMouseHookListener.MouseDoubleClick += MyMouseHookListener_MouseDoubleClick;
//MouseDoubleClickEvent
void MyMouseHookListener_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
FormMenu.ShowDialog(); //Displaying menu
}
这可以正常工作,但是当用户关闭表单时,会出现默认的PowerPoint Charts双击菜单。其他鼠标事件也存在同样的问题。
如何禁用PowerPoint的事件菜单?
更新:
有一个名为Cancel
的bool
属性是由PowerPoint的WindowBeforeDoubleClick
和WindowBeforeRightClick
事件提供的。如果设置为true
,则取消事件触发时PowerPoint执行的默认动作。我怎么能访问这个属性在我的MouseHook
事件?
MouseKeyboardActivityMonitor
有几个可用的事件。对于鼠标下移事件,您可以选择收听MouseDown
或MouseDownExt
。后者在MouseEventExtArgs
参数中为您提供了一些额外的选项,例如Handled
属性。如果将此设置为true,则事件将不会进一步传播。
对于MouseDoubleClick
事件,没有扩展事件可用。因此,我建议您通过使用MouseDownExt
侦听器并计算已发生的单击次数来实现自己的双击侦听器。
public void Initialize() {
// Initialize your listener and set up event listeners
MyMouseHookListener = new MouseHookListener(new AppHooker()) {Enabled = true};
MyMouseHookListener.MouseDownExt += MyMouseHookListenerOnMouseDownExt;
// UNDONE Delete when testing is done; included to show that the listener is never called
MyMouseHookListener.MouseDoubleClick += MyMouseHookListenerOnMouseDoubleClick;
}
private static void MyMouseHookListenerOnMouseDoubleClick(object sender, MouseEventArgs mouseEventArgs)
{
// NOTE: This listener should never be called
Debug.Print("Mouse double-click!");
}
private static void MyMouseHookListenerOnMouseDownExt(object sender, MouseEventExtArgs mouseEventExtArgs)
{
Debug.Print("Mouse down. Number of clicks: {0}", mouseEventExtArgs.Clicks);
if (mouseEventExtArgs.Clicks == 2)
{
// TODO Insert your double-click code here
mouseEventExtArgs.Handled = true;
}
}
为了详尽起见,您可能还应该测试它是已被单击的左按钮还是右按钮,您可以通过检查MouseEventExtArgs.Button
属性来确定。右双击现在将被视为双击,但是,据我所知,这类似于最初的MouseDoubleClick
事件。