WinForm窗口系统托盘闪烁,窗口透明感

在上一篇《C# WinForm窗口最小化到系统托盘》基础上,添加一个Timer 控件Splashtimer

触发事件:

private void Splashtimer_Tick(object sender, System.EventArgs e)
  {
   if ( m_bFlag == true )
    {
     this.notifyIcon1.Icon = m_Icon2;
     m_bFlag = false;
    }
    else
    {
     this.notifyIcon1.Icon = m_Icon1;
     m_bFlag = true;
   } 
  }

当然先要定义三个变量:
  private Icon m_Icon1;
  private Icon m_Icon2;
   private bool m_bFlag;

然后导入图标文件,这两个图标要有差异,这样才能有闪烁现象

private void Form1_Load(object sender, System.EventArgs e)
  {

   m_bFlag=true;
   m_Icon1 = new Icon("app1.ico");//导入图标文件
   m_Icon2 = new Icon("app2.ico");

  this.Splashtimer.Interval = 100;
   this.Splashtimer.Start();

  this.Location = new System.Drawing.Point( 100 , 100 ) ;
   this.Cursor = System.Windows.Forms.Cursors.Hand;
   // 定义在窗体上,光标显示为手形
   this.Text = "透明的WinForm窗体!";
   // 定义窗体的标题名称
   this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
   // 定义窗体的开始显示位置是屏幕的中间
   this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
   // 窗体的边界是Fixed3D类型
   this.ForeColor = System.Drawing.SystemColors.Desktop;
   //以桌面的前景色作为窗体的前景色
   this.Font = new System.Drawing.Font ( "宋体", 9 ) ;
   // 定义字体类型,大小
   this.BackColor = System.Drawing.Color.Blue;
   // 定义背景色为蓝色
   this.ClientSize = new System.Drawing.Size( 440 , 170 ) ;
   // 设置窗体的大小
   // Opacity属性设立窗体的透明程度,只对于视窗2000有效
   this.Opacity = 0.60 ;

 }

要使Winform窗口切换不闪烁,可以尝试以下几种方法: 1. 双缓冲技术:在窗口的构造函数中添加以下代码: ``` SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); UpdateStyles(); ``` 这将使窗口使用双缓冲技术,可以减少窗口切换时的闪烁现象。 2. 开启硬件加速:在窗口的构造函数中添加以下代码: ``` SetStyle(ControlStyles.Opaque, true); ``` 这将使窗口使用硬件加速,也可以减少窗口切换时的闪烁现象。 3. 使用窗口动画:在窗口的构造函数中添加以下代码: ``` AnimateWindow(this.Handle, 200, AW_BLEND); ``` 这将为窗口添加一个渐变动画,可以使窗口切换更加平滑,减少闪烁现象。 注意:以上方法需要在窗口的构造函数中添加,建议在窗口的Load事件中执行,以确保窗口已经完全加载。同时,需要引入以下命名空间: ``` using System.Runtime.InteropServices; using System.Windows.Forms; ``` 完整代码示例: ``` using System.Runtime.InteropServices; using System.Windows.Forms; public partial class Form1 : Form { [DllImport("user32.dll")] static extern bool AnimateWindow(IntPtr hWnd, int time, int flags); private const int AW_BLEND = 0x00080000; public Form1() { InitializeComponent(); SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); UpdateStyles(); SetStyle(ControlStyles.Opaque, true); AnimateWindow(this.Handle, 200, AW_BLEND); } private void Form1_Load(object sender, EventArgs e) { //TODO: 窗口加载完成后的操作 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值