WPF 托盘图标菜单

WPF没有原生的托盘图标,用Winform的NotifyIcon无法取得焦点丢失事件,点其他窗口后菜单还硬生生的显示在原地,非常的尴尬
准备拔一下 HandyControl 的实现,发现代码有点多,有点迷惑
在具体的链接内实现是计时器+鼠标位置的各种判断,我没有细看里面为啥要用鼠标位置
https://www.cnblogs.com/sczmzx/p/5158127.html

自己利用Winform的NotifyIcon+计时器简单包装了一个

  • MouseDown事件显示菜单后,启动计时器,检测当前窗口句柄(句柄理想情况必为当前的菜单窗口,记录为初始值),只要句柄发生变化说明丢失了焦点,则关闭菜单
  • 菜单注册关闭事件,在关闭前停止计时器

获取前置窗口代码

[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();

2023.7

只要利用SetForegroundWindow将菜单窗口置顶即可,不需要定时器

posted @ 2022-02-23 22:38  trykle  阅读(425)  评论(0)    收藏  举报