vc++应用程序最小化后在系统托盘显示小图标(2)
可以在对话框初始化函数中添加下面代码
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = m_hWnd; // handle of window that will receive
// messages from icon
nid.uID = IDR_MAINFRAME; // id for this icon
nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
// the next three parameters are valid
nid.uCallbackMessage = WM_SYSTEMTRAY;
// message that icon sends when clicked
nid.hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME );
// icon
//strcpy( nid.szTip, "System Tray Tip" );
wcscpy(nid.szTip, L"System Tray Tip");
//StrCpyW(&nid.szTip,"System Tray Tip");
// bubble help message for icon
::Shell_NotifyIcon( NIM_ADD,&nid );
响应最大最小消息,可以通过WM_SYSCOMMAND
void CSystemTrayDlg::OnSysCommand(UINT nID, LPARAM lParam)
...{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
...{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else if(nID == SC_MAXIMIZE) //最大化
...{
this->ShowWindow(SW_SHOWMAXIMIZED);
}
else if(nID == SC_MINIMIZE) //最小化,把他隐藏起来
...{
this->ShowWindow(FALSE);
}
else
...{
CDialog::OnSysCommand(nID, lParam);
}
}
在资源栏添加一个菜单资源,假如资源号为IDR_MENU
并且添加响应此菜单的函数
afx_msg void OnExit();
ON_COMMAND(ID_EXIT32774, OnExit)
void CSystemTrayDlg::OnExit()
...{
CDialog::OnCancel();
}
因为在退出程序的时候需要把小图标删除掉,所以在添加如下代码:
void CSystemTrayDlg::OnDestroy()
...{
NOTIFYICONDATA nid;
nid.cbSize = sizeof( NOTIFYICONDATA );
nid.hWnd = m_hWnd;
nid.uID = IDR_MAINFRAME;
nid.uFlags = 0;
::Shell_NotifyIcon( NIM_DELETE,&nid );
CDialog::OnDestroy();
}
- 上一篇:VC读取dat文件
- 下一篇:在VC上实现如何从内存中读取JPEG、GIF等图像