在 VSTO Addin 中获取 IWin32Window Parent Handle to Center saveFileDialog
Get IWin32Window Parent Handle in VSTO Addin to Center saveFileDialog
我有一个 Outlook 2013 VSTO 插件。我试图将我的 saveFileDialog 放在父级的中心。我读到您可以使用 IWin32Window 句柄重载 ShowDialog() 方法。我找不到任何示例来说明如何获取此 IWin32Window 句柄。我怎样才能获得 Outlook 的 IWin32Window 句柄,以便我可以将它传递给 ShowDialog() 并将 saveFileDialog() 置于父 window 的中心。
据我了解,仅传递句柄是不够的。似乎还有一个额外的步骤,但我一辈子都找不到。
如果有人能提供一个示例,说明如何捕获句柄,然后将 window 置于父对象的中心以获取 saveFileDialog(),那将是一个巨大的帮助。
谢谢
您需要创建 IWin32Window 接口的实例以将其传递给窗体的 Show 或 ShowDialog 方法 class。例如,您可以使用以下代码:
public class WindowHandle : System.Windows.Forms.IWin32Window
{
public WindowHandle(IntPtr handle)
{
_hwnd = handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
要获得 window 句柄,您可以将 Explorer 或 Inspector class 的实例转换为 IOleWindow interface. The GetWindow 方法允许检索 window 的句柄。
我有一个 Outlook 2013 VSTO 插件。我试图将我的 saveFileDialog 放在父级的中心。我读到您可以使用 IWin32Window 句柄重载 ShowDialog() 方法。我找不到任何示例来说明如何获取此 IWin32Window 句柄。我怎样才能获得 Outlook 的 IWin32Window 句柄,以便我可以将它传递给 ShowDialog() 并将 saveFileDialog() 置于父 window 的中心。
据我了解,仅传递句柄是不够的。似乎还有一个额外的步骤,但我一辈子都找不到。
如果有人能提供一个示例,说明如何捕获句柄,然后将 window 置于父对象的中心以获取 saveFileDialog(),那将是一个巨大的帮助。
谢谢
您需要创建 IWin32Window 接口的实例以将其传递给窗体的 Show 或 ShowDialog 方法 class。例如,您可以使用以下代码:
public class WindowHandle : System.Windows.Forms.IWin32Window
{
public WindowHandle(IntPtr handle)
{
_hwnd = handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
要获得 window 句柄,您可以将 Explorer 或 Inspector class 的实例转换为 IOleWindow interface. The GetWindow 方法允许检索 window 的句柄。