WinClasses.cpp
上传用户:weijiexitu
上传日期:2007-01-18
资源大小:54k
文件大小:4k
源码类别:

菜单

开发平台:

WINDOWS

  1. // WinClasses.cpp: implementation of the CWinClasses class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "WinClasses.h"
  6. #include "wclassdefines.h"
  7. #include <afxpriv.h>
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. // helper function for everyone to use
  14. void TRACEWND(LPCTSTR szFunctionName, HWND hWnd)
  15. {
  16. #ifdef _DEBUG
  17. if (hWnd)
  18. {
  19. CString sText; 
  20. // pWnd->GetWindowText(sText); 
  21. TRACE ("%s(%s, %s, id = %d)n", szFunctionName, CWinClasses::GetClass(hWnd), sText, GetDlgCtrlID(hWnd)); 
  22. }
  23. #endif
  24. }
  25. //////////////////////////////////////////////////////////////////////
  26. // Construction/Destruction
  27. //////////////////////////////////////////////////////////////////////
  28. CMap<LPCTSTR, LPCTSTR, int, int&> CWinClasses::s_mapCtrlClasses;
  29. CString CWinClasses::GetClass(HWND hWnd)
  30. {
  31. static char szWndClass[128] = "";
  32. if (hWnd)
  33. ::GetClassName(hWnd, szWndClass, 127);
  34. return CString(szWndClass);
  35. }
  36. BOOL CWinClasses::IsClass(HWND hWnd, LPCTSTR szClass)
  37. {
  38. if (hWnd)
  39. {
  40. char szWndClass[128] = "";
  41. ::GetClassName(hWnd, szWndClass, 127);
  42. return (lstrcmpi(szClass, szWndClass) == 0);
  43. }
  44. return FALSE;
  45. }
  46. CString CWinClasses::GetClassEx(HWND hWnd)
  47. {
  48. CString sClass = GetClass(hWnd);
  49. if (sClass.Find("Afx") == 0) // its an mfc framework base or derived class
  50. {
  51. // can do the check if pWnd is permanent else mfc will not yet
  52. // have hooked up
  53. CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);
  54. if (pWnd)
  55. {
  56. // must do the check in order of most derived class first
  57. if (pWnd->IsKindOf(RUNTIME_CLASS(CView)))
  58. return WC_MFCVIEW;
  59. else if (pWnd->IsKindOf(RUNTIME_CLASS(CMDIFrameWnd)))
  60. return WC_MFCMDIFRAME;
  61. else if (pWnd->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)))
  62. return WC_MFCMDICHILD;
  63. else if (pWnd->IsKindOf(RUNTIME_CLASS(CMiniDockFrameWnd)))
  64. return WC_MFCMINIDOCKFRAME;
  65. else if (pWnd->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))
  66. return WC_MFCMINIFRAME;
  67. else if (pWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd))) // this is the catch all for frame wnds
  68. return WC_MFCFRAME;
  69. else if (pWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
  70. return WC_MFCSPLITTER;
  71. else if (pWnd->IsKindOf(RUNTIME_CLASS(CDialogBar)))
  72. return WC_MFCDIALOGBAR;
  73. else if (pWnd->IsKindOf(RUNTIME_CLASS(CControlBar)))
  74. return WC_CONTROLBAR;
  75. else 
  76. return WC_MFCWND; // catch all for all window classes
  77. }
  78. }
  79. return sClass;
  80. }
  81. BOOL CWinClasses::IsControlClass(HWND hWnd)
  82. {
  83. return IsControlClass(GetClass(hWnd));
  84. }
  85. BOOL CWinClasses::IsControlClass(LPCTSTR szClass)
  86. {
  87. // init
  88. if (!s_mapCtrlClasses.GetCount())
  89. {
  90. s_mapCtrlClasses[WC_BUTTON] = 1;
  91. s_mapCtrlClasses[WC_STATIC] = 1;
  92. s_mapCtrlClasses[WC_EDIT] = 1;  
  93. s_mapCtrlClasses[WC_COMBOBOX] = 1;
  94. s_mapCtrlClasses[WC_COMBOLBOX] = 1;
  95. s_mapCtrlClasses[WC_LISTBOX] = 1;  
  96. s_mapCtrlClasses[WC_SCROLLBAR] = 1;
  97. s_mapCtrlClasses[WC_TOOLBAR] = 1;  
  98. s_mapCtrlClasses[WC_SPIN] = 1;     
  99. s_mapCtrlClasses[WC_PROGRESS] = 1; 
  100. s_mapCtrlClasses[WC_SLIDER] = 1;   
  101. s_mapCtrlClasses[WC_HOTKEY] = 1;   
  102. s_mapCtrlClasses[WC_SHELLDLLDEFVIEW] = 1;  
  103. s_mapCtrlClasses[WC_STATUSBAR] = 1;        
  104. s_mapCtrlClasses[WC_ANIMATE] = 1;          
  105. s_mapCtrlClasses[WC_RICHEDIT] = 1;         
  106. s_mapCtrlClasses[WC_RICHEDIT20] = 1;       
  107. s_mapCtrlClasses[WC_DATETIMEPICK] = 1;     
  108. s_mapCtrlClasses[WC_MONTHCAL] = 1;         
  109. s_mapCtrlClasses[WC_REBAR] = 1;            
  110. s_mapCtrlClasses[WC_TOOLTIPS] = 1; 
  111. s_mapCtrlClasses[WC_THUMBNAILVIEW] = 1; 
  112. s_mapCtrlClasses[WC_IE] = 1; 
  113. s_mapCtrlClasses[WC_SHDOCOBJVW] = 1; 
  114. s_mapCtrlClasses[WC_SHELLEMBEDDING] = 1; 
  115. }
  116. int nTemp;
  117. return s_mapCtrlClasses.Lookup(szClass, nTemp);
  118. }