WindowsTreeCtrl.cpp
上传用户:louyoung
上传日期:2007-01-02
资源大小:123k
文件大小:3k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. // WindowsTreeCtrl.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "WindowsTreeCtrl.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CWindowsTreeCtrl
  12. CWindowsTreeCtrl::CWindowsTreeCtrl()
  13. {
  14. }
  15. CWindowsTreeCtrl::~CWindowsTreeCtrl()
  16. {
  17. }
  18. BEGIN_MESSAGE_MAP(CWindowsTreeCtrl, CTreeCtrl)
  19. //{{AFX_MSG_MAP(CWindowsTreeCtrl)
  20. //}}AFX_MSG_MAP
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CWindowsTreeCtrl message handlers
  24. // Function name : CWindowsTreeCtrl::GetClassName
  25. // Description     : 
  26. // Return type : CString 
  27. // Argument         : HWND hWnd
  28. CString CWindowsTreeCtrl::GetItemName(HWND hWnd)
  29. {
  30. CString result;
  31. ::GetClassName(hWnd, result.GetBuffer(1024),1024);
  32. result.ReleaseBuffer();
  33. CString itemText;
  34. itemText.Format(_T("0x%08X, %s"), hWnd, result);
  35. return itemText;
  36. }
  37. // Function name : CWindowsTreeCtrl::EnumWindowProc
  38. // Description     : Call for each window
  39. // Return type : BOOL 
  40. // Argument         : HWND hWnd
  41. // Argument         : LPARAM lParam
  42. BOOL CWindowsTreeCtrl::EnumWindowProc(HWND hWnd, LPARAM lParam)
  43. {
  44. CWindowsTreeCtrl* pTree = (CWindowsTreeCtrl*)lParam;
  45. pTree->NewBranch(hWnd);
  46. return TRUE;
  47. }
  48. // Function name : CWindowsTreeCtrl::Enum
  49. // Description     : Called to fill this tree.
  50. // Return type : void 
  51. void CWindowsTreeCtrl::Enum()
  52. {
  53. ::EnumWindows((WNDENUMPROC)EnumWindowProc, (LPARAM)this);
  54. }
  55. // Function name : CWindowsTreeCtrl::NewBranch
  56. // Description     : 
  57. // Return type : void 
  58. // Argument         : HWND hWnd
  59. void CWindowsTreeCtrl::NewBranch(HWND hWnd)
  60. {
  61. HTREEITEM hRoot = InsertItem(GetItemName(hWnd));
  62. SetItemData(hRoot, (LPARAM)hWnd);
  63. AddAllChilds(hRoot);
  64. }
  65. // Function name : CWindowsTreeCtrl::AddAllChilds
  66. // Description     : Add all windows descendent of hRoot to tree
  67. // Return type : void 
  68. // Argument         : HTREEITEM hRoot
  69. void CWindowsTreeCtrl::AddAllChilds(HTREEITEM hRoot)
  70. {
  71. if (HWND hWnd = (HWND)GetItemData(hRoot))
  72. if (IsWindow(hWnd))
  73. {
  74. CWnd* pWnd = CWnd::FromHandle(hWnd);
  75. if (IsWindow(pWnd->m_hWnd))
  76. {
  77. CWnd* pChild = pWnd->GetWindow(GW_CHILD);
  78. while (pChild)
  79. {
  80. HTREEITEM hItem = InsertItem(GetItemName(pChild->m_hWnd), hRoot);
  81. SetItemData(hItem, (LPARAM)pChild->m_hWnd);
  82. AddAllChilds(hItem);
  83. pChild = pChild->GetWindow(GW_HWNDNEXT);
  84. }
  85. }
  86. }
  87. }