桌面搜索-系统托盘 - 林建华的专栏
来源:百度文库 编辑:神马文学网 时间:2024/05/23 23:59:45
桌面搜索-系统托盘
在程序最小化时,不在windows的任务栏中出现,而是在右下角的系统托盘中显示一个小图标,当鼠标单击时显示功能菜单,双击时打开主界面。这就是系统托盘程序的一般功能,想qq和很多桌面搜索程序都是这么做了,给人的感觉比较清爽,不用的时候就缩在一个小角落里,用的时候也能很快的找到。
在技术实现上
首先是创建托盘:
void CDiskSearchDlg::InitTray()
{
m_NotifyID.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
m_NotifyID.hWnd=this->m_hWnd;
m_NotifyID.uID=IDR_MAINFRAME;
m_NotifyID.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
m_NotifyID.uCallbackMessage=WM_NOTIFYICON;//自定义的消息名称
m_NotifyID.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_NotifyID.szTip,"桌面搜索");//信息提示
Shell_NotifyIcon(NIM_ADD,&m_NotifyID);//在托盘区添加图标
}
上面的代码就是一个一般创建的方法,其中定义NOTIFYICONDATA m_NotifyID;
WM_NOTIFYICON是自定义的消息,我们可以用
#define WM_NOTIFYICON WM_USE+5
来定义
调用InitTray()后会在托盘上出现一个小图标,当然我们也同时要把任务栏中的程序任务去掉,只要调用ShowWindow(SW_HIDE)就可以了
接下来是创建一个菜单资源,假设为IDR_MENU_TP
然后要做的是添加WM_NOTIFYICON消息:
在BEGIN_MESSAGE_MAP(CDiskSearchDlg, CDialog)内要添加
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)//手工添加托盘消息映射
并定义函数
LONG CDiskSearchDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
//wParam中是响应消息的图标ID,lParam中则是Windows的消息
switch ( lParam )
{
case WM_RBUTTONDOWN:
{// 用户在托盘图标上单击鼠标右键,弹出菜单
CMenu pMenu;
if (pMenu.LoadMenu(IDR_MENU_TP))
{
CMenu* pPopup = pMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CPoint Point;
GetCursorPos( &Point );
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
}
}
break;
case WM_LBUTTONDBLCLK:
// OnMenuitemShow();
break;
case WM_LBUTTONDOWN:
{// 用户在托盘图标上单击鼠标右键,弹出菜单
CMenu pMenu;
if (pMenu.LoadMenu(IDR_MENU_TP))
{
CMenu* pPopup = pMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CPoint Point;
GetCursorPos( &Point );
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
}
}
break;
default:break;
}
return 0;
}
上面这段代码中,添加了鼠标单击的消息,双击和其他消息其实是一样的。
最后,在退出的时候记得要调用
Shell_NotifyIcon(NIM_DELETE, &m_NotifyID);
来把托盘图标删除。
当然还有做动画托盘,就是托盘上的图标是变化的,这个可以在上面的dlg类中添加Timer函数,定时更换图标就可以了。
在程序最小化时,不在windows的任务栏中出现,而是在右下角的系统托盘中显示一个小图标,当鼠标单击时显示功能菜单,双击时打开主界面。这就是系统托盘程序的一般功能,想qq和很多桌面搜索程序都是这么做了,给人的感觉比较清爽,不用的时候就缩在一个小角落里,用的时候也能很快的找到。
在技术实现上
首先是创建托盘:
void CDiskSearchDlg::InitTray()
{
m_NotifyID.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
m_NotifyID.hWnd=this->m_hWnd;
m_NotifyID.uID=IDR_MAINFRAME;
m_NotifyID.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
m_NotifyID.uCallbackMessage=WM_NOTIFYICON;//自定义的消息名称
m_NotifyID.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_NotifyID.szTip,"桌面搜索");//信息提示
Shell_NotifyIcon(NIM_ADD,&m_NotifyID);//在托盘区添加图标
}
上面的代码就是一个一般创建的方法,其中定义NOTIFYICONDATA m_NotifyID;
WM_NOTIFYICON是自定义的消息,我们可以用
#define WM_NOTIFYICON WM_USE+5
来定义
调用InitTray()后会在托盘上出现一个小图标,当然我们也同时要把任务栏中的程序任务去掉,只要调用ShowWindow(SW_HIDE)就可以了
接下来是创建一个菜单资源,假设为IDR_MENU_TP
然后要做的是添加WM_NOTIFYICON消息:
在BEGIN_MESSAGE_MAP(CDiskSearchDlg, CDialog)内要添加
ON_MESSAGE(WM_NOTIFYICON, OnNotifyIcon)//手工添加托盘消息映射
并定义函数
LONG CDiskSearchDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
//wParam中是响应消息的图标ID,lParam中则是Windows的消息
switch ( lParam )
{
case WM_RBUTTONDOWN:
{// 用户在托盘图标上单击鼠标右键,弹出菜单
CMenu pMenu;
if (pMenu.LoadMenu(IDR_MENU_TP))
{
CMenu* pPopup = pMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CPoint Point;
GetCursorPos( &Point );
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
}
}
break;
case WM_LBUTTONDBLCLK:
// OnMenuitemShow();
break;
case WM_LBUTTONDOWN:
{// 用户在托盘图标上单击鼠标右键,弹出菜单
CMenu pMenu;
if (pMenu.LoadMenu(IDR_MENU_TP))
{
CMenu* pPopup = pMenu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CPoint Point;
GetCursorPos( &Point );
SetForegroundWindow();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, Point.x, Point.y, this);
}
}
break;
default:break;
}
return 0;
}
上面这段代码中,添加了鼠标单击的消息,双击和其他消息其实是一样的。
最后,在退出的时候记得要调用
Shell_NotifyIcon(NIM_DELETE, &m_NotifyID);
来把托盘图标删除。
当然还有做动画托盘,就是托盘上的图标是变化的,这个可以在上面的dlg类中添加Timer函数,定时更换图标就可以了。
桌面搜索-系统托盘 - 林建华的专栏
使用JDesktop Integration Components实现桌面系统托盘
使用JDesktop Integration Components(JDIC)实现桌面系统托盘
google搜索原理论文 - baggio785的专栏
DeepWeb搜索文章-《查找"看不见的网页"的途径与工具》 - funson的专栏 - ...
推荐引擎:从搜索到发现 - java060515的专栏 - CSDNBlog
Win7搜索之体验! - y97523的专栏 - CSDN博客
如何集成Google桌面搜索的一个实际应用
桌面搜索软件的PDF全文检索性能-月亮实验室
让系统托盘上显示星期几的方法
系统托盘组件 TTrayIcon 简介 - 回复 "三足乌" 的问题
Google桌面搜索使总结
Google用搜索革掉了Yahoo和门户的命--艾瑞网专家周鸿祎的专栏
社会化搜索的探索之路——wiki篇 | 博客网-专栏文章
EMC创新日:基于行为关联的桌面搜索|IT168 存储
微软怒驳Google桌面搜索起诉
桌面搜索对比:微软还是Google?
桌面精品--绝妙的立体感桌面
系统托盘编程完全指南
系统托盘编程完全指南
国内最大的两个网盘(Rayfile和纳米盘)神秘资源搜索技巧 - A弦小筑 - 桌面天下官...
小技巧[xp下在系统托盘加上自己名字] - 电脑家园 - 创幻论坛 - 中国最好的股票论坛
六大改进:Google桌面搜索新功能体验记
Google桌面搜索漏洞修复仍潜在威胁