當(dāng)前位置:
首頁(yè) >
托盘程序开发
發(fā)布時(shí)間:2025/7/25
51
豆豆
托盤(pán)程序
OninitDialog()
在主界面的OninitDialog()函數(shù)里添加代碼
BOOL CMFC07trayiconDlg::OnInitDialog() {// TODO: 在此添加額外的初始化代碼NOTIFYICONDATA m_tnid;m_tnid.cbSize = sizeof(NOTIFYICONDATA);//設(shè)置結(jié)構(gòu)大小// m_tnid.hWnd = this->m_hWnd;//設(shè)置圖標(biāo)對(duì)應(yīng)的窗口 m_tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;//圖標(biāo)屬性 m_tnid.uCallbackMessage = WM_ICON_NOTIFY;//應(yīng)用程序定義的回調(diào)消息IDCString szToolTip;szToolTip = _T("INeed 客戶(hù)端程序");_tcscpy_s(m_tnid.szTip, szToolTip);//幫助信息 m_tnid.uID = IDR_MAINFRAME;//應(yīng)用程序圖標(biāo) m_tnid.hIcon = m_hIcon;//圖標(biāo)句柄 PNOTIFYICONDATA m_ptnid = &m_tnid;::Shell_NotifyIcon(NIM_ADD, m_ptnid);//增加圖標(biāo)到系統(tǒng)盤(pán)}定義一個(gè)自定義的消息。代碼放在主界面【.CPP】文件頂部。
#define WM_ICON_NOTIFY WM_USER+100關(guān)閉程序后自動(dòng)關(guān)閉托盤(pán)
在主界面對(duì)話(huà)框中的【屬性】-【消息】選項(xiàng)卡里的【W(wǎng)M_CLOSE】添加一OnClose()函數(shù),在程序關(guān)閉后,關(guān)閉托盤(pán)。
void CMFC07trayiconDlg::OnClose() {// TODO: Add your message handler code here and/or call defaultNOTIFYICONDATA nd = { 0 };nd.cbSize = sizeof(NOTIFYICONDATA);nd.hWnd = m_hWnd;nd.uID = IDR_MAINFRAME;nd.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;nd.uCallbackMessage = WM_ICON_NOTIFY;nd.hIcon = m_hIcon;Shell_NotifyIcon(NIM_DELETE, &nd);CDialogEx::OnClose(); }托盤(pán)最小化支持
在【屬性】-【Minimize Box】設(shè)置為【True】。設(shè)置為支持最小化按鈕。
在OnSyscommand()函數(shù)里,在最后的位置加入
if(nID == SC_MINIMIZE){ShowWindow(FALSE); //隱藏窗口}OnSysCommand()代碼。
void CMFC07trayiconDlg::OnSysCommand(UINT nID, LPARAM lParam) {if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}if (nID == SC_MINIMIZE){ShowWindow(FALSE); //隱藏窗口} }定義消息,托盤(pán)菜單實(shí)現(xiàn)
在MFC主界面的CPP文件代碼里找到【BEGIN_MESSAGE_MAP(CMFC07trayiconDlg, CDialogEx)】這個(gè)宏,往里面添加【ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)】,實(shí)現(xiàn)之前自定義消息的宏。
BEGIN_MESSAGE_MAP(CMFC07trayiconDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_CLOSE()ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification) // 添加的代碼 END_MESSAGE_MAP()在主界面的【.h】文件里聲明函數(shù)OnTrayNotification()
LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);定義代碼:
響應(yīng)鼠標(biāo)的左鍵和右鍵消息。
LRESULT CMFC07trayiconDlg::OnTrayNotification(WPARAM wParam, LPARAM lParam) {switch (lParam){case WM_LBUTTONDOWN:{AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);SetForegroundWindow();break;}case WM_RBUTTONUP:{POINT point;HMENU hMenu, hSubMenu;GetCursorPos(&point); //鼠標(biāo)位置hMenu = LoadMenu(NULL,MAKEINTRESOURCE(IDR_MENU_TRAY)); // 加載菜單hSubMenu = GetSubMenu(hMenu, 0);//得到子菜單(因?yàn)閺棾鍪讲藛问亲硬藛?SetForegroundWindow(); // 激活窗口并置前TrackPopupMenu(hSubMenu, 0,point.x, point.y, 0, m_hWnd, NULL);}}return LRESULT(); }IDR_MENU_TRAY是加載了一個(gè)菜單,所以要自己自定義【恢復(fù) ID_TRAY_RESTORE】、【退出 ID_TRAY_EXIT】
【恢復(fù) ID_TRAY_RESTORE】,OnTrayRestore()
void CmyfirstmfcDlg::OnTrayRestore() {AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOWNORMAL);SetForegroundWindow(); }【退出 ID_TRAY_EXIT】,OnTrayExit()
void CMFC07trayiconDlg::OnTrayExit() {// TODO: 在此添加命令處理程序代碼OnClose(); }轉(zhuǎn)載于:https://www.cnblogs.com/17bdw/p/10354679.html
總結(jié)
- 上一篇: C++ 之虚函数的实现原理
- 下一篇: HDU 4256 翻译罗马数字