關(guān)于在MFC中將窗口最小化到托盤實(shí)現(xiàn)原理及操作步驟
更新時間:2013年01月28日 10:38:52 作者:
最小化的原理:首先要將窗口隱藏,然后在右下角繪制圖標(biāo);恢復(fù)的原理:將窗口顯示,再將托盤中的圖片刪除,接下來介紹實(shí)現(xiàn)方法,感興趣的朋友可以了解下啊,希望本文對你有所幫助
步驟/方法
(一) 原理
1、最小化的原理:首先要將窗口隱藏,然后在右下角繪制圖標(biāo)。
2、恢復(fù)的原理:將窗口顯示,再將托盤中的圖片刪除。
(二)程序?qū)崿F(xiàn)
1、自定義消息WM_SHOWTASK:
#define WM_SHOWTASK (WM_USER +1)
2、在MFC的
::OnSysCommand(UINT nID, LPARAM lParam) 函數(shù)體中增加一個命令響應(yīng)
if(nID==SC_MINIMIZE)
ToTray(); //最小化到托盤的函數(shù)
3、在消息映射中添加
ON_MESSAGE(WM_SHOWTASK,OnShowTask); //其中WM_SHOWTASK是消息名,
OnShowTask是自己定義的消息響應(yīng)函數(shù),后面有說明。
(三)具體函數(shù)內(nèi)容
1、最小化到托盤函數(shù)
void CMyDlg::ToTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"程序名稱"); //信息提示條
Shell_NotifyIcon(NIM_ADD,&nid); //在托盤區(qū)添加圖標(biāo)
ShowWindow(SW_HIDE); //隱藏主窗口
}
2、恢復(fù)界面函數(shù)
在頭文件中定義消息響應(yīng)函數(shù)
afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;
//wParam接收的是圖標(biāo)的ID,而lParam接收的是鼠標(biāo)的行為
LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右鍵起來時彈出快捷菜單,這里只有一個“關(guān)閉”
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠標(biāo)位置
CMenu menu;
menu.CreatePopupMenu();//聲明一個彈出式菜單
menu.AppendMenu(MF_STRING,WM_DESTROY,"關(guān)閉"); //增加菜單項(xiàng)“關(guān)閉”,點(diǎn)擊則發(fā)送消息WM_DESTROY給主窗口(已隱藏),將程序結(jié)束。
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //確定彈出式菜單的位置
HMENU hmenu=menu.Detach();
menu.DestroyMenu(); //資源回收
delete lpoint;
} break;
case WM_LBUTTONDBLCLK: //雙擊左鍵的處理
{
this->ShowWindow(SW_SHOW);//簡單的顯示主窗口完事兒
DeleteTray();
} break;
default: break;
}
return 0;
}
刪除托盤圖標(biāo)函數(shù)
void CMyDlg::DeleteTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK; //自定義的消息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"程序名稱"); //信息提示條為“計(jì)劃任務(wù)提醒”
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盤區(qū)刪除圖標(biāo)
}
(一) 原理
1、最小化的原理:首先要將窗口隱藏,然后在右下角繪制圖標(biāo)。
2、恢復(fù)的原理:將窗口顯示,再將托盤中的圖片刪除。
(二)程序?qū)崿F(xiàn)
1、自定義消息WM_SHOWTASK:
#define WM_SHOWTASK (WM_USER +1)
2、在MFC的
::OnSysCommand(UINT nID, LPARAM lParam) 函數(shù)體中增加一個命令響應(yīng)
if(nID==SC_MINIMIZE)
ToTray(); //最小化到托盤的函數(shù)
3、在消息映射中添加
ON_MESSAGE(WM_SHOWTASK,OnShowTask); //其中WM_SHOWTASK是消息名,
OnShowTask是自己定義的消息響應(yīng)函數(shù),后面有說明。
(三)具體函數(shù)內(nèi)容
1、最小化到托盤函數(shù)
復(fù)制代碼 代碼如下:
void CMyDlg::ToTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"程序名稱"); //信息提示條
Shell_NotifyIcon(NIM_ADD,&nid); //在托盤區(qū)添加圖標(biāo)
ShowWindow(SW_HIDE); //隱藏主窗口
}
2、恢復(fù)界面函數(shù)
在頭文件中定義消息響應(yīng)函數(shù)
復(fù)制代碼 代碼如下:
afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;
//wParam接收的是圖標(biāo)的ID,而lParam接收的是鼠標(biāo)的行為
LRESULT CMyDlg::OnShowTask(WPARAM wParam,LPARAM lParam)
{
if(wParam!=IDR_MAINFRAME)
return 1;
switch(lParam)
{
case WM_RBUTTONUP://右鍵起來時彈出快捷菜單,這里只有一個“關(guān)閉”
{
LPPOINT lpoint=new tagPOINT;
::GetCursorPos(lpoint);//得到鼠標(biāo)位置
CMenu menu;
menu.CreatePopupMenu();//聲明一個彈出式菜單
menu.AppendMenu(MF_STRING,WM_DESTROY,"關(guān)閉"); //增加菜單項(xiàng)“關(guān)閉”,點(diǎn)擊則發(fā)送消息WM_DESTROY給主窗口(已隱藏),將程序結(jié)束。
menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this); //確定彈出式菜單的位置
HMENU hmenu=menu.Detach();
menu.DestroyMenu(); //資源回收
delete lpoint;
} break;
case WM_LBUTTONDBLCLK: //雙擊左鍵的處理
{
this->ShowWindow(SW_SHOW);//簡單的顯示主窗口完事兒
DeleteTray();
} break;
default: break;
}
return 0;
}
刪除托盤圖標(biāo)函數(shù)
復(fù)制代碼 代碼如下:
void CMyDlg::DeleteTray()
{
NOTIFYICONDATA nid;
nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd=this->m_hWnd;
nid.uID=IDR_MAINFRAME;
nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
nid.uCallbackMessage=WM_SHOWTASK; //自定義的消息名稱
nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip,"程序名稱"); //信息提示條為“計(jì)劃任務(wù)提醒”
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盤區(qū)刪除圖標(biāo)
}
相關(guān)文章
C語言中auto,register,static,const,volatile的區(qū)別詳細(xì)解析
以下是對C語言中auto,register,static,const,volatile的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09Qt實(shí)戰(zhàn)之實(shí)現(xiàn)圖片瀏覽器
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡易的圖片瀏覽器,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以了解一下2023-03-03C++?Boost?StringAlgorithms超詳細(xì)講解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11