给Windows mobile应用添加托盘图标

 

Windows mobile右下角的一小块通知区域,可以用来放置一个小的图标,如图所示:

 

通过这个小图标,可以方便的启动应用程序,给用户的操作带来便利。下面将对基于MFC.NET Compact Framework2.0中如何使用托盘图标进行说明。

相关的APIShell_NotifyIcon

BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA lpData);

dwMessage:消息,有下面三种

Value

Description

NIM_ADD

Adds an icon to the status area.

NIM_DELETE

Deletes an icon from the status area.

NIM_MODIFY

Modifies an icon in the status area.

lpDataPNOTIFYICONDATA结构定义如下:

typedef struct _NOTIFYICONDATA { 
  DWORD cbSize;
  HWND hWnd; 
  UINT uID; 
  UINT uFlags; 
  UINT uCallbackMessage; 
  HICON hIcon; 
  WCHAR szTip[64]; 
} NOTIFYICONDATA, *PNOTIFYICONDATA;
我们关心的往往只有

hWnd:托盘图标的父窗口句柄,即应用程序窗口句柄

uFlags:指定哪些参数有效。

hIcon:图标句柄。

 

MFC添加托盘图标

1. 首先先导入一个图标文件,这里假设IDIDI_ICON1

2. 添加一个自定义的消息,如下

#define WM_ICONNOTIFY            (WM_USER + 101)         //自定义消息

 

3. WM_ICONNOTIFY添加消息处理函数

ON_MESSAGE(WM_ICONNOTIFY, OnTrayNotification)

OnTrayNotification即用户点击托盘图标的消息响应函数,如果不需要弹出菜单的话,通常是将处于后台运行的程序显示出来。

LRESULT CTestDlg::OnTrayNotification(WPARAM uID, LPARAM lEvent)

{

    if (WM_LBUTTONDOWN == lEvent)

    {

        ShowWindow(SW_NORMAL); 

        SetForegroundWindow();

    }

    return S_OK;

}

4. 在应用程序初始化的地方添加下面的代码。

    nid.cbSize = sizeof(NOTIFYICONDATA);

    nid.hWnd = m_hwnd;

    nid.uID = 100;

    nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;

    nid.uCallbackMessage = WM_ICONNOTIFY;

    nid.hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, 0);

    wcscpy(nid.szTip, _T("test"));

    Shell_NotifyIcon(NIM_ADD, &nid);

 

5. 应用程序在退出时,需要将托盘图标删除

    Shell_NotifyIcon(NIM_DELETE, &m_nId);

 

.NET Compact Framework中添加托盘图标

由于.NET Compact Framework2.0还没有加入CNotifyIcon类,需要通过调用Shell_NotifyIcon来实现,如下:

1.       导入相关的win32API

        [DllImport("coredll.dll")]

        internal static extern IntPtr GetModuleHandle(String lpModuleName);

        [DllImport("coredll.dll")]

        internal static extern IntPtr LoadIcon(IntPtr hInst, string IconName);

2.     添加托盘图标即消息响应函数

        IntPtr hIcon = LoadIcon(GetModuleHandle(null), "#32512");

        notifyIcon.Add(hIcon);

        notifyIcon.Click += new EventHandler(notifyIcon_Click);

        private void notifyIcon_Click(object sender, EventArgs e)

        {

            Show();

        }

3.     重载Form close消息响应函数,点击右上角×隐藏窗口

private void Form1_Closed(object sender, EventArgs e)

        {

            Hide();

        }

此时需要给应用添加一个图标,这样托盘图标才真正显示出来。

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值