我做了个系统托盘菜单,添加了关闭和显示两个按钮,但是关闭按钮可以实现
而显示按钮却实现不了,为什么呢?
头文件里:afx_msg LRESULT    OnMyShowXXX();cpp里:#define WM_MYSHOWXXX WM_USER+1000
ON_MESSAGE(WM_MYSHOWXXX,OnMyShowXXX)以下是WM_RBUTTONUP的响应:LPPOINT    lpoint=new    tagPOINT;   
   ::GetCursorPos(lpoint);
   CMenu menu; 
   menu.CreatePopupMenu();
   menu.AppendMenu(MF_SEPARATOR);
   menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭"); 
   menu.AppendMenu(MF_STRING,WM_MYSHOWXXX,"显示");
    SetForegroundWindow();
   menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); 
   PostMessage(WM_NULL,   0,   0); 
   //资源回收   
   HMENU    hmenu=menu.Detach();   
   menu.DestroyMenu();   
   delete    lpoint;

解决方案 »

  1.   

    这里是消息响应函数:LRESULT    CMyDlg::OnMyShowXXX()
    {
    this->ShowWindow(SW_SHOW);
    Shell_NotifyIcon(NIM_DELETE,&nid);
    return 0;
    }
      

  2.   

    WM_MYSHOWXXX,是不是消息没加入消息映射?
      

  3.   

    不是有这句吗
    ON_MESSAGE(WM_MYSHOWXXX,OnMyShowXXX)此句位于BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
    和END_MESSAGE_MAP()中间
      

  4.   

    你看看普通菜单消息是如何响应的。点击菜单项发送的是WM_COMMAND消息,而不是你自己定义的消息。类似这种功能,其实最好先用资源编辑器添加好菜单,用向导添加好菜单响应函数,然后再把菜单添加到弹出菜单中。
      

  5.   

    #define WM_MYSHOWXXX WM_USER+1000 这个太大了吧。没看出问题。不过问题都出在细节上。好好检查下。
      

  6.   


    把所有  WM_MYSHOWXXX  换成 IDR_MYSHOWXXXON_MESSAGE(WM_MYSHOWXXX,OnMyShowXXX)换成ON_COMMAND(IDR_MYSHOWXXX,OnMyShowXXX)解决
    看来果然是细节决定成败啊
    谢谢各位