我在网上下了个托盘程序,单击托盘中菜单项的“关闭”时没反应!!!!
LRESULT CMp3TideDlg::onShowTask(WPARAM wParam,LPARAM lParam) 
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 

if(wParam!=IDR_MAINFRAME) 
return 1; 
switch(lParam) 

case WM_RBUTTONUP://右键起来时弹出快捷菜单
{  LPPOINT lpoint=new tagPOINT; 
::GetCursorPos(lpoint);//得到鼠标位置 
CMenu menu; 
menu.CreatePopupMenu();//声明一个弹出式菜单 
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 
//隐藏),将程序结束。 
//menu.AppendMenu(MF_STRING,WM_NCDESTROY,_T("打开")); 
menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); 
//确定弹出式菜单的位置 
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); 
//SetForegroundWindow();   
  //   在TrackPopupMenu前加上这句,可以让点击右键菜单时,弹出的菜单能自动消失   
 // ppopmenu->TrackPopupMenu(TPM_CENTERALIGN,point.x,point.y,this,NULL);   
///资源回收 
HMENU hmenu=menu.Detach(); 
menu.DestroyMenu(); 
delete lpoint; 

break; 
case WM_LBUTTONDBLCLK://双击左键的处理 

this->ShowWindow(SW_SHOW);//显示主窗口

break; 

return 0; 
}
http://zhidao.baidu.com/question/39126833.html 我再这个地方下的!

解决方案 »

  1.   

    点击菜单后发送的是WM_COMMAND消息,你要自己响应菜单命令消息然后再发送WM_DESTROY消息。
      

  2.   

    WM_DESTROY消息不应该由你手工发送或者通过菜单发送,它是在窗口被destroy由系统发送得,也就是你调用DestroyWindow或者CDialog::OnOK/OnCancel系统才发送,菜单不会发送这个。如果你想关闭窗口,不要重用系统消息,你应该自己定义一个消息,在其消息处理函数中调用OnOK
      

  3.   

    原来你在啊!~~~~~~~~~~~~
    是在这里面写面?怎么写啊?我在这里面写了一句:if(nID == WM_DESTROY) 没反应!
    void CMp3TideDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
    CAboutDlg dlgAbout;
    dlgAbout.DoModal();
    }
    else
    {

    CDialog::OnSysCommand(nID, lParam);
    }
    }
      

  4.   

    OnSysCommand响应的是WM_SYSCOMMAND消息……