XTPSkinObject.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:13k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPSkinObject.h: interface for the CXTPSkinObject class.
  2. //
  3. // This file is a part of the XTREME SKINFRAMEWORK MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(_XTPSKINOBJECT_H__)
  22. #define _XTPSKINOBJECT_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPSkinManager;
  28. class CXTPSkinManagerClass;
  29. class CXTPSkinManagerMetrics;
  30. #include "Common/XTPSystemHelpers.h"
  31. //{{AFX_CODEJOCK_PRIVATE
  32. // Internal enumerator
  33. enum XTPSkinDefaultProc
  34. {
  35. xtpSkinDefaultHookMessage,
  36. xtpSkinDefaultCallWindowProc,
  37. xtpSkinDefaultDefWindowProc,
  38. xtpSkinDefaultDefMDIChildProc,
  39. xtpSkinDefaultDefFrameProc,
  40. xtpSkinDefaultDefDlgProc
  41. };
  42. class CXTPSkinObjectPaintDC : public CDC
  43. {
  44. // Constructors
  45. public:
  46. CXTPSkinObjectPaintDC(CWnd* pWnd);
  47. virtual ~CXTPSkinObjectPaintDC();
  48. // Attributes
  49. protected:
  50. HWND m_hWnd;
  51. public:
  52. PAINTSTRUCT m_ps;
  53. };
  54. //}}AFX_CODEJOCK_PRIVATE
  55. //===========================================================================
  56. // Summary:
  57. //     CXTPSkinObject is a CWnd derived class. It represents base class for all
  58. //     skinable windows.
  59. //===========================================================================
  60. class _XTP_EXT_CLASS CXTPSkinObject : public CWnd
  61. {
  62. protected:
  63. //-----------------------------------------------------------------------
  64. // Summary:
  65. //     Constructs a CXTPSkinObject object.
  66. //-----------------------------------------------------------------------
  67. CXTPSkinObject();
  68. //-----------------------------------------------------------------------
  69. // Summary:
  70. //     Destroys a CXTPSkinObject object, handles cleanup and deallocation.
  71. //-----------------------------------------------------------------------
  72. ~CXTPSkinObject();
  73. public:
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     Retrieves parent CXTPSkinManager object
  77. //-----------------------------------------------------------------------
  78. CXTPSkinManager* GetSkinManager() const;
  79. //-----------------------------------------------------------------------
  80. // Summary:
  81. //     Retrieves own classname.
  82. // See Also:
  83. //     GetSkinClass
  84. //-----------------------------------------------------------------------
  85. CString GetClassName() const;
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Retrieves CXTPSkinManagerClass object associated with class name
  89. // See Also:
  90. //     GetClassName
  91. //-----------------------------------------------------------------------
  92. CXTPSkinManagerClass* GetSkinClass() const;
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Call this method to get pointer to skin metrics
  96. // Returns:
  97. //     Pointer to CXTPSkinManagerMetrics class contained metrics of the skin
  98. //-----------------------------------------------------------------------
  99. CXTPSkinManagerMetrics* GetMetrics() const;
  100. //-----------------------------------------------------------------------
  101. // Summary:
  102. //      Retrieves system color used in skinmanager
  103. // Parameters:
  104. //      nIndex - Index of color to retrieve
  105. // Returns: Color of selected skin
  106. // See Also: GetSysColor
  107. //-----------------------------------------------------------------------
  108. COLORREF GetColor(int nIndex) const;
  109. BOOL IsSkinEnabled() const;
  110. protected:
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     This method is called when skin was changed
  114. // Parameters:
  115. //     bPrevState - TRUE if previously skin was installed
  116. //     bNewState - TRUE if skin is installed
  117. //-----------------------------------------------------------------------
  118. virtual void OnSkinChanged(BOOL bPrevState, BOOL bNewState);
  119. //-----------------------------------------------------------------------
  120. // Summary:
  121. //     This method is called when visual metrics was changed
  122. //-----------------------------------------------------------------------
  123. virtual void RefreshMetrics();
  124. //-----------------------------------------------------------------------
  125. // Summary:
  126. //     This method is called when hook is attached
  127. //-----------------------------------------------------------------------
  128. virtual void OnHookAttached(LPCREATESTRUCT lpcs, BOOL bAuto);
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     This method is called when hook is detached
  132. //-----------------------------------------------------------------------
  133. virtual void OnHookDetached(BOOL bAuto);
  134. //{{AFX_CODEJOCK_PRIVATE
  135. public:
  136. UINT GetHeadMessage();
  137. protected:
  138. virtual BOOL OnHookMessage(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  139. virtual BOOL OnHookDefWindowProc(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
  140. void AttachHook(HWND hWnd, LPCREATESTRUCT lpcs, BOOL bAuto);
  141. void UnattachHook(BOOL bAuto);
  142. virtual void OnFinalRelease();
  143. virtual WNDPROC* GetSuperWndProcAddr();
  144. virtual BOOL IsDefWindowProcAvail(int nMessage) const;
  145. virtual LRESULT DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam);
  146. virtual BOOL PreHookMessage(UINT nMessage);
  147. #ifdef _DEBUG
  148. virtual void AssertValid() const {
  149. }
  150. #endif
  151. void OnBeginHook(UINT nMessage, XTPSkinDefaultProc defProc, PROC defProcAddr, LPVOID defProcPrevWndFunc);
  152. void OnEndHook();
  153. LRESULT DoDefWindowProc (UINT nMsg, WPARAM wParam, LPARAM lParam);
  154. //}}AFX_CODEJOCK_PRIVATE
  155. public:
  156. static UINT m_nMsgQuerySkinState;
  157. static UINT m_nMsgUpdateSkinState;
  158. protected:
  159. WNDPROC m_pOldWndProc;          // Old window window handler
  160. CXTPSkinManager* m_pManager;    // Parent CXTPSkinManager object
  161. CString m_strClassName;         // Own class name
  162. BOOL m_bActiveX;                // TRUE if ActiveX controls
  163. BOOL m_bWindowsForms;            // TRUE if .NET controls
  164. WNDPROC m_wndDefProcAddr;       // Address of previous window procedure
  165. BOOL m_bCustomDraw;
  166. BOOL m_bUnicode;
  167. CXTPCriticalSection m_csDescriptors;
  168. private:
  169. struct DEFWINDOW_DESCRIPTIOR
  170. {
  171. XTPSkinDefaultProc defProc;
  172. PROC defProcAddr;
  173. LPVOID lpPrev;
  174. UINT nMessage;
  175. };
  176. CList<DEFWINDOW_DESCRIPTIOR, DEFWINDOW_DESCRIPTIOR&> m_arrDescriptors;
  177. protected:
  178. friend class CXTPSkinManager;
  179. friend class CXTPSkinManagerApiHook;
  180. friend class CXTPSkinObjectClassInfoActiveX;
  181. };
  182. //{{AFX_CODEJOCK_PRIVATE
  183. class CXTPSkinObjectClassMap;
  184. class _XTP_EXT_CLASS CXTPSkinObjectClassInfo : public CCmdTarget
  185. {
  186. public:
  187. CXTPSkinObjectClassInfo(CRuntimeClass* pClass);
  188. public:
  189. virtual CXTPSkinObject* CreateObject(LPCTSTR lpszClassName, LPCREATESTRUCT lpcs);
  190. public:
  191. void AddClass(LPCTSTR lpszClassName);
  192. void Remove();
  193. protected:
  194. CRuntimeClass* m_pClass;
  195. CXTPSkinObjectClassMap* m_pMap;
  196. friend class CXTPSkinObjectClassMap;
  197. };
  198. class _XTP_EXT_CLASS CXTPSkinObjectClassInfoActiveX : public CXTPSkinObjectClassInfo
  199. {
  200. public:
  201. CXTPSkinObjectClassInfoActiveX(CRuntimeClass* pClass, BOOL bNoDefault)
  202. : CXTPSkinObjectClassInfo(pClass)
  203. {
  204. m_bNoDefault = bNoDefault;
  205. }
  206. virtual CXTPSkinObject* CreateObject(LPCTSTR lpszClassName, LPCREATESTRUCT lpcs)
  207. {
  208. CXTPSkinObject* pObject = CXTPSkinObjectClassInfo::CreateObject(lpszClassName, lpcs);
  209. if (pObject)
  210. {
  211. pObject->m_bActiveX = TRUE;
  212. if (m_bNoDefault) pObject->m_wndDefProcAddr = 0;
  213. }
  214. return pObject;
  215. }
  216. BOOL m_bNoDefault;
  217. };
  218. //}}AFX_CODEJOCK_PRIVATE
  219. //===========================================================================
  220. // Summary:
  221. //     CXTPSkinObjectClassMap class is standalone class that help map windows controls to skin framework classes.
  222. // Remarks:
  223. //     CXTPSkinManager class use this class to find what skin framework class need to apply to new window to skin it right
  224. //     For example, if new window created with class name "BUTTON", CXTPSkinObjectClassMap::Lookup will retrieve runtime class
  225. //     of CXTPSkinObjectButton to apply it to new window and skin it.
  226. // See Also: CXTPSkinManager, CXTPSkinObject, CXTPSkinManager::GetClassMap
  227. //===========================================================================
  228. class _XTP_EXT_CLASS CXTPSkinObjectClassMap
  229. {
  230. public:
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Constructs a CXTPSkinObjectClassMap object.
  234. //-----------------------------------------------------------------------
  235. CXTPSkinObjectClassMap();
  236. //-----------------------------------------------------------------------
  237. // Summary:
  238. //     Destroys a CXTPSkinObjectClassMap object, handles cleanup and deallocation.
  239. //-----------------------------------------------------------------------
  240. ~CXTPSkinObjectClassMap();
  241. public:
  242. //-----------------------------------------------------------------------
  243. // Summary:
  244. //     This method called by framework to add all standard window classes
  245. // Remarks:
  246. //     CXTPSkinManager call this method to add standard window classes like "BUTTON", "LISTBOX", "SCROLLBAR"
  247. //-----------------------------------------------------------------------
  248. void AddStandardClasses();
  249. public:
  250. //-----------------------------------------------------------------------
  251. // Summary:
  252. //     Call this method to map window class name to skin framework class
  253. // Parameters:
  254. //     lpszClassName - Window class name
  255. //     pInfo - descriptor of skin framework class
  256. // Example:
  257. //     <code>pClassMap->AddClass(_T("ListBox"), new CXTPSkinObjectClassInfo(RUNTIME_CLASS(CXTPSkinObjectListBox)));</code>
  258. // See Also:
  259. //     AddSynonymClass,  AddStandardClasses
  260. //-----------------------------------------------------------------------
  261. CXTPSkinObjectClassInfo* AddClass(LPCTSTR lpszClassName, CXTPSkinObjectClassInfo* pInfo);
  262. //-----------------------------------------------------------------------
  263. // Summary:
  264. //     Call this method to map one window class name to another
  265. // Parameters:
  266. //     lpszClassNameSynonym - New window class name
  267. //     lpszClassName - Standard window class name
  268. // Example:
  269. //     <code>pClassMap->AddSynonymClass(_T("SysDateTimePick32"), _T("Edit"));</code>
  270. // See Also:
  271. //     AddClass
  272. //-----------------------------------------------------------------------
  273. void AddSynonymClass(LPCTSTR lpszClassNameSynonym, LPCTSTR lpszClassName);
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     Call this method to remove window class
  277. // Parameters:
  278. //     lpszClassName - Window class name to remove
  279. // See Also:
  280. //     AddClass
  281. //-----------------------------------------------------------------------
  282. void RemoveClass(LPCTSTR lpszClassName);
  283. //-----------------------------------------------------------------------
  284. // Summary:
  285. //     Call this method to remove skin framework class
  286. // Parameters:
  287. //     pInfo - skin framework class name to remove
  288. // See Also:
  289. //     AddClass
  290. //-----------------------------------------------------------------------
  291. void RemoveClass(CXTPSkinObjectClassInfo* pInfo);
  292. //-----------------------------------------------------------------------
  293. // Summary:
  294. //     Call this method to remove all classed
  295. // See Also:
  296. //     AddClass
  297. //-----------------------------------------------------------------------
  298. void RemoveAll();
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     This method map window class to skinframework class
  302. // Parameters:
  303. //     lpszClassName - Window Class name to map
  304. // See Also:
  305. //     AddClass
  306. //-----------------------------------------------------------------------
  307. CXTPSkinObjectClassInfo* Lookup(LPCTSTR lpszClassName);
  308. protected:
  309. CMapStringToPtr m_mapInfo;  // General map
  310. };
  311. AFX_INLINE CXTPSkinManager* CXTPSkinObject::GetSkinManager() const {
  312. return m_pManager;
  313. }
  314. AFX_INLINE CString CXTPSkinObject::GetClassName() const {
  315. return m_strClassName;
  316. }
  317. #endif // !defined(_XTPSKINOBJECT_H__)