duilib 实现鼠标移动到托盘提示消息,类似微信托盘功能

duilib 的CTrayIcon类没有办法获取程序托盘pos的函数,为此我们需要继承该类编写自己的类。

在windows api中

Shell_NotifyIconGetRect可以获取托盘的pos;函数原型为
SHSTDAPI Shell_NotifyIconGetRect(
  const NOTIFYICONIDENTIFIER *identifier,
  RECT                       *iconLocation
);

msdn参考档案:https://docs.microsoft.com/zh-cn/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicongetrect

其中NOTIFYICONIDENTIFIER类型的参数成员在 CTrayIcon创建过程中已经全部指明。 CTrayIcon::CreateTrayIcon( HWND _RecvHwnd, UINT _IconIDResource, LPCTSTR _ToolTipText, UINT _Message),把该函数的入参填入到NOTIFYICONIDENTIFIER的相应位置即可。iconLocation 输出参数,携带trayicon的pose。

 

 

上述稿子一年前未完成。我说一下当时这个的解决方法吧:当鼠标处于托盘上时显示小窗口并开启了一个定时器来关闭它。若鼠标在小窗口内则定时器无法关闭它,若鼠标滑出小窗口时关闭小窗口和定时器。

为什么需要一个定时器?调整任务栏到合适位置及宽度,这样做是为了增大托盘与要显示的小窗口之前的距离。这样我们就可以观察鼠标由托盘移动到小窗口上时,定时器对小窗口的影响。

欢迎讨论!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值