托盘类(转)

发布时间:2016-12-8 8:25:16 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"托盘类(转)",主要涉及到托盘类(转)方面的内容,对于托盘类(转)感兴趣的同学可以参考一下。

昨天为了实现客户端最小化到系统托盘整了一个下午,下面是我的实现过程: 一.为了以后使用方便,我把实现系统托盘做成了一个类:CSysTray CSysTray的实现过程: // SysTray.h: interface for the CSysTray class. //实现系统托盘类头文件 ////////////////////////////////////////////////////////////////////// #if !defined(AFX_SYSTRAY_H__068EBD42_FD13_4CB5_800D_74A9D52E8C7F__INCLUDED_) #define AFX_SYSTRAY_H__068EBD42_FD13_4CB5_800D_74A9D52E8C7F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CSysTray   { public:  CSysTray();  virtual ~CSysTray(); public:  BOOL AddIcon();  BOOL SetIcon(HICON hNewIcon);  BOOL SetIcon(DWORD dwIconID);  HICON GetIcon();  BOOL SetTipText(char *lpszNewTipText);  char *GetTipText();  BOOL RemoveIcon();  HWND hWnd;  UINT uID; protected:  NOTIFYICONDATA NotifyIconData;  BOOL m_bInTray; }; #endif // !defined(AFX_SYSTRAY_H__068EBD42_FD13_4CB5_800D_74A9D52E8C7F__INCLUDED_) // SysTray.cpp: implementation of the CSysTray class. //实现系统托盘的封装类 //Ahui Wang ////////////////////////////////////////////////////////////////////// #i nclude "stdafx.h" #i nclude "HCC.h" #i nclude "SysTray.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CSysTray::CSysTray() {  m_bInTray=FALSE;  NotifyIconData.cbSize=sizeof(NotifyIconData);  NotifyIconData.uID=uID=2;  NotifyIconData.uFlags=NIF_ICON|NIF_TIP|NIF_MESSAGE;  NotifyIconData.uCallbackMessage=WM_COMMAND;//重载系统消息处理系统托盘  //还可以按上一篇文章中那样自定义消息,添加消息处理函数  NotifyIconData.hIcon=LoadIcon(NULL,IDI_APPLICATION);  NotifyIconData.szTip[0]='/0';  NotifyIconData.hWnd=NULL; } CSysTray::~CSysTray() { } HICON CSysTray::GetIcon(){  return(NotifyIconData.hIcon); } BOOL CSysTray::SetIcon(HICON hNewIcon){  NotifyIconData.hIcon=hNewIcon;  if(m_bInTray){   BOOL iRetVal;   iRetVal=Shell_NotifyIcon(NIM_MODIFY,&NotifyIconData);   if(iRetVal){    m_bInTray=TRUE;   }   return(iRetVal);  }  else return(1); } BOOL CSysTray::SetIcon(DWORD dwIconID){  HICON hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(dwIconID));  return SetIcon(hIcon); } BOOL CSysTray::SetTipText(char *lpszNewTipText){  strcpy(NotifyIconData.szTip,lpszNewTipText);  if(m_bInTray){   BOOL iRetVal=Shell_NotifyIcon(NIM_MODIFY,&NotifyIconData);   if(iRetVal){    m_bInTray=TRUE;   }   return(iRetVal);  }  else return(1); } BOOL CSysTray::AddIcon(){  NotifyIconData.hWnd=hWnd;  NotifyIconData.uID=(unsigned int)hWnd;  NotifyIconData.uCallbackMessage=WM_COMMAND;  NotifyIconData.uID=0;  BOOL iRetVal=Shell_NotifyIcon(NIM_ADD,&NotifyIconData);  if(iRetVal){   m_bInTray=TRUE;  }  return(iRetVal); } BOOL CSysTray::RemoveIcon(){  BOOL iRetVal=Shell_NotifyIcon(NIM_DELETE,&NotifyIconData);  if(iRetVal){   m_bInTray=FALSE;  }  return(iRetVal); } char* CSysTray::GetTipText(){  return(NotifyIconData.szTip); } 二.系统托盘的使用: BOOL CHCCDlg::OnInitDialog() {  //................  //------------------------------------------------  //加载显示托盘:  SystemTray.hWnd=GetSafeHwnd();  SystemTray.SetTipText("Handphone Control Client");  SystemTray.AddIcon();  SystemTray.SetIcon(IDR_MAINFRAME);  //------------------------------------------------  //................ } //为了添加右键弹出菜单功能,给对话框加几个隐藏按钮 //并且把IDCOK 和IDCCANCLE的处理改变一下: //************************************************************************************** //隐藏按钮消息处理: void CHCCDlg::OnOK()  {  OnConnect();  } void CHCCDlg::OnCancel() {  ShowWindow(SW_HIDE); } void CHCCDlg::OnShow()  {  ShowWindow(SW_SHOW); } void CHCCDlg::OnHide()  {  ShowWindow(SW_HIDE);  } void CHCCDlg::OnQuit()  {  SystemTray.RemoveIcon();  PostMessage(WM_QUIT); } //********************************************************************************* //重载OnCommand响应托盘区消息: BOOL CHCCDlg::OnCommand(WPARAM wParam,LPARAM lParam){  if(wParam==0){   switch(lParam)   {   case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”   {    LPPOINT lpoint=new tagPOINT;    ::GetCursorPos(lpoint);//得到鼠标位置    CMenu menu;    menu.CreatePopupMenu();//声明一个弹出式菜单    //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已    //隐藏),将程序结束。    menu.AppendMenu(MF_STRING,IDC_CONNECT,"连接服务器");    menu.AppendMenu(MF_STRING,IDC_CLOSECONNECTION,"关闭连接");    menu.AppendMenu(MF_STRING,IDC_HIDE,"隐藏窗口");    menu.AppendMenu(MF_STRING,IDC_SHOW,"显示窗口");    menu.AppendMenu(MF_STRING,IDC_QUIT,"退出程序");     //确定弹出式菜单的位置    menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);    //资源回收    HMENU hmenu=menu.Detach();    menu.DestroyMenu();    delete lpoint;   }   break;   case WM_LBUTTONDBLCLK://左键双击的处理   {    ShowWindow(SW_SHOW);//简单的显示主窗口    SetFocus();   }   break;   }  }  return CDialog::OnCommand(wParam,lParam); }         -------------------------------------------------------------- NOTIFYICONDATA IconData = {0}; IconData.cbSize = sizeof(NOTIFYICONDATA); IconData.hWnd = this->Handle; IconData.uID=0; IconData.uFlags = NIF_INFO | NIF_ICON | NIF_TIP | NIF_MESSAGE; IconData.hIcon=Application->Icon->Handle; lstrcpy(IconData.szTip, TEXT("气球提示")); lstrcpy(IconData.szInfo, TEXT("Your message text goes here.")); lstrcpy(IconData.szInfoTitle, TEXT("标题")); IconData.uTimeout = 15000; // 毫秒 IconData.dwState=NIS_SHAREDICON; IconData.dwStateMask=0; IconData.dwInfoFlags=NIF_INFO; //这是一个自定义消息,当你在气球提示上按下鼠标后,会给IconData.hWnd发送这个自定义消息,其lParam是NIN_BALLOONUSERCLICK,如此你可以响应这个消息。 //IconData.uCallbackMessage= WM_TIP_NOTIFY; Shell_NotifyIcon(NIM_ADD, &IconData);//显示提示框 //Shell_NotifyIcon(NIM_DELETE, &IconData);//删除提示框

上一篇:在做游戏测试过程中的总结
下一篇:

相关文章

关键词: 托盘类(转)

相关评论