【发布时间】:2014-01-31 02:48:20
【问题描述】:
我已经使用 WPF 为 Outlook 创建了一个加载项。一切正常,除了“耀斑”。当 WPF 窗口打开时,它不是以 Outlook 窗体为中心,而是以屏幕为中心打开。我将 WindowStartLocation 设置为 CenterOwner,但这似乎不起作用。
【问题讨论】:
我已经使用 WPF 为 Outlook 创建了一个加载项。一切正常,除了“耀斑”。当 WPF 窗口打开时,它不是以 Outlook 窗体为中心,而是以屏幕为中心打开。我将 WindowStartLocation 设置为 CenterOwner,但这似乎不起作用。
【问题讨论】:
在 Cory 的指导下,我的解决方案:
var sendToPulse = new Pulse_Outlook_Presentation.SendToPulse ();
var interopApplication = Globals.ThisAddIn.Application;
var x = (interopApplication.ActiveWindow ().Left + interopApplication.ActiveWindow ().Width / 2) - (sendToPulse.Width / 2);
var y = (interopApplication.ActiveWindow ().Top + interopApplication.ActiveWindow ().Height / 2) - (sendToPulse.Height / 2);
OutlookWin32Window parentWindow = new OutlookWin32Window (Globals.ThisAddIn.Application.ActiveWindow ());
sendToPulse.Left = x;
sendToPulse.Top = y;
【讨论】:
您应该能够获取对当前 Outlook 实例的引用,访问该实例的 Application 对象并获取窗口大小和位置(左、上),并进行一些数学运算以获取窗口的定位。
类似于:
Dim interopApplication As Outlook.Application = _
Me.ActiveExplorer().Application
With interopApplication.ActiveWindow
Dim _left = Me.Width - (.Width / 2)
Dim _top = Me.Height - (.Height / 2)
End With
这假设 Outlook 窗口位于第一台显示器上并已最大化。必须编写更多逻辑来处理其他突发事件
【讨论】:
遇到这个寻找 VBA 答案的最简单形式,其中应用程序是主机,我是当前表单的快捷方式。
Private Sub UserForm_Initialize()
ProgressFrame.Caption = ""
Me.Left = Application.ActiveWindow().Left + Application.ActiveWindow().Width / 2 - (Me.Width / 2)
Me.Top = Application.ActiveWindow().Top + Application.ActiveWindow().Height / 2 - (Me.Height / 2)
End Sub
【讨论】: