zoukankan      html  css  js  c++  java
  • C#编写仿MSN Messager的滚动提示窗口

    转自 http://www.microsoft.com/china/community/Column/64.mspx  
    用Visual C#编写仿MSN Messager的滚动提示窗口
    卢彦
    如何用C#编写托盘程序请参见:用Visual C#做托盘程序http://www.yesky.com/20020110/213425.shtml

    引言
    大家一定都用过MSN Messager了吧?每当有新邮件或者是新消息到来的时候,MSN Messager便会从右下角升起一个小窗口提醒您,然后又降下去。当你在聚精会神的在电脑上做一件事的时候,一定不会喜欢突然被"咚"一下出现在屏幕中心的对话框打扰,它的这种设计不但非常体贴用户,而且效果还很酷。如果您写了一个程序驻留在后台并要求在需要的时候会提醒用户,并且希望也能实现这种效果,那么请跟我一步一步来做下图所示的这个仿MSN Messager的滚动提示窗口。
    实现方法
    第一步,建立一个Windows Application,然后在主form中放置一个Button,
     
    第二步,给这个Application添加一个窗体(Form2),把窗体的FormBorderStyle属性设置为None(无边框模式),然后把TopMost属性(总在最上方)属性设置为True,把ShowInTaskbar属性(是否在 Windows 任务栏中显示窗体)设置为False,并在窗体上加上你打算要显示的文字(实际应用中一般是在程序中动态加载),将窗体的背景设置为你想要的图片和合适的大小。最后再放上三个Timer控件,其中,timer1控制窗体滚出的动画,timer2控制窗体停留时间,timer3控制窗体的滚入动画,将它们的Interval属性设置为10。参见下图
    第四步,编写代码,在Form2中添加两个属性用来设置窗体的显示大小:
    private int heightMax, widthMax;
    public int HeightMax
    {
    set
    {
    heightMax = value;
    }
    get
    {
    return heightMax;
    }
    }
    public int WidthMax
    {
    set
    {
    widthMax = value;
    }
    get
    {
    return widthMax;
    }
    }
    
    添加一个ScrollShow的公共方法:
    public void ScrollShow()
    {
    this.Width = widthMax;
    this.Height = 0;
    this.Show();
    this.timer1.Enabled = true;
    }
    
    添加一个StayTime属性设置窗体停留时间(默认为5秒):
    public int StayTime = 5000;
    
    添加ScrollUp和ScrollDown方法来编写窗体如何滚出和滚入:
    private void ScrollUp()
    {
    if(Height < heightMax)
    {
    this.Height += 3;
    this.Location = new Point(this.Location.X, this.Location.Y - 3);
    }
    else
    {
    this.timer1.Enabled = false;
    this.timer2.Enabled = true;
    }
    }
    private void ScrollDown()
    {
    if(Height > 3)
    {
    this.Height -= 3;
    this.Location = new Point(this.Location.X, this.Location.Y + 3);
    }
    else
    {
    this.timer3.Enabled = false;
    this.Close();
    }
    }
    
    在三个Timer的Tick方法中分别写入:
    private void timer1_Tick(object sender, System.EventArgs e)
    {
    ScrollUp();
    }
    private void timer2_Tick(object sender, System.EventArgs e)
    {
    timer2.Enabled = false;
    timer3.Enabled = true;
    }
    private void timer3_Tick(object sender, System.EventArgs e)
    {
    ScrollDown();
    }
    
    在Form2的Load事件中初始化窗体变量:
    private void Form2_Load(object sender, System.EventArgs e)
    {
    Screen[] screens = Screen.AllScreens;
    Screen screen = screens[0];//获取屏幕变量
    this.Location = new Point(screen.WorkingArea.Width - widthMax - 20, screen.WorkingArea.Height - 34);
    //WorkingArea为Windows桌面的工作区
    this.timer2.Interval = StayTime;
    }
    
    好了,滚动窗体的代码编写到这里就完成了,当然,它本身只实现了一个比较简单的窗体滚动滚出效果,具体如何去应用还应该配合你的程序来完成。当然,你还可以为它添加更多的功能,比如从窗体的任意位置显示(这里只是从右下角显示),淡入淡出效果,加上声音等等。最常用的就是写一个托盘程序,然后采用这种提醒效果。如何用C#编写托盘程序请参见:用Visual C#做托盘程序http://www.yesky.com/20020110/213425.shtml
    最后,我们再回到Form1,在Button的Click事件中写如下代码来测试一下效果:
    private void button1_Click(object sender, System.EventArgs e)
    {
    Form2 form = new Form2();
    form.HeightMax = 120;//窗体滚动的高度
    form.WidthMax = 148;//窗体滚动的宽度
    form.ScrollShow();
    }
    
    编译并运行程序,点击按纽,怎么样?是不是跟MSN Messager的效果一样,很酷:)
  • 相关阅读:
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    WPF DelegateCommand 出现Specified cast is not valid
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    win10 sdk 是否向下兼容
    PHP extract() 函数
    PHP end() 函数
    PHP each() 函数
    PHP current() 函数
  • 原文地址:https://www.cnblogs.com/flashicp/p/689549.html
Copyright © 2011-2022 走看看