case WM_RBUTTONUP:
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_STRING,WM_DESTROY,"退出程序");
menu.AppendMenu(MF_STRING,WM_USER_PLAYMUSIC,"播放音乐");
if(IsPlaying&&IsPause)
menu.AppendMenu(MF_STRING,WM_USER_RESUME,"继续播放");
if(IsPlaying&&!IsPause)
menu.AppendMenu(MF_STRING,WM_USER_PAUSE,"暂停播放");
menu.AppendMenu(MF_STRING,WM_USER_LOADMUSIC,"载入音乐文件");
menu.AppendMenu()
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
HMENU hmenu=menu.Detach();
menu.DestroyMenu();
delete lpoint;

}这是我在最小化到托盘以后右击那个图标的响应case
其中第一个menu.AppendMenu(MF_STRING,WM_DESTROY,"退出程序");是在网上看到的
然后后面的WM_USER_PLAYMUSIC等等是我自己定义加入的。我在
MessageMap里面添加了ON_MESSAGE(WM_USER_PLAYMUSIC,OnPlayMusic)为什么我点击播放那个音乐的时候不会调用OnPlayMusic函数呢?谢谢

解决方案 »

  1.   

    菜单是ON_COMMAND消息
    类似这样的
    ON_COMMAND(ID_FILE_NEW, &CXXXView::OnFileNew)
      

  2.   

    MSDN 说pWndIdentifies the window that owns the pop-up menu. This window receives all WM_COMMAND messages from the menu. In Windows versions 3.1 and later, the window does not receive WM_COMMAND messages until TrackPopupMenu returns. In Windows 3.0, the window receives WM_COMMAND messages before TrackPopupMenu returns.也就是说,你看看 menu.TrackPopupMenu 的返回值,然后进行处理,或者使用 ::TrackPopupMenu  吧
      

  3.   


    哦也就是说WM_DESTROY是因为点击了关闭才发送 实际上也是一个ON_COMMAND对吧?再换句话说是不是我的命名WM_USER_PLAYMUSIC有点不好呢? 
      

  4.   

    对于菜单的处理不是用ON_MESSAGE这个宏的,而是要用ON_COMMAND这个宏的。