亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用C#實現智能設備上的NotifyIcon類

2019-11-18 16:54:01
字體:
來源:轉載
供稿:網友

    前幾天有網友問.NET CF中怎么實現NotifyIcon,我這才知道原來.NET CF并沒有提供NotifyIcon控件。
    于是偶想PC上可以用Shell_NotifyIcon和MessageWindow來實現托盤圖標,只是不知道.NET CF支持不支持這兩個東東了。仔細看了一下.NET CF中可疑的命名空間,沒想到在Microsoft.WindowsCE.Forms命名空間里面竟然有一個MessageWindow 類,太好了,只剩下一個Shell_NotifyIcon 函數了。接著   在Window CE的SDK的幫助文件里,又發現Window CE Platform API已經包含了Shell_NotifyIcon函數。兩大“主料”都齊了,只剩下鍋了。
    先看一下MessageWindow類,這個類提供了 WndPRoc 方法,用于處理窗口消息,并公開了可能傳遞給本機窗口函數的有效窗口句柄。要使用它,派生一個新類,并重寫的 WndProc 方法,這樣才能截獲特定的窗口消息。這里主要用來處理click事件。
        Shell_NotifyIcon的用法如下:

[DllImport("coredll.dll")]
internal static extern int Shell_NotifyIcon(int dwMessage, ref  NOTIFYICONDATA pnid);

其中,NOTIFYICONDATA結構如下:

struct NOTIFYICONDATA
{
    int cbSize;
    IntPtr hWnd;
    uint uID;
    uint uFlags;
    uint uCallbackMessage;
    IntPtr hIcon;
}
     Pnid參數的生命需要注意,是按引用傳遞的,因為Shell_NotifyIcon 需要一個指向 NOTIFYICONDATA 結構的指針。
    hWnd是用來接收任務欄中圖標單擊消息的窗口的句柄。
運行示例的時候由于窗體最大化,擋住了任務欄,把窗體最小化之后就能看到托盤圖標了。(效果圖片竟然貼不上來,改天再貼吧)
該類和示例的下載地址:http://www.49028c.com/Files/ttinfo/NotifyIconCf.rar

下面是NotifyIcon類的實現,別忘了引用Microsoft.WindowsCE.Forms。注意Add方法提供了不同的重載形式,具體請參看注釋:


