winform 信息提示(语音、文字、图标)

正在运行的程序,出现故障,或者接收到通信信息。客户端如何提示?

方案一:语音提示【播报一段语音】或者【‘滴滴’声】。

方案二:图标提示【托盘图标闪烁】【任务栏图标醒目】

综合考虑下,一二结合更合理。

首先语音提示

c# 中 

using System.Runtime.InteropServices; 
SpVoiceClass voice = new SpVoiceClass();            
voice.Speak("Hello word",SpeechVoiceSpeakFlags.SVSFlagsAsync);

朗读对应信息。

业务上可放于监听位置(需要监听的设备-观察者模式可用),或接收通信信息位置 触发即可。

其次图标提示

托盘图标

winform --  拉入NotifyIcon

注意是主界面,拉入小弹窗就是闹着玩的。

0.窗口最小化事件

        private void MainFrameView_Resize(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)//最小化到系统托盘            
            {                
                //notifyIcon.Visible = true;//显示托盘图标               
                //this.Hide();//隐藏窗口           
            }
        }

注意,为了实现任务栏图标提示(非托盘)此事件不用,因为会隐藏掉任务栏图标

1.窗口关闭事件

private void MainFrame_FormClosing(object sender, FormClosingEventArgs e)
        {

             //注意判断关闭事件Reason来源于窗体按钮,否则用菜单退出时无法退出!            
                if (e.CloseReason == CloseReason.UserClosing)
                {
                    e.Cancel = true;//取消"关闭窗口"事件                
                    this.WindowState = FormWindowState.Minimized;//使关闭时窗口向右下角缩小的效果                
                    notifyIcon.Visible = true;
                    this.Hide();
                    return;
                }           
            
        }

2.双击任务栏图标

      
         private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)        
         {            
             notifyIcon.Visible = false;            
             this.Show();            
             WindowState = FormWindowState.Normal;            
             this.Focus();        
         } 

 3.图标闪烁

加个定时器,间隔自己定,给个状态判断就行

private void timer1_Tick(object sender, EventArgs e)
        {
            if (this.notifyIcon1.Visible)
                this.notifyIcon1.Visible = false;
            else
                this.notifyIcon1.Visible = true;
        }

同样可以拓展下,比如换图标什么的。

气泡窗提示

气泡窗提示,触发在接受信息时

 private void showTip(string text)
        {
            notifyIcon.ShowBalloonTip(1000, "您有新的消息xxxx", text, ToolTipIcon.Info);
        }

任务栏图标

关于这个图标,是直接调用user32.dll的

 [DllImport("User32.dll", CharSet = CharSet.Unicode, EntryPoint = "FlashWindowEx")]
        private static extern void FlashWindowEx(ref FLASHWINFO pwfi);
        public struct FLASHWINFO
        {
            public UInt32 cbSize;//该结构的字节大小
            public IntPtr hwnd;//要闪烁的窗口的句柄,该窗口可以是打开的或最小化的
            public UInt32 dwFlags;//闪烁的状态
            public UInt32 uCount;//闪烁窗口的次数
            public UInt32 dwTimeout;//窗口闪烁的频度,毫秒为单位;若该值为0,则为默认图标的闪烁频度
        }
        public const UInt32 FLASHW_TRAY = 2;
        public const UInt32 FLASHW_TIMERNOFG = 12;
        private void FlashWin()
        {
            FLASHWINFO fInfo = new FLASHWINFO();
            fInfo.cbSize = Convert.ToUInt32(Marshal.SizeOf(fInfo));
            fInfo.hwnd = this.Handle;
            fInfo.dwFlags = FLASHW_TRAY | FLASHW_TIMERNOFG;
            fInfo.uCount = 3;// UInt32.MaxValue;
            fInfo.dwTimeout = 500;
            FlashWindowEx(ref fInfo);
        }

拿过来直接用,调用FlashWin()即可。

散花

你可能感兴趣的:(笔记,c#,c#,开发语言)