关键字:C# 任务栏 右键菜单 NotifyIcon ContextMenu OwnerDraw

    .Net Framework提供的NotifyIcon组件真是方便,用它可以很容易的实现任务栏图标功能,再结合ContextMenu组件就可以在任务栏图标上显示右键菜单,但是当ContextMenu组件的菜单项的OwnerDraw属性设置为true时,却不能正确显示自定义的菜单,微软已确认这是个BUG(http://support.microsoft.com/?id=827043)。

这是我自定义的右键菜单

在任务栏图标上显示自定义的右键菜单

设置NotifyIcon组件的ContextMenu属性

在任务栏图标上显示自定义的右键菜单

自定义菜单的效果不能正确显示

在任务栏图标上显示自定义的右键菜单

有解决方法吗?当然!经过一些摸索,可以用Windows API来实现。
方法是将NotifyIcon组件的ContextMenu属性设置为无,然后在NotifyIcon组件的MouseDown事件里加入下面代码:

if (e.Button == MouseButtons.Right)
   {
    //取得当前鼠标位置
    Win32.POINT point = new TestPopMenu.Win32.POINT();
    Win32.GetCursorPos(ref point);

    Win32.SetForegroundWindow(this.Handle);
    //显示菜单
    Win32.TrackPopupMenuEx(this.contextMenu1.Handle,0x40,point.x,point.y,this.Handle, new TestPopMenu.Win32.TPMPARAMS());
   }



效果图

在任务栏图标上显示自定义的右键菜单 

演示代码下载
   

相关文章:

  • 2022-02-08
  • 2021-09-07
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-17
  • 2022-12-23
  • 2021-08-04
  • 2022-01-05
  • 2021-10-23
相关资源
相似解决方案