使用VC++进行Tray区编程
1.使用向导建立一个MFC对话框应用程序,假设叫TrayDemo
2.增加消息处理函数 virtual BOOL OnInitDialog(); afx_msg void OnDestroy(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg LRESULT OnTrayNotify(WPARAM wParam,LPARAM lParam); // 手动增加
3.在TrayDemoDlg.h中增加成员 private: NOTIFYICONDATA m_nfData;
4.在TrayDemoDlg.cpp增加以下语句 在文件前部增加 #define WM_TRAY_NOTIFY WM_USER+100 #define ID_TRAY_ICON 1
在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间手动增加 ON_MESSAGE(WM_TRAY_NOTIFY,OnTrayNotify)
在CTrayDemoDlg::OnInitDialog()函数中增加 m_nfData.cbSize=sizeof(m_nfData); m_nfData.hWnd=GetSafeHwnd(); m_nfData.uID=ID_TRAY_ICON; m_nfData.uFlags=NIF_ICON | NIF_TIP | NIF_MESSAGE; m_nfData.uCallbackMessage=WM_TRAY_NOTIFY; m_nfData.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); CString strTip("I,Robot"); strcpy(m_nfData.szTip,strTip); Shell_NotifyIcon(NIM_ADD,&m_nfData); // 启动时,加到Tray区中 m_nfData.uFlags=NIF_TIP;
在CTrayDemoDlg::OnDestroy()函数中增加 Shell_NotifyIcon(NIM_DELETE ,&m_nfData); // 退出时,从Tray区中删除
修改CTrayDemoDlg::OnSize(UINT nType, int cx, int cy)函数为 if(nType==SIZE_MINIMIZED) { ShowWindow(SW_HIDE); } else CDialog::OnSize(nType, cx, cy);
增加OnTrayNotify函数 LRESULT CTrayDemoDlg::OnTrayNotify(WPARAM /*wParam*/,LPARAM lParam) { if(lParam==WM_LBUTTONDOWN) { ShowWindow(SW_RESTORE); SetForegroundWindow(); } else if(lParam==WM_RBUTTONDOWN) { POINT pos; CMenu menuPopup; GetCursorPos(&pos); menuPopup.LoadMenu(IDR_POPUP); menuPopup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pos.x,pos.y,this); }
return 0; }
5.增加一个浮动菜单IDR_POPUP

|