| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    学好外语能够获得更多的国外先进编程技术  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> Web开发 >> 网络编程 >> C# >> CSharpDoc >> 文章正文
用C#实现智能设备上的NotifyIcon类            【字体:
用C#实现智能设备上的NotifyIcon类
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-10

    前几天有网友问.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.cnblogs.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()
        {

[1] [2] [3] [4] 下一页  

文章录入:fengyun    责任编辑:fengyun 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 利用C#实现标注式消息提示窗…

  • RSS制作(C#) - 使用XML DOM

  • c#中的委托和事件的简单实例

  • C#中的接口

  • C#快速排序类

  • 利用正则表达式来反转一句话…

  • C#编程向VFP数据库中插入Num…

  • 汇总c#.net常用函数和方法集

  • 代码前置时页面输出脚本的要…

  • 使用C#开发SmartPhone程序入…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |