单文档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();这两句注释掉也一样。急求高手释疑,不甚感激!!!!
#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();这两句注释掉也一样。急求高手释疑,不甚感激!!!!
解决方案 »
- msxml函数版本问题
- 请教win7下设备驱动安装慢问题,多谢!
- 请问大家都采用哪种方式访问数据库?
- 托盘图标闪烁效果怎么做的?
- 请问这个错误怎么解决serverDlg.obj : error LNK2001: unresolved external symbol "public: bool __thiscall .......
- c++高手请进,,,请教一个关于类模板的问题..即我给类模板传递一个类时,若该类也为类模板.....
- 关于TreeView刷新的问题.
- 利用TTS怎么读汉语拼音?
- 用cximage显示数据图像问题
- 我快要崩溃了,请教dll 调用问题
- 一个简单的问题
- 如何将客户区画上的曲线信息存起来
ON_MESSAGE 才需要WPARAM wParam,LPARAM lParam吧
初始化成员变量为0试试。