您的位置:首页 > 其它

最小化托盘的实现方法

2014-11-19 21:20 483 查看
在书上看到的,觉得有用,记下了。

首先,最小化托盘的基本原理是,将应用程序的主窗体隐藏,然后在托盘中绘制应用程序的图标。然后再为托盘图标添加一些事件处理。

核心函数是Shell_NotifyIcon()函数,负责向系统传递消息,添加、修改或删除托盘区的图标。原型:

WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(

DWORD dwMessage,

PNOTIFYCONDATA pnid

);

其中dwMessage标示功能,有NIM_ADD/NIM_DELETE/NIM_MODIFY。

pnid是程序最小化到托盘的图标信息结构体:

typedef struct _NOTIFYCONDATA {

DOWRD cbSize;
//结构的长度

HWND hWnd;

UINT uID;
//图标ID

UINT uFlags;
//标志着其他哪些成员数据的有效性?

UINT uCallbackMessage;
//当用户单击托盘区图标时会向窗口发送消息

HICON hIcon;
//图标句柄

char szTip[64];
//鼠标移动到托盘图标上时显示的文字

} NOTIFYICONDATA, *PNOTIFYICONDATA;

相关代码:

...

NOTIFYICONDATA nid;

nid.cbSize = (DWORD) sizeof (NOTIFYICONDATA);

nid.hWnd = this->m_hWnd;

nid.uID = IDR_MAINFRAME;

nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
//这句我不理解?

nid.uCallbackMessage = WM_CALL;

nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

strcpy(nid.szTip,"MyApp");

Shell_NotifyIcon(NIM_ADD,&nid);

ShowWindow(SW_HIDE); //隐藏主窗口

...

接着自定义消息WM_CALL,方法有一篇文章有讲到。这里要注意规定了回调消息wParam接收图标ID,lParam接收鼠标的行为。

另外,当程序全部关闭时,也应该删除掉托盘,代码差不多,不重复了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: