GuiSysTray.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------//
  2. // This is a part of the GuiLib MFC Extention.  //
  3. // Autor  :  Francisco Campos  //
  4. // (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
  5. // This code is provided "as is", with absolutely no warranty expressed  //
  6. // or implied. Any use is at your own risk.  //
  7. // You must obtain the author's consent before you can include this code //
  8. // in a software library.  //
  9. // If the source code in  this file is used in any application  //
  10. // then acknowledgement must be made to the author of this program  //
  11. // fcampos@tutopia.com  //
  12. //-----------------------------------------------------------------------//
  13. // GuiSysTray.cpp : implementation file
  14. //
  15. #include "stdafx.h"
  16. #include "GuiLib.h"
  17. #include "guisystray.h"
  18. // CGuiSysTray
  19. IMPLEMENT_DYNAMIC(CGuiSysTray, CWnd)
  20. CGuiSysTray::CGuiSysTray()
  21. {
  22. memset(&tnid,sizeof(NOTIFYICONDATA),0x00);
  23. tnid.cbSize=sizeof(NOTIFYICONDATA);
  24. m_bStartAnimation=FALSE;
  25. m_ActualImage=0;
  26. m_pMenu=NULL;
  27. }
  28. CGuiSysTray::~CGuiSysTray()
  29. {
  30.     Del();
  31. }
  32. BEGIN_MESSAGE_MAP(CGuiSysTray, CWnd)
  33. ON_WM_TIMER()
  34. END_MESSAGE_MAP()
  35. // CGuiSysTray message handlers
  36. void CGuiSysTray::StartAnimation(int nMilliseconds,int nPosInit, int nPosEnd)
  37. {
  38. if(m_bStartAnimation)
  39. return;
  40. m_bStartAnimation=TRUE;
  41. m_ActualImage=nPosInit;
  42. m_Init=nPosInit;
  43. m_End=nPosEnd;
  44. SetTimer(156,100,0);
  45. }
  46. void CGuiSysTray::StopAnimation()
  47. {
  48. KillTimer(156);
  49. m_ActualImage=m_End=m_Init=0;
  50. }
  51. BOOL CGuiSysTray::Add(UINT uID,UINT uCallBackMessage, HICON hIcon, LPCTSTR lpszTip)
  52. {
  53.   tnid.uID = uID;
  54.   tnid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
  55.   tnid.uCallbackMessage = uCallBackMessage;
  56.   tnid.hIcon = hIcon;
  57.   strncpy(tnid.szTip,lpszTip,sizeof(tnid.szTip)-1);
  58.   return (Shell_NotifyIcon(NIM_ADD, &tnid));
  59. }
  60. BOOL CGuiSysTray::Update(UINT uID, HICON hIcon, LPCTSTR lpszTip)
  61. {
  62.   tnid.hIcon = hIcon;
  63.   strncpy(tnid.szTip,lpszTip,sizeof(tnid.szTip)-1);
  64.   return (Shell_NotifyIcon(NIM_MODIFY, &tnid));
  65. }
  66. BOOL CGuiSysTray::Del()
  67. {
  68.   return(Shell_NotifyIcon(NIM_DELETE, &tnid));
  69. }
  70. BOOL CGuiSysTray::SetIcon(HICON hIcon)
  71. {
  72.   tnid.hIcon = hIcon;
  73.   tnid.uFlags |= NIF_ICON;
  74.   return (Shell_NotifyIcon(NIM_MODIFY, &tnid));
  75. }
  76. BOOL CGuiSysTray::SetIcon(LPCTSTR lpszIcon)
  77. {
  78. return SetIcon(AfxGetApp()->LoadIcon(lpszIcon));
  79. }
  80. BOOL CGuiSysTray::SetTips(LPCTSTR lpszTip)
  81. {
  82.   tnid.uFlags |= NIF_TIP;
  83.   strncpy(tnid.szTip,lpszTip,sizeof(tnid.szTip)-1);
  84.   return (Shell_NotifyIcon(NIM_MODIFY, &tnid));
  85. }
  86. void CGuiSysTray::SetImageList(UINT nBitmapID, int cx, int nGrow, COLORREF crMask)
  87. {
  88. CBitmap cbmp;
  89. BITMAP bmp;
  90. m_ImgList.Create(nBitmapID,cx,nGrow,crMask);
  91. cbmp.LoadBitmap(nBitmapID);
  92. cbmp.GetBitmap(&bmp);
  93. m_ImgList.Add(&cbmp,crMask);
  94. }
  95. BOOL CGuiSysTray::Create(CWnd* pParentWnd, UINT nID,UINT uCallBackMessage, HICON hIcon, LPCTSTR lpszTip)
  96. {
  97. // TODO: Add your specialized code here and/or call the base class
  98. ASSERT(pParentWnd->GetSafeHwnd());
  99. CWnd::CreateEx(0, AfxRegisterWndClass(0),_T(""), WS_POPUP, CRect(0,0,1,1), pParentWnd, 0);
  100. tnid.hWnd = GetSafeHwnd();
  101. if(Add(nID,uCallBackMessage,hIcon,lpszTip))
  102. return TRUE;
  103. else
  104. return TRUE;
  105. }
  106. void CGuiSysTray::SetSysMenu(CMenu* pMenu)
  107. {
  108. ASSERT(pMenu->GetSafeHmenu());
  109. m_pMenu=pMenu;
  110. }
  111. LRESULT CGuiSysTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  112. {
  113. if (message== tnid.uCallbackMessage)
  114. {
  115. if (LOWORD(lParam) == WM_RBUTTONUP)
  116. {
  117. if(m_pMenu == NULL) return FALSE;
  118. CPoint pt;
  119. GetCursorPos(&pt);
  120. m_pMenu->GetSubMenu(0)->TrackPopupMenu(0, 
  121. pt.x, pt.y, GetParent(), NULL);
  122. }
  123. }
  124.     else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) 
  125.         GetParent()->SendMessage(WM_LBUTTONDBLCLK,0, 0);
  126.     else
  127. return CWnd::WindowProc(message, wParam, lParam);
  128. return TRUE;
  129. }
  130. void CGuiSysTray::OnTimer(UINT nIDEvent)
  131. {
  132. // TODO: Add your message handler code here and/or call default
  133. if (nIDEvent == 156)
  134. {
  135. if (m_ActualImage > m_End)
  136. m_ActualImage=m_Init;
  137. SetIcon(m_ImgList.ExtractIcon(m_ActualImage));
  138. m_ActualImage++;
  139. }
  140. CWnd::OnTimer(nIDEvent);
  141. }