MFC程序最小化托盘显示
2013-11-17 02:16
316 查看
以单文档为例:
在CMainFrame中定义全局变量:
#define WM_MY_MESSAGE (WM_USER+101)
NOTIFYICONDATA ntf;
消息映射如下:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_SIZE()
ON_MESSAGE(WM_MY_MESSAGE, OnMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
自定义消息如下:
CMainFrame::~CMainFrame()
{
Shell_NotifyIcon(NIM_DELETE,&ntf);
WriteLog("守护程序已退出!");
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}
AutoStart();
ntf.cbSize=sizeof(NOTIFYICONDATA);
ntf.hWnd=this->m_hWnd;
ntf.uID=IDR_MAINFRAME;
ntf.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_WDG));//IDR_MAINFRAME));
strcpy(ntf.szTip,"INMS监控客户端");
ntf.uCallbackMessage=WM_MY_MESSAGE;
ntf.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&ntf);
m_watchThread=AfxBeginThread(WatchThread,(LPVOID)NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
return 0;
}
初始化如下:
LRESULT CMainFrame::OnMessage(WPARAM wparam,LPARAM lparam)
{
switch(lparam)
{
case WM_LBUTTONDOWN:
{
在CMainFrame中定义全局变量:
#define WM_MY_MESSAGE (WM_USER+101)
NOTIFYICONDATA ntf;
消息映射如下:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_SIZE()
ON_MESSAGE(WM_MY_MESSAGE, OnMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
protected: //{{AFX_MSG(CMainFrame) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); // afx_msg void OnSetFocus(CWnd *pOldWnd); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg LRESULT OnMessage(WPARAM wParam, LPARAM lParam); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
自定义消息如下:
CMainFrame::~CMainFrame()
{
Shell_NotifyIcon(NIM_DELETE,&ntf);
WriteLog("守护程序已退出!");
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// create a view to occupy the client area of the frame
if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL))
{
TRACE0("Failed to create view window\n");
return -1;
}
AutoStart();
ntf.cbSize=sizeof(NOTIFYICONDATA);
ntf.hWnd=this->m_hWnd;
ntf.uID=IDR_MAINFRAME;
ntf.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_WDG));//IDR_MAINFRAME));
strcpy(ntf.szTip,"INMS监控客户端");
ntf.uCallbackMessage=WM_MY_MESSAGE;
ntf.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&ntf);
m_watchThread=AfxBeginThread(WatchThread,(LPVOID)NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
return 0;
}
初始化如下:
LRESULT CMainFrame::OnMessage(WPARAM wparam,LPARAM lparam)
{
switch(lparam)
{
case WM_LBUTTONDOWN:
{
if(wparam==IDR_MAINFRAME) { POINT pt; GetCursorPos(&pt); AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL); SetForegroundWindow(); break; }
} break; case WM_RBUTTONUP: { POINT point; HMENU hMenu, hSubMenu; GetCursorPos(&point); //鼠标位置 hMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_MENU)); hSubMenu = GetSubMenu(hMenu, 0);//得到子菜单(因为弹出式菜单是子菜单) SetMenuDefaultItem(hSubMenu, -1, FALSE);//设置缺省菜单项,-1为无缺省项 SetForegroundWindow(); // 激活窗口并置前 CMainFrame::m_bAutoMenuEnable=FALSE; //这句就是用来使用菜单项有效的. int n = TrackPopupMenu(hSubMenu, TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_LEFTALIGN|TPM_RETURNCMD, point.x, point.y, 0, m_hWnd, NULL); switch(n) //上面返回的n值,当没有选中任何菜单项时,为0,否则,为被选中项的ID. { case IDM_EXIT: bExitThread=true; ExitMyProcess(); SendMessage(WM_CLOSE,0,0); break; } } } return 0; } void CMainFrame::OnSize(UINT nType, int cx, int cy) { CFrameWnd::OnSize(nType, cx, cy); if (SIZE_MINIMIZED==nType) ShowWindow(SW_HIDE); }即可。
相关文章推荐
- Visual C++中MFC消息的分类
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
- VS2010/MFC编程入门之四(MFC应用程序框架分析)
- VS2010/MFC编程入门之五(MFC消息映射机制概述)
- VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)
- VS2010/MFC编程入门之七(对话框:为对话框添加控件)
- VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)
- VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)
- VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)
- VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)
- VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
- VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)
- VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)
- VS2010/MFC编程入门之十六(对话框:消息对话框)
- VS2010/MFC编程入门之十七(对话框:文件对话框)
- VS2010/MFC编程入门之十八(对话框:字体对话框)