home *** CD-ROM | disk | FTP | other *** search
/ PC Administrator / spravce.iso / TaskModule / src / TaskTrackerWnd.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-07  |  3.6 KB  |  134 lines

  1. // TaskTrackerWnd.cpp: implementation of the CTaskTrackerWnd class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "stdafx.h"
  6. #include "TaskTrackerWnd.h"
  7.  
  8. BOOL CALLBACK WndEnumProc(HWND hWnd, LPARAM lParam);
  9.  
  10. //////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. //////////////////////////////////////////////////////////////////////
  13.  
  14. CTaskTrackerWnd::CTaskTrackerWnd()
  15. {
  16.     m_vWnds.resize(0);
  17.     m_hSwitcherWnd = NULL;
  18. }
  19.  
  20. CTaskTrackerWnd::~CTaskTrackerWnd()
  21. {
  22.     if(m_hWnd)
  23.     {
  24.         DestroyWindow(m_hWnd);
  25.         m_hWnd = NULL;
  26.     }
  27.     UnregisterClass(m_pWindowClass,m_hInstance);
  28. }
  29.  
  30. unsigned long int CTaskTrackerWnd::Init(HWND hParent,char *pWindowName, unsigned long int dwExStyle,unsigned long int dwStyle, int x, int y,int nWidth, int nHeight, HMENU hMenu, int nCmdShow)
  31. {// begin Init
  32.     unsigned long int nRtnVal = CMyWindow::Init(hParent,pWindowName,dwExStyle,dwStyle,x,y,nWidth,nHeight,hMenu,nCmdShow);
  33.     // set refresh timer
  34.     SetTimer(m_hWnd,1,500,NULL);
  35.     return nRtnVal;
  36. }// end Init
  37.  
  38. LRESULT CTaskTrackerWnd::WndProc(HWND hWnd,UINT nMessage,WPARAM wParam,LPARAM lParam)
  39. {// begin WndProc
  40.     switch(nMessage)
  41.     {// begin nMessage switch
  42.     case WM_TIMER:
  43.         OnTimer();
  44.         break;
  45.     case WM_DESTROY:
  46.         OnDestroy();
  47.         break;
  48.     }// end nMessage swtich
  49.     return CMyWindow::WndProc(hWnd, nMessage, wParam, lParam);
  50. }// end WndProc
  51.  
  52. bool CTaskTrackerWnd::InList(HWND hWnd)
  53. {// begin InList
  54.     for(int i = m_vWnds.size()-1;i > -1;i--)
  55.     {
  56.         if(m_vWnds[i] == hWnd)
  57.             return true;
  58.     }
  59.     return false;
  60. }// end InList
  61.  
  62.  
  63. BOOL CALLBACK WndEnumProc(HWND hWnd, LPARAM lParam)
  64. {// begin WndEnumProc
  65.     CTaskTrackerWnd *pttmWnd = (CTaskTrackerWnd *)lParam;
  66.     // check if the window is already in the open window list
  67.     if(IsWindowVisible(hWnd))
  68.     {// begin visible
  69.         // check to see if the owner is visible
  70.         if(GetWindow(hWnd,GW_OWNER))
  71.             return TRUE;
  72.  
  73.         // check to see if the window is a toolwindow
  74.         LONG nExStyles = GetWindowLong(hWnd,GWL_EXSTYLE);
  75.         if(nExStyles & WS_EX_TOOLWINDOW)
  76.             return TRUE;
  77.         if(!pttmWnd->InList(hWnd))
  78.         {// begin add to the list
  79.             // add it
  80.             pttmWnd->Add(hWnd);
  81.             // notify control window
  82.             PostMessage(pttmWnd->GetSwitcherHwnd(),WM_ADDTASK,(WPARAM)hWnd,0);
  83.         }// end add to the list
  84.     }// end visible
  85.     return TRUE;
  86. }// end WndEnumProc
  87.  
  88. void CTaskTrackerWnd::Add(HWND hWnd)
  89. {// begin Add
  90.     m_vWnds.resize(m_vWnds.size()+1);
  91.     m_vWnds[m_vWnds.size()-1] = hWnd;
  92. }// end Add
  93.  
  94. HWND CTaskTrackerWnd::SetSwitcherHwnd(HWND hWnd)
  95. {// begin SetSwitcherHwnd
  96.     HWND hOld = m_hSwitcherWnd;
  97.     m_hSwitcherWnd = hWnd;
  98.     return m_hSwitcherWnd;
  99. }// end SetSwitcherHwnd
  100.  
  101. HWND CTaskTrackerWnd::GetSwitcherHwnd()
  102. {// begin GetSwitcherHwnd
  103.     return m_hSwitcherWnd;
  104. }// end GetSwitcherHwnd
  105.  
  106. void CTaskTrackerWnd::OnTimer()
  107. {// begin OnTimer
  108.     // update new windows
  109.     EnumWindows(WndEnumProc,(LPARAM)this);
  110.     // remove any closed/hidden ones
  111.     for(int i = 0;i < m_vWnds.size();i++)
  112.     {// begin search
  113.         if(!IsWindow(m_vWnds[i]) || !IsWindowVisible(m_vWnds[i]))
  114.         {// begin remove
  115.             // save it
  116.             HWND hDeleteWnd = m_vWnds[i];
  117.             // remove it
  118.             m_vWnds.erase(&m_vWnds[i]);
  119.             // decrement so the next window isn't skipped over
  120.             i--;
  121.             // notify the switcher window of the change
  122.             PostMessage(m_hSwitcherWnd,WM_DELETETASK,(WPARAM)hDeleteWnd,0);
  123.         }// end remove
  124.     }// end search
  125. }// end OnTimer
  126.  
  127. void CTaskTrackerWnd::OnDestroy()
  128. {// begin OnDestroy
  129.     // stop the timer
  130.     KillTimer(m_hWnd,1);
  131.     // empty the vector
  132.     m_vWnds.clear();
  133.     m_vWnds.resize(0);
  134. }// end OnDestroy