最小化托盘的实现方法


在书上看到的,认为实用,记下了。

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

核心函数是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接收鼠标的行为。

另外,当程序所有关闭时,也应该删除掉托盘。代码差点儿相同,不反复了。


优质内容筛选与推荐>>
1、Linux下安装字体(转)
2、I.xml
3、心理控制术
4、rsync 备份脚本
5、PgSql Jdbc Copy Streams Example


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号