void CtraytestDlg::tray_btn()
{
m_tnd.cbSize = sizeof(NOTIFYICONDATA);
m_tnd.hWnd = m_hWnd;
m_tnd.uID = IDI_TRAY_ICON;
m_tnd.uFlags = NIF_TIP | NIF_ICON |  NIF_MESSAGE; //
m_tnd.uCallbackMessage = MY_TRAYICON_MSG;
m_tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_TRAY_ICON));
_tcscpy_s(m_tnd.szTip, sizeof(m_tnd.szTip), _T("系统热键 DIY ..."));
Shell_NotifyIcon(NIM_ADD, &m_tnd);
ShowWindow( SW_HIDE);
}
托盘图标右键菜单项void CtraytestDlg::OnPop32772()
{
m_tnd.uFlags =  NIF_TIP | NIF_ICON  ; //去掉 NIF_MESSAGE
_tcscpy_s(m_tnd.szTip, sizeof(m_tnd.szTip), _T("other"));
Shell_NotifyIcon(NIM_MODIFY, &m_tnd);
}为什么去掉NIF_MESSAGE后,还是能响应CallbackMessage消息呀

解决方案 »

  1.   

    这里去掉又不是说把notify icon的消息部分去掉,而是说这个NIM_MODIFY只修改NIF_TIP | NIF_ICON  相关的东西,不修改NIF_MESSAGE部分的东西。没有任何办法去掉一个属性
      

  2.   

    m_tnd.uFlags =  NIF_TIP | NIF_ICON  ; //去掉 NIF_MESSAGE这里的标志表示你下面需要修改哪几个项,去掉NIF_MESSAGE只是代表你不用修改CallbackMessage消息而已。并不代表CallbackMessage就不能响应。
      

  3.   

    原来是这么一回事,我原以为,如果uFlags没有NIF_MESSAGE,则执行Shell_NotifyIcon(NIM_MODIFY, &m_tnd);后会取消callbackmessage谢谢楼上二位。