VSTO Outlook:在撰写窗口弹出自定义通知



我有一个VSTO Outlook插件,我想弹出一个通知(浮动窗口)与自定义文本消息特定时间(例如5秒),然后自动消失。我想在撰写窗口中显示此通知。我怎样才能做到这一点呢?请举个例子。

已更新:我希望通知窗口是撰写窗口的子窗口。

29.06.2022更新:我做了以下的事情:

Outlook.Inspector currentInspector = this.Window as Outlook.Inspector;
IOleWindow ioleWnd = (IOleWindow)currentInspector;
ioleWnd.GetWindow(out IntPtr phwnd);
NativeWindow nativeWnd = new System.Windows.Forms.NativeWindow();
nativeWnd.AssignHandle(phwnd);

// frm is my notification window, borderless and without maximize, minimize and close buttons and without title bar.
Form frm = new Form();
frm.ControlBox = false;
frm.FormBorderStyle = FormBorderStyle.None;

NativeMethods.Rect rect = new NativeMethods.Rect();
NativeMethods.GetWindowRect(phwnd, ref rect);

frm.Left = rect.Right - 85;
frm.Top = rect.Bottom - 55;
frm.Width = 80;
frm.Height = 50;
frm.Location = new System.Drawing.Point(rect.Right - 85, rect.Bottom - 55);
frm.BackColor = System.Drawing.Color.Red;
TextBox txtBox = new TextBox();
txtBox.BackColor = System.Drawing.Color.Red;
txtBox.ForeColor = System.Drawing.Color.White;
txtBox.Location = new System.Drawing.Point(5, 5);
txtBox.Visible = true;
txtBox.Text = "This is a notification message";
frm.Controls.Add(txtBox);
frm.Show(nativeWnd);

上面代码的结果如下:

  1. 通知窗口没有位于右下角
  2. 如果我移动撰写窗口,通知窗口保持在相同的位置,当我移动撰写窗口时它不会移动。
  3. 在windows任务栏中,它显示为通知窗口是一个不同的进程/程序,而不是同一撰写窗口的一部分,也许我需要做一些像从。Owner = nativewind,但不工作

任何想法?

使用定时器在主线程(UI)上触发Tick事件,您可以在其中调用表单的Close方法。当收到WM_TIMER消息时,System.Windows.Forms.Timer的事件由消息循环从UI线程引发。所以,你可以调用Close方法。

注意,计时器可以在表单外部或表单内部(内置到表单中)运行并关闭表单。

您可以创建一个自定义的Windows窗体,它会在超时后自动关闭。

要使窗体成为Outlook检查器的子窗体,Q/castInspector对象(例如从Application.ActiveInspector)到IOleWindow接口,调用IOleWindow.GetWindow来获得HWND。创建System.Windows.Forms.NativeWindow类的实例并调用NativeWindow.AssignHandle。然后你可以将NativeWindow对象传递给Form.ShowForm.ShowModal(NativeWindow对象实现IWin32Window接口)。

相关内容

  • 没有找到相关文章

最新更新