发新话题
打印

[讨论]VC++将图标加到通知区中

[讨论]VC++将图标加到通知区中

议题提交:hack988
信息来源:邪恶八进制信息安全团队

各位程序高手好:
     小弟遇到一点问题。我用VC++编完了程序,最后单击最小化框想将它的图标放到Status area(系统托盘)中去,我看过MSDN,事实上也办到了,问题是不知道该怎样响应鼠标消息,MSDN上说用WM_CONTEXTMENU、WM_RBUTTONUP  消息,但参数
(WPARAM wParam,LPARAM lParam) 与 系统默认的(UINT nFlags, CPoint point)
不同,系统无法编译,我看过一些程序片段,比如
复制内容到剪贴板
代码:
void On_MYWM_NOTIFYICON(WPARAM wParam, LPARAM lParam)
{
   UINT uID;
   UINT uMouseMsg;

   uID = (UINT) wParam;
   uMouseMsg = (UINT) lParam;

   if (uMouseMsg == WM_LBUTTONDOWN)
   {
      switch (uID)
      {
        case IDI_MYBATTERYICON:

           // The user clicked the battery icon. Display the
           // battery status.
           ShowBatteryStatus();
           break;

        case IDI_MYPRINTERICON:

           // The user clicked the printer icon. Display the
           // status of the print job.
           ShowJobStatus();
           break;

        default:
           break;
      }
    }

    return;
}
但WINDOWS没有这样的一个消息。现在我需要响应我自己的消息
复制内容到剪贴板
代码:
LRESULT CHDSMSDlg::On_MYWM_NOTIFYICON(WPARAM wParam,LPARAM lParam)
{
     if(WM_CONTEXTMENU == lParam||WM_RBUTTONDOWN == lParam)
     {
          CPoint pt;
          ::GetCursorPos(&pt);
          SetForegroundWindow();
          m_menuTray.GetSubMenu(0)->TrackPopupMenu(0,pt.x,pt.y,this);
     }
     else if(WM_LBUTTONDBLCLK == lParam)
     {
          ShowWindow(SW_SHOW);
          SetForegroundWindow();
          Shell_NotifyIcon(NIM_DELETE,&m_nid);
     }
     return 0;


}
我应该怎么做,请大家教我,谢谢!

TOP

在CHDSMSDlg.cpp中的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间加入
ON_MESSAGE(消息名称,函数名称)

注意那是个宏不是函数,后面不要加“;”。
函数对应的指针原型是
LRESULT (AFX_MSG_CALL CWnd::*)(WPARAM, LPARAM)
对待处女,谁污染,谁治理。 对待内存,谁分配,谁释放。

TOP

写了个VC的例子给你参考参考。

附件

托盘演示TEST.rar (36 KB)

2005-7-7 18:56, 下载次数: 31

http://hi.baidu.com/fengze

TOP

小弟问题解决了,十分感谢楼上的.

TOP

发新话题