头文件:
#define WM_SHOWTASK WM_USER+1
class XxxDlg : public CDialogEx { // Construction public: XxxDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data enum { IDD = IDD_MFCTESTAPPLICATION_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support // Implementation protected: HICON m_hIcon; // Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam); DECLARE_MESSAGE_MAP() public: NOTIFYICONDATA m_nid; afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnDestroy(); };
cpp文件:
CMFCTestApplicationDlg::CMFCTestApplicationDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMFCTestApplicationDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); }
BEGIN_MESSAGE_MAP(CMFCTestApplicationDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_SHOWTASK, OnShowTask) ON_WM_SIZE() ON_WM_DESTROY() END_MESSAGE_MAP()
BOOL CMFCTestApplicationDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here CMenu* menu = this->GetSystemMenu(FALSE); menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED); m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); m_nid.hWnd = this->m_hWnd; m_nid.uID = IDR_MAINFRAME; m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称 m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); wcscpy_s(m_nid.szTip, _T("自制播放器")); // 信息提示条为"服务器程序" Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标 return TRUE; // return TRUE unless you set the focus to a control }
void CMFCTestApplicationDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if(nType == SIZE_MINIMIZED) { ShowWindow(SW_HIDE); // 当最小化时,隐藏主窗口 } // TODO: Add your message handler code here } void CMFCTestApplicationDlg::OnDestroy() { CDialogEx::OnDestroy(); // TODO: Add your message handler code here // 系统关闭时在托盘区删除图标 Shell_NotifyIcon(NIM_DELETE, &m_nid); }
