winform实现任务栏隐藏、通知栏图标及右键、类似QQ隐藏窗体等功能

1。第一个功能是任务栏隐藏。winform下有个属性showintaskbar。直接改为false即可。
2。第二个功能是添加通知栏图标。有个控件为notifyicon,直接拉过来,添加图标即可。
3。第三个功能,实现类似QQ的隐藏窗体,把窗体拖到屏幕上方就会缩起来的效果。首先拉一个时钟,设置时间间隔为300毫秒,在时钟里面添加代码:
          if (this.Top < 3)
          {
              if (this.Handle == FormNameAt(Cursor.Position.X, Cursor.Position.Y))
              {
                  this.Top = 0;//使窗体致顶
              }
              else
              {
                  this.Top = -(this.Height - 2);
              }
          }
其他相关函数如下:
      //获取当前鼠标下可视化控件的句柄
      [DllImport("user32.dll")]
      public static extern int WindowFromPoint(int xPoint, int yPoint);
      //获取指定句柄的父级句柄
      [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]
      public static extern IntPtr GetParent(IntPtr hWnd);

      public IntPtr FormNameAt(int x, int y)
      {
          IntPtr Tem_hWnd;//设置存储句柄的变量
          IntPtr Tem_Handle = (IntPtr)(WindowFromPoint(x, y));
          Tem_hWnd = Tem_Handle;//记录原始句柄
          while (Tem_hWnd != ((IntPtr)0))
          {
              Tem_Handle = Tem_hWnd;
              Tem_hWnd = GetParent(Tem_hWnd);
          }
          return Tem_Handle;
      }
运行程序,可以发现窗体拉上去可以隐藏了,而且鼠标移到上面的时候弹出来,而且不会缩回去。
4。接下来的功能就是要实现最小化后通知栏鼠标双击的时候恢复窗体的效果。给notifyicon添加双击事件,添加如下代码
          this.Visible = true;
          this.WindowState = FormWindowState.Normal;
而实际上我们发现,最小化的时候,窗体并没有完全隐藏,而是所在左下角的地方,因此我们需要多做一个操作,添加窗体的Deactivate事件,添加如下代码
          if (this.WindowState == FormWindowState.Minimized)
          {
              this.Visible = false;
          }
也就可以明白为什么上面要添加 this.Visible = true;了。
5。最后实现通知栏图标右键的功能,拖一个contextmenustrip控件即可,其操作跟菜单一致。然后在notifyicon中 contextmenustrip 属性添加上刚才拉进来的控件就行啦~~
6。获取窗体最小化  最大化  关闭事件
  1. const int WM_SYSCOMMAND = 0x112;
  2. const int SC_CLOSE = 0xF060;
  3. const int SC_MINIMIZE = 0xF020;
  4. const int SC_MAXIMIZE = 0xF030;
  5. /// <summary>
  6. /// 重写窗体事件
  7. /// </summary>
  8. /// <param name="m"></param>
  9. protected override void WndProc(ref Message m)
  10. {
  11. if (m.Msg == WM_SYSCOMMAND)
  12. {
  13. if (m.WParam.ToInt32() == SC_MINIMIZE) //是否点击最小化
  14. {
  15. //这里写操作代码
  16. this.Visible = false; //隐藏窗体
  17. return;
  18. }
  19. if (m.WParam.ToInt32() == SC_MAXIMIZE)
  20. {
  21. //.....................
  22. }
  23. if (m.WParam.ToInt32() == SC_CLOSE)
  24. { //.....................}
  25. }
  26. }
  27. base.WndProc( ref m);
  28. }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值