【发布时间】:2015-10-30 19:18:29
【问题描述】:
问题:我正在编写一个 Word 2013 加载项/插件/VSTO,需要拦截从/到我的插件所在的 Word 实例的拖放事件跑步。
解决方案:我正在尝试使用RegisterDragDrop function 和IDropTarget 的实现来传递到寄存器函数。不幸的是,我的 IDropTarget 实现中的所有事件都没有触发。我猜我遗漏了一些东西,或者这可能根本无法通过插件实现。
问题:
- 如果可能,我应该将什么句柄传递给 RegisterDragDrop 方法?是插件的句柄吗? MS-Word 实例本身的句柄?
- 如果这是不可能的,使用Windows Procedures(挂钩Windows 调用)会是一个潜在的解决方案吗?
这是我的代码:
NativeMethods.cs:
// See: http://msdn.microsoft.com/en-us/library/windows/desktop/ms678405(v=vs.85).aspx
[DllImport("ole32.dll")]
public static extern int RegisterDragDrop(IntPtr hwnd, IDropTarget pDropTarget);
这个AddIn.cs:
private void ThisAddIn_Startup(object sender, EventArgs e)
{
int temp = 0;
Process[] pWords = Process.GetProcessesByName("WINWORD");
foreach (Process process in pWords)
{
temp = process.Id;
}
NativeMethods.RegisterDragDrop(Process.GetProcessById(temp).Handle, new MyDropTarget())
}
MyDropTarget.cs:
public class MyDropTarget : IDropTarget
{
public void OnDragDrop(DragEventArgs e)
{
throw new NotImplementedException();
}
public void OnDragEnter(DragEventArgs e)
{
throw new NotImplementedException();
}
public void OnDragLeave(EventArgs e)
{
throw new NotImplementedException();
}
public void OnDragOver(DragEventArgs e)
{
throw new NotImplementedException();
}
}
【问题讨论】:
标签: c# .net ms-word drag-and-drop vsto