现在的位置: 首页 > 综合 > 正文

VC 托盘编程及弹出菜单

2013年07月15日 ⁄ 综合 ⁄ 共 821字 ⁄ 字号 评论关闭

托盘(tray)编程及弹出菜单

      托盘即像qq一样在右下角显示。

      托盘显示分三步:先添加到托盘,再响应鼠标或键盘消息,最后退出时退出托盘。Shell_NotifyIcon可在任务栏(taskbar)增加、修改或删除一个图标。可以在启动时显示托盘图标,退出时删除托盘图标。此函数需要一个结构体NOTIFYICONDATA

typedef struct _NOTIFYICONDATA {

DWORD cbSize;结构体大小

HWND hWnd;
接受taskbar与图标关联的通告消息

UINT uID; taskbar icon即任务栏显示的图标

UINT uFlags;
一系列标识的组合,用来确定下面三个参数哪个可用

UINT uCallbackMessage; //自定义的消息。当一个鼠标事件发生在任务栏的图标上时,这个消息被发送给hWnd标识的窗口。在此消息的响应函数中来实现弹出菜单。消息响应函数的wParam标示消息事件发生的任务栏图标;lParam根据事件不同,包含了鼠标或键盘的具体消息。有些文章说uID只要唯一就好,经验证:uIDhIcon以及接受消息的wParam必须为同一图标。

HICON hIcon;
要在任务栏增加、修改或删除的图标。

WCHAR szTip[64];鼠标放在任务栏的图标上时显示的提示信息。

} NOTIFYICONDATA, *PNOTIFYICONDATA;

    弹出菜单就说下设置菜单显示位置,添加相应消息就行了。

// 确定鼠标位置以便在该位置附近显示菜单
     GetCursorPos( &Point );
     SetForegroundWindow();

    uIDhIcon一般标识的是同一个图标,为什么要两个呢?没搞明白。

    注释掉uID,则启动时任务栏不显示图标,托盘显示时任务栏才显示图标,但是不会响应鼠标消息。注释掉hIcon,则启动时任务栏显示图标,托盘显示时任务栏不显示图标,也不响应鼠标消息。

抱歉!评论已关闭.