单文档SDI程序,关于托盘,debug,release。在MainFrame.h中定义:
#define WM_ICONMESSAGE WM_USER+13
class CMainFrame : public CFrameWnd
{
    ......
    //}}AFX_MSG
afx_msg void OnIconMessage(WPARAM wParam,LPARAM lParam);
         afx_msg void OnIconOpen(WPARAM wParam,LPARAM lParam);
         afx_msg void OnIconExit(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
    public:
HMENU m_menuIcon;
}在MainFrame.cpp中
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
         NOTIFYICONDATA nid;
nid.uID=ID_NID;
nid.cbSize=sizeof(nid);
nid.hIcon=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDR_MAINFRAME));
nid.hWnd=m_hWnd;
nid.uCallbackMessage=WM_ICONMESSAGE;
nid.uFlags=NIF_ICON|NIF_TIP|NIF_MESSAGE;
strcpy(nid.szTip,"远程机房空调集中监控");
Shell_NotifyIcon(NIM_ADD,&nid); m_menuIcon=CreatePopupMenu();
AppendMenu(m_menuIcon,0,IDM_ICON_OPEN,"打开窗口");
AppendMenu(m_menuIcon,0,IDM_ICON_EXIT,"退出程序");
}重载
LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
if(message==WM_SYSCOMMAND)
{
if(wParam==SC_MINIMIZE)
{
ShowWindow(SW_HIDE);
return 0;
}
}
return CFrameWnd::WindowProc(message, wParam, lParam);
}
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
          .......................
//}}AFX_MSG_MAP
ON_MESSAGE(WM_ICONMESSAGE,OnIconMessage)
         ON_COMMAND(IDM_ICON_OPEN,OnIconOpen)
         ON_COMMAND(IDM_ICON_EXIT,OnIconExit)
END_MESSAGE_MAP()void CMainFrame::OnIconMessage(WPARAM wParam,LPARAM lParam)
{
switch(lParam)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONDBLCLK:
ShowWindow(SW_SHOW);
return;
case WM_RBUTTONUP:
POINT pt;
::SetActiveWindow(m_hWnd);
GetCursorPos(&pt);
TrackPopupMenu(m_menuIcon,TPM_RIGHTALIGN,pt.x,pt.y,0,m_hWnd,NULL);
return;
}
}void CMainFrame::OnIconOpen(WPARAM wParam,LPARAM lParam)
{
        ShowWindow(SW_SHOW);
}void CMainFrame::OnIconExit(WPARAM wParam,LPARAM lParam)
{
        OnClose();
}问题现象如下:
   1.在debug模式下一切正常. 
   2.在release模式下:一旦托盘菜单弹出,点击任一个都会报访问内存错误,或该程序遇到问题需要关闭.即使把ShowWindow(SW_SHOW)和OnClose();这两句注释掉也一样。急求高手释疑,不甚感激!!!!