using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace NotifyClient
{
    /**//// <summary>
    /// 智能設備托盤圖標類
    /// </summary>
    public class NotifyIcon
    {
        //單擊事件
        public event System.EventHandler Click;

        private MyMessageWindow messageWindow;
        private int uID = 5000;
        private System.Drawing.Icon _Icon;
       
        public NotifyIcon()
        {
            messageWindow = new MyMessageWindow(this);
            messageWindow.uID = uID;
        }
        public System.Drawing.Icon Icon
        {
            set
            {
                _Icon = value;

            }
        }
     
        ~NotifyIcon()
        {
            Remove();
        }

        /**//// <summary>
        /// 添加托盤圖標
        /// </summary>
        /// <param name="hIcon">icon文件的有效句柄</param>
        public void Add(IntPtr hIcon)
        {
            NotifyMessage(messageWindow.Hwnd, NIM_ADD, (uint)uID, hIcon);
        }
        /**//// <summary>
        /// 添加托盤圖標
        /// </summary>
        /// <param name="IconRes">編譯之后的資源文件中的icon資源名稱,如“#201547”</param>
        public void Add(string IconRes)
        {
            IntPtr hIcon = LoadIcon(GetModuleHandle(null), IconRes);
            NotifyMessage(messageWindow.Hwnd, NIM_ADD, (uint)uID, hIcon);
        }
        /**//// <summary>
        /// 添加托盤圖標
        /// </summary>
        /// <param name="icon">icon文件</param>
        public void Add(System.Drawing.Icon icon)
        {
            NotifyMessage(messageWindow.Hwnd, NIM_ADD, (uint)uID, icon.Handle);
        }
        /**//// <summary>
        /// 添加托盤圖標;icon為屬性中的icon
        /// </summary>
        public void Add()
        {
            if (_Icon != null)
            {
                NotifyMessage(messageWindow.Hwnd, NIM_ADD, (uint)uID, _Icon.Handle);
            }
        }
        public void Remove()
        {

            NotifyMessage(messageWindow.Hwnd, NIM_DELETE, (uint)uID, IntPtr.Zero);
        }

        public void Modify(IntPtr hIcon)
        {

            NotifyMessage(messageWindow.Hwnd, NIM_MODIFY, (uint)uID, hIcon);

        }

 

        private void NotifyMessage(IntPtr hwnd, int dwMessage, uint uID, IntPtr hIcon)
        {
            NOTIFYICONDATA notdata = new NOTIFYICONDATA();

            notdata.cbSize = 152;
            notdata.hIcon = hIcon;
            notdata.hWnd = hwnd;
            notdata.uCallbackMessage = WM_NOTIFY_TRAY;
            notdata.uFlags = NIF_MESSAGE | NIF_ICON;
            notdata.uID = uID;

            int ret = Shell_NotifyIcon(dwMessage, ref notdata);
        }

        API#region API
        //定義消息常量
        const int NIF_MESSAGE = 0x00000001;
        const int NIF_ICON = 0x00000002;
        internal const int WM_LBUTTONDOWN = 0x0201;   

        internal const int NIM_ADD = 0x00000000;
        internal const int NIM_MODIFY = 0x00000001;
        internal const int NIM_DELETE = 0x00000002;

        //自定義消息
        internal const int WM_NOTIFY_TRAY = 0x0400 + 2001;

       


        internal struct NOTIFYICONDATA
        {
            internal int cbSize;
            internal IntPtr hWnd;
            internal uint uID;
            internal uint uFlags;
            internal uint uCallbackMessage;
            internal IntPtr hIcon;           
        }

        [DllImport("coredll.dll")]
        internal static extern int Shell_NotifyIcon(
            int dwMessage, ref NOTIFYICONDATA pnid);

        [DllImport("coredll.dll")]
        internal static extern int SetForegroundWindow(IntPtr hWnd);

        [DllImport("coredll.dll")]
        internal static extern int ShowWindow(
            IntPtr hWnd,
            int nCmdShow);

        [DllImport("coredll.dll")]
        internal static extern IntPtr GetFocus();

        [DllImport("coredll.dll")]
        internal static extern IntPtr LoadIcon(IntPtr hInst, string IconName);

        [DllImport("coredll.dll")]
        internal static extern IntPtr GetModuleHandle(String lpModuleName);


        #endregion


        MessageWindow#region MessageWindow

        internal class MyMessageWindow : Microsoft.WindowsCE.Forms.MessageWindow
        {
           
            private int _uID = 0;
            private NotifyIcon notifyIcon;

          
            public MyMessageWindow(NotifyIcon notIcon)
            {
                notifyIcon = notIcon;
            }

            public int uID
            {
                set
                {
                    _uID = value;

                }
            }

            protected override void WndProc(ref Microsoft.WindowsCE.Forms.Message msg)
            {

                if (msg.Msg == WM_NOTIFY_TRAY)
                {
                    if ((int)msg.LParam == WM_LBUTTONDOWN)
                    {
                        if ((int)msg.WParam == _uID)
                        {
                           
                            if (notifyIcon.Click != null)
                                notifyIcon.Click(notifyIcon, null);

                        }
                    }
                }

            }
        }
        #endregion

    }
}
http://www.49028c.com/ttinfo/archive/2006/10/31/545741.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人一区二区三区电影| 在线播放精品一区二区三区| 国产精品视频区1| 欧美亚洲另类视频| 亚洲欧美日韩久久久久久| 久久久精品久久| 97香蕉久久夜色精品国产| 国产日产欧美a一级在线| 欧美在线激情网| 国产亚洲一区精品| 国产一区二区免费| 国自产精品手机在线观看视频| 欧美视频在线观看免费| 亚洲欧美国产一本综合首页| 欧美福利视频在线| 亚洲一区美女视频在线观看免费| 久久亚洲精品毛片| 国产精品美女www爽爽爽视频| 国产成人精品久久二区二区91| 日韩欧美成人精品| 欧美激情视频在线免费观看 欧美视频免费一| 欧美丝袜一区二区三区| 国产精品96久久久久久| 亚洲精品久久久久久下一站| 黄色成人av在线| 美女黄色丝袜一区| 尤物yw午夜国产精品视频明星| 日韩高清电影免费观看完整版| 日本最新高清不卡中文字幕| 亚洲综合色av| 亚洲性生活视频| 永久免费毛片在线播放不卡| 精品久久久中文| 国产精品吴梦梦| 裸体女人亚洲精品一区| 2021久久精品国产99国产精品| 精品日本高清在线播放| 大桥未久av一区二区三区| 97精品国产aⅴ7777| 欧美日韩免费网站| 国产精品爽爽ⅴa在线观看| 亚洲专区国产精品| 国产精品视频一区二区三区四| 一区二区三区四区视频| 91精品国产高清久久久久久久久| 日韩大片免费观看视频播放| 黄色精品一区二区| 国内偷自视频区视频综合| 久久久视频精品| 国产精品女人久久久久久| 国产精品久久久久久久久久东京| 亚洲网站在线播放| 国产欧美亚洲视频| 日韩av网站导航| 亚洲美腿欧美激情另类| 欧美黄色免费网站| 国产美女精品视频| 亚洲国产欧美日韩精品| 国产日韩精品一区二区| 欧美男插女视频| 久久精品国产亚洲精品| 国产成一区二区| 欧美亚洲激情视频| 欧美激情在线视频二区| 欧美日韩国产一区二区| 亚洲高清色综合| 精品精品国产国产自在线| 国产成人精品一区二区在线| 亚洲精品美女免费| 成人激情视频在线| 欧美在线一区二区视频| 九九热最新视频//这里只有精品| 美女久久久久久久| 96精品久久久久中文字幕| 欧美极品在线视频| 亚洲一区二区三区四区在线播放| 97国产精品免费视频| www.国产一区| 国产精品男女猛烈高潮激情| 日韩免费在线视频| 欧美激情亚洲视频| 91麻豆国产语对白在线观看| 亚洲欧美成人一区二区在线电影| 亚洲免费视频一区二区| 亚洲成人动漫在线播放| 日韩视频精品在线| 日韩免费av在线| 日韩小视频在线| 97久久精品人搡人人玩| 欧美成人一区在线| 91在线无精精品一区二区| 97视频在线观看免费高清完整版在线观看| 黄色成人av在线| 中文字幕亚洲天堂| 97成人精品视频在线观看| 欧美成年人视频| 日韩成人激情视频| 色先锋资源久久综合5566| 日韩在线观看电影| 国产精品久久久久久久久久久久| 中文日韩在线视频| 青青草一区二区| 欧美性猛交丰臀xxxxx网站| 亚洲日本中文字幕| 日韩欧美成人免费视频| 国产精品高清免费在线观看| 国产精品视频yy9099| 国产精品久久久久久网站| 欧美日韩成人网| 亚洲成av人乱码色午夜| 国产日韩欧美中文在线播放| 红桃视频成人在线观看| 亚洲第一视频网| 亚洲第一黄色网| 日韩免费看的电影电视剧大全| 中文精品99久久国产香蕉| 欧美日韩亚洲一区二区三区| 亚洲精品电影久久久| 亚洲最大福利视频| 91在线色戒在线| 亚洲精品第一页| 亚洲最新av在线| 97超级碰碰碰久久久| 欧美丝袜一区二区三区| 热99久久精品| 国产一区二区免费| 亚洲www永久成人夜色| 中文字幕亚洲综合久久| 日韩电影中文 亚洲精品乱码| 国产亚洲欧美视频| x99av成人免费| 亚洲在线观看视频| 国产ts人妖一区二区三区| 亚洲欧美日韩久久久久久| 欧美精品videos| 一本色道久久综合狠狠躁篇怎么玩| 日本精品久久久久影院| 色黄久久久久久| 欧美乱大交xxxxx| 永久免费精品影视网站| 久久伊人精品视频| 中文字幕av日韩| 在线电影中文日韩| 国产成人在线亚洲欧美| 久久香蕉国产线看观看网| 成人xvideos免费视频| 91精品在线观| 欧美最猛性xxxxx亚洲精品| 色偷偷偷亚洲综合网另类| 欧美亚洲视频一区二区| 欧美日韩国产精品| 韩日精品中文字幕| 亚洲欧美激情四射在线日| 国产一区深夜福利| 国产精品久久久久久久久久久久久| 欧美日韩亚洲视频| 中文字幕欧美精品日韩中文字幕| 国产综合视频在线观看| 欧美一区亚洲一区| 亚洲视频日韩精品| 17婷婷久久www| 亚洲国产一区二区三区四区| 欧美中文字幕精品| 一区二区三区动漫|