本文章爲轉發百度空間內容,,保存一下,以防之後用到。。數組
1、自定義信息函數
在頭文件中加入下面這句話:
#define WM_SHOWTASK (WM_USER+1)this
2、MYDLG.CPP文件中添加_messageEntries數組添加自定義信息WM_SHOWTASK
ON_MESSAGE(WM_SHOWTASK,OnShowTask)//將自定義信息WM_SHOWTASK應用於OnShowTask
放置於BEGIN_MESSAGE_MAP(MYDlg, CDialog)==END_MESSAGE_MAP()之間事件
3、建立縮放函數ToTray()
void CNewMfcDlg::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); //在托盤區添加圖標
ShowWindow(SW_HIDE); //隱藏主窗口
} ip
4、建立信息處理函數OnShowTask
//wParam接收的是圖標的ID,而lParam接收的是鼠標的行爲
LRESULT CNewMfcDlg::OnShowTask(WPARAM wParam,LPARAM 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_DESTROY,"關閉"); //肯定彈出式菜單的位置
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;
} 資源
5、建立關閉程序函數DeleteTray()
void CNewMfcDlg::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,"程序名稱"); //信息提示條爲「計劃任務提醒」
Shell_NotifyIcon(NIM_DELETE,&nid); //在托盤區刪除圖標
}it
6、CNewMfcDlg::OnSysCommand函數中添加事件以觸發縮放到拖盤的功能以下:
void CNewMfcDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if(nID==SC_CLOSE) //SC_CLOSE:關閉程序時,SC_MINIMIZE:最小化程序時)
{
ToTray();
}百度
else if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}程序