100分求个最小化到托盘的Demo 用VS2005的VC++实现的Demo要求,程序一启动就最小化到托盘,还有点托盘的图标,直接显示出来,不要先显示在任务栏上,然后去点任务栏才显示出来。网上也很多介绍的,就是没有比较详细的,最好能给个Demo。先表示感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 文档+代码系统托盘编程完全指南(一)http://www.vckbase.com/document/viewdoc/?id=492系统托盘编程完全指南(二)http://www.vckbase.com/document/viewdoc/?id=495系统托盘编程完全指南(三)http://www.vckbase.com/document/viewdoc/?id=498 要的是 用VS2005的VC++实现的Demo. 没用过VS2005, VS2005和VC6使用托盘没什么区别吧 运行后隐藏窗口,托盘,点击后,MoveWindow,ShowWindow 1.新建一个主菜单,在第一个根菜单中添加"关闭",标识符ID_MENU_CLOSE2.自定义个WM_SHOWTASK,分为如下几步:(1)在stdafx.h文件中添加消息的定义:#define WM_SHOWTASK WM_USER+1(2)在MainFrm中添加消息的声明:afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);(3)在BEGIN与END宏之间添加如下语句:ON_MESSAGE(WM_SHOWTASK,&CMainFrame::OnShowTask)其中ON_MESSAGE用户处理自定义消息,它的第一个参数是消息代码,第二个参数是消息体方法名(4)创建消息体:LRESULT CMainFrame::OnShowTask(WPARAM wParam,LPARAM lParam){//该消息的wParam是图标的标识符,lParam是消息代码}3.在类中定义如下成员变量:NOTIFYICONDATA notify;CMenu* menuPopup;4.在窗体的OnCreate方法体中加入NOTIFYICONDATA定义语句:notify.cbSize=(DWORD)sizeof(NOTIFYICONDATA);notify.hIcon=AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDR_MAINFRAME));notify.hWnd=this->GetSafeHwnd();CString hello=_T("欢聚"); _tcscpy_s(notify.szTip, hello.GetBuffer()); notify.uCallbackMessage=WM_SHOWTASK;notify.uFlags=NIF_MESSAGE|NIF_TIP|NIF_ICON;notify.uID=IDR_MAINFRAME;notify.uTimeout=2000;5.为了单击图标时呈现窗体,右击图标呈现菜单,需要实现WM_SHOWTASK方法体在CMainFrame::OnShowTask方法中加入:if(wParam!=IDR_MAINFRAME) return 0; switch(lParam) { case WM_RBUTTONDOWN: { this->SetForegroundWindow(); //加入此句使得当鼠标离开菜单时,菜单消失. POINT point; ::GetCursorPos(&point);//得到鼠标位置 CMenu menu; menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));//声明一个弹出式菜单 //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已 //隐藏),将程序结束。 menuPopup=menu.GetSubMenu(0); //确定弹出式菜单的位置 menuPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); //资源回收 break; } case WM_LBUTTONDOWN: ShowWindow(SW_SHOW); Shell_NotifyIcon(NIM_DELETE,¬ify); break; } return 0;6.当窗体最小值时,呈现托盘图标声明如下方法:virtual LRESULT WindowProc(UINT message,WPARAM wParam,LPARAM lParam);实现此方法:LRESULT CMainFrame::WindowProc(UINT message,WPARAM wParam,LPARAM lParam){ if(message==WM_SYSCOMMAND) { if(wParam==SC_MINIMIZE) { Shell_NotifyIcon(NIM_ADD,¬ify); ShowWindow(SW_HIDE); return 0; } } return CFrameWnd::WindowProc(message,wParam,lParam);}7.实现关闭菜单项的事件:加下如下消息声明:afx_msg void OnClose();注册此消息:ON_COMMAND(IDC_BUTTON1,&CNotifyIConsDlg::OnButton1)实现消息体:void CMainFrame::OnClose(){ ::PostQuitMessage(0);}8.当窗体关闭时,托盘图标要自动消失:重载OnDestory方法:virtual void OnDestroy();实现方法体:void CMainFrame::OnDestroy(){ Shell_NotifyIcon(NIM_DELETE,¬ify);} 急 !!! 如何改进 win消息处理机制 在paint方法中动态改变工具栏上按钮风格求助 如何在stringtable中写入多行字符串呢 请教高手,在客户区绘图后怎样保存为位图文件? formview的图形处理问题 我要做个无界面的服务程序,还想再做个界面管理(显示)服务程序的数据,就象“SQLServer的服务管理器”,请问界面程序读服务程序"数据"
http://www.vckbase.com/document/viewdoc/?id=492
系统托盘编程完全指南(二)
http://www.vckbase.com/document/viewdoc/?id=495
系统托盘编程完全指南(三)
http://www.vckbase.com/document/viewdoc/?id=498
2.自定义个WM_SHOWTASK,分为如下几步:
(1)在stdafx.h文件中添加消息的定义:
#define WM_SHOWTASK WM_USER+1
(2)在MainFrm中添加消息的声明:
afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam);
(3)在BEGIN与END宏之间添加如下语句:
ON_MESSAGE(WM_SHOWTASK,&CMainFrame::OnShowTask)
其中ON_MESSAGE用户处理自定义消息,它的第一个参数是消息代码,第二个参数是消息体方法名
(4)创建消息体:
LRESULT CMainFrame::OnShowTask(WPARAM wParam,LPARAM lParam)
{
//该消息的wParam是图标的标识符,lParam是消息代码
}
3.在类中定义如下成员变量:
NOTIFYICONDATA notify;
CMenu* menuPopup;
4.在窗体的OnCreate方法体中加入NOTIFYICONDATA定义语句:
notify.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
notify.hIcon=AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDR_MAINFRAME));
notify.hWnd=this->GetSafeHwnd();
CString hello=_T("欢聚");
_tcscpy_s(notify.szTip, hello.GetBuffer());
notify.uCallbackMessage=WM_SHOWTASK;
notify.uFlags=NIF_MESSAGE|NIF_TIP|NIF_ICON;
notify.uID=IDR_MAINFRAME;
notify.uTimeout=2000;
5.为了单击图标时呈现窗体,右击图标呈现菜单,需要实现WM_SHOWTASK方法体
在CMainFrame::OnShowTask方法中加入:
if(wParam!=IDR_MAINFRAME) return 0;
switch(lParam)
{
case WM_RBUTTONDOWN:
{
this->SetForegroundWindow(); //加入此句使得当鼠标离开菜单时,菜单消失.
POINT point;
::GetCursorPos(&point);//得到鼠标位置
CMenu menu;
menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));//声明一个弹出式菜单
//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
//隐藏),将程序结束。
menuPopup=menu.GetSubMenu(0);
//确定弹出式菜单的位置
menuPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
//资源回收
break;
}
case WM_LBUTTONDOWN:
ShowWindow(SW_SHOW);
Shell_NotifyIcon(NIM_DELETE,¬ify);
break;
}
return 0;
6.当窗体最小值时,呈现托盘图标
声明如下方法:
virtual LRESULT WindowProc(UINT message,WPARAM wParam,LPARAM lParam);
实现此方法:
LRESULT CMainFrame::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)
{
if(message==WM_SYSCOMMAND)
{
if(wParam==SC_MINIMIZE)
{
Shell_NotifyIcon(NIM_ADD,¬ify);
ShowWindow(SW_HIDE);
return 0;
}
}
return CFrameWnd::WindowProc(message,wParam,lParam);
}
7.实现关闭菜单项的事件:
加下如下消息声明:
afx_msg void OnClose();
注册此消息:
ON_COMMAND(IDC_BUTTON1,&CNotifyIConsDlg::OnButton1)
实现消息体:
void CMainFrame::OnClose()
{
::PostQuitMessage(0);
}
8.当窗体关闭时,托盘图标要自动消失:
重载OnDestory方法:
virtual void OnDestroy();
实现方法体:
void CMainFrame::OnDestroy()
{
Shell_NotifyIcon(NIM_DELETE,¬ify);
}