最小化程序到托盘,并且有右键菜单!
2007-11-30 10:21
330 查看
1.定义全局变量和消息
NOTIFYICONDATA nid;
#define WM_ICONNOTIFY WM_USER + 909 //图标响应消息(lParam)
#define ID_TASKBARICON 100 //参数(wParam)
/**//////////////////////////////////////////////////////////////////////////////
2。编写onsize事件函数
void CMainFrame::OnSize(UINT nType, int cx, int cy)
...{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if ( nType == SIZE_MINIMIZED)
...{
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;;
nid.uID = ID_TASKBARICON; //发出的消息中的wParam参数
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip, "聊天");
Shell_NotifyIcon(NIM_ADD, &nid); //加入图标
ShowWindow(SW_HIDE); //隐藏窗体
}
}
附加:如果要改变程序的风格可以添加下面代码
void CYOUclass::OnShowWindow(BOOL bShow, UINT nStatus)
{
CPropertySheet::OnShowWindow(bShow, nStatus);
this->ModifyStyle(WS_POPUP ,/*WS_MAXIMIZEBOX|*/WS_MINIMIZEBOX/*|WS_OVERLAPPEDWINDOW*/);
this->ModifyStyleEx(WS_EX_DLGMODALFRAME,WS_EX_OVERLAPPEDWINDOW );
// TODO: 在此处添加消息处理程序代码
}
3。编写自定义的消息
LRESULT CMainFrame::onNotifyIcon(WPARAM wparam , LPARAM lparam)
...{
POINT rpoint;
CMenu tmenu;
GetCursorPos(&rpoint);
//如果在托盘图标上双击左键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_LBUTTONDBLCLK ) )
...{
ShowWindow(SW_SHOW); //显示窗体
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &nid); //删除系统托盘图标
}
//如果在托盘图标上双击右键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_RBUTTONDOWN ) )
...{
tmenu.LoadMenu(IDR_MAINFRAME); //加载系统主菜单
SetForegroundWindow(); //将程序置于桌面顶部
tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在点击图标处弹出系统菜单的第一项
}
return 0;
}
NOTIFYICONDATA nid;
#define WM_ICONNOTIFY WM_USER + 909 //图标响应消息(lParam)
#define ID_TASKBARICON 100 //参数(wParam)
/**//////////////////////////////////////////////////////////////////////////////
2。编写onsize事件函数
void CMainFrame::OnSize(UINT nType, int cx, int cy)
...{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if ( nType == SIZE_MINIMIZED)
...{
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;;
nid.uID = ID_TASKBARICON; //发出的消息中的wParam参数
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip, "聊天");
Shell_NotifyIcon(NIM_ADD, &nid); //加入图标
ShowWindow(SW_HIDE); //隐藏窗体
}
}
附加:如果要改变程序的风格可以添加下面代码
void CYOUclass::OnShowWindow(BOOL bShow, UINT nStatus)
{
CPropertySheet::OnShowWindow(bShow, nStatus);
this->ModifyStyle(WS_POPUP ,/*WS_MAXIMIZEBOX|*/WS_MINIMIZEBOX/*|WS_OVERLAPPEDWINDOW*/);
this->ModifyStyleEx(WS_EX_DLGMODALFRAME,WS_EX_OVERLAPPEDWINDOW );
// TODO: 在此处添加消息处理程序代码
}
3。编写自定义的消息
LRESULT CMainFrame::onNotifyIcon(WPARAM wparam , LPARAM lparam)
...{
POINT rpoint;
CMenu tmenu;
GetCursorPos(&rpoint);
//如果在托盘图标上双击左键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_LBUTTONDBLCLK ) )
...{
ShowWindow(SW_SHOW); //显示窗体
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &nid); //删除系统托盘图标
}
//如果在托盘图标上双击右键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_RBUTTONDOWN ) )
...{
tmenu.LoadMenu(IDR_MAINFRAME); //加载系统主菜单
SetForegroundWindow(); //将程序置于桌面顶部
tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在点击图标处弹出系统菜单的第一项
}
return 0;
}
相关文章推荐
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- C#窗体程序入门,实现3秒倒计时关闭显示器,实现系统托盘,右键菜单。
- MFC基于对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能
- WinForm最小化到托盘以及托盘右键菜单
- C# WinForm窗口最小化到系统托盘 右键操作菜单
- C# WinForm窗口最小化到系统托盘 右键操作菜单
- C#实现窗体最小化时存至系统托盘,并为notifyicon添加右键菜单
- Delphi 最小化程序到任务栏托盘 增加右键PopMenu
- 程序托盘图标+右键弹出菜单
- MFC 程序托盘右键菜单 自绘.
- 右键弹出菜单+最小化按钮到系统托盘+提示信息
- C#实现窗体最小化时存至系统托盘,并为notifyicon添加右键菜单
- SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
- win32进阶之路:程序托盘图标+右键弹出菜单
- 给最小化托盘增加右键菜单
- WPF实现窗口最小化到托盘,并且实现右击菜单
- C# WinForm窗口最小化到系统托盘 右键操作菜单
- WinForm最小化到托盘以及托盘右键菜单(转),略修改
- [转] 系统托盘编程 包括最小化到托盘,气泡提示信息,右键菜单。