关于Shell_NotifyIcon函数的问题!!!!

wxlfh 2003-01-06 04:29:55
我知道这个函数的作用是在任务栏里添加 修改 或者删除图标的。

我的问题是,添加一个图标后,怎么与用户交互??

即,这个图标怎样接受用户的动作。譬如,在图标上鼠标的一个右击动作。

请各位高手指教。越详细越好。
...全文
199 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxlfh 2003-04-15
  • 打赏
  • 举报
回复
我的E-MAIL是: wxlfh@163.com
fireseed 2003-03-10
  • 打赏
  • 举报
回复
给我发短信告诉我你的邮箱,我给你发一个例子
本人制作
QiHY 2003-03-10
  • 打赏
  • 举报
回复
NotifyIconData 后面应该是 . 不是 -> ,sorry
QiHY 2003-03-10
  • 打赏
  • 举报
回复
#define UM_NOTIFY 888 //可随便取一个用户消息id值

//产生icon
NOTIFYICONDATA NotifyIconData;

NotifyIconData->cbSize = sizeof(NOTIFYICONDATA);
NotifyIconData->hWnd = hWnd;
NotifyIconData->uID = 1;
NotifyIconData->uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;

//点击icon时对应的消息id
NotifyIconData->uCallbackMessage = UM_NOTIFY;

NotifyIconData->hIcon = LoadIcon(hInst,(LPCTSTR)IDI_HIDEWINDOW);
sprintf(pNotifyIconData->szTip,"HideWindow ^_^");
NotifyIconData->uVersion = NOTIFYICON_VERSION;

Shell_NotifyIcon(NIM_ADD,pNotifyIconData);
Shell_NotifyIcon(NIM_SETVERSION,pNotifyIconData);

//处理UM_NOTIFY消息
case UM_NOTIFY:
switch(lParam)
{
case WM_CONTEXTMENU: //右键单击
DisplayContextMenu(hWnd);
break;
}

//显示菜单
VOID DisplayContextMenu(HWND hwnd)
{
HMENU hmenu; // top-level menu
HMENU hmenuTrackPopup; // shortcut menu
POINT pt;
int nMouse[3]={0};

//pt.x=100; pt.y=100;
GetCursorPos(&pt);

if ((hmenu = LoadMenu(hInst, (LPCTSTR)IDC_HIDEWINDOW)) == NULL)
return;

hmenuTrackPopup = GetSubMenu(hmenu, 0);

SetForegroundWindow(hwnd);

TrackPopupMenu(hmenuTrackPopup,
TPM_LEFTALIGN | TPM_RIGHTBUTTON,
pt.x, pt.y, 0, hwnd, NULL);

PostMessage(hwnd,WM_NULL,0,0);

DestroyMenu(hmenu);
}
wxlfh 2003-01-07
  • 打赏
  • 举报
回复
我现在的理解是:在图标上操作(譬如,单击等)后,该函数通过NOTIFYICONDATA

结构中的句柄向窗口发一个消息,现在请问,这个消息中有鼠标的坐标吗?

如果有,那坐标是基于屏幕的,还是基于窗口客户区的?

我想在[[用右键]]单击图标后,弹出一个弹出式菜单。
wangweicai 2003-01-07
  • 打赏
  • 举报
回复
tnd.uCallbackMessage= MYWM_NOTIFYICON;//指定图标的回调消息

.
.
.
case MYWM_NOTIFYICON:
{
.
.
.
}
qing_li73 2003-01-07
  • 打赏
  • 举报
回复
See the sample below, FYI:

http://codeproject.com/shell/systemtray.asp
qfknet 2003-01-06
  • 打赏
  • 举报
回复
水一个!
step_by_step 2003-01-06
  • 打赏
  • 举报
回复
nId.cbSize = sizeof(NOTIFYICONDATA);
nId.hWnd = hWnd;
nId.uID = IDI_SERVERICON;
nId.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
nId.uCallbackMessage = UM_NOTIFYICON;
nId.hIcon = LoadIcon(GobalInfo.hInst, LPCTSTR(IDI_SERVERICON));
strcpy(nId.szTip, "Server");
//添加图标
Shell_NotifyIcon(NIM_ADD, &nId);
.
.
.
.
//删除图标
Shell_NotifyIcon(NIM_DELETE, &nId);
wxlfh 2003-01-06
  • 打赏
  • 举报
回复
to predomination:

我要的是WIN32 API编程的代码,不是MFC,不好意思,我没说清。
predomination 2003-01-06
  • 打赏
  • 举报
回复
以下这段代码是在任务栏中添加一个图
NOTIFYICONDATA tnd;
tnd.cbSize=sizeof(NOTIFYICONDATA);
tnd.hWnd=this->m_hWnd;
tnd.uID=MYWM_NOTIFYID01;
tnd.uFlags= NIF_MESSAGE|NIF_ICON|NIF_TIP;
tnd.uCallbackMessage= MYWM_NOTIFYICON;//指定图标的回调消息
tnd.hIcon = m_hIcon;
CString c;
c.LoadString(IDS_SHELLICON);
接下来需要响应MYWM_NOTIFYICON消息
如ON_MESSAGE( MYWM_NOTIFYICON, OnShellIconNotify );
接下来在函数OnShellIconNotify(WPARAM wParam, LPARAM lParam)中进
行相应处理
lstrcpy(tnd.szTip,c);
Shell_NotifyIcon(NIM_ADD,&tnd);
如:
if(lParam==WM_RBUTTONDOWN)
{
...
}
kmcyz 2003-01-06
  • 打赏
  • 举报
回复
图标是通过窗口消息响应用户动作的。
参见
http://expert.csdn.net/Expert/topic/1273/1273103.xml?temp=8.344668E-02

70,018

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