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

对话框与窗口

开发平台:

Visual C++

  1. // XTPResourceManager.h: interface for the CXTPResourceManager class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO 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(__XTPRESOURCEMANAGER_H__)
  22. #define __XTPRESOURCEMANAGER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #pragma warning(disable: 4275) // ID: Q134980
  28. #pragma warning(disable: 4251) // ID: Q134980
  29. struct XTP_RESOURCEMANAGER_LANGINFO
  30. {
  31. WORD wLanguage;
  32. UINT nCodePage;
  33. LPCTSTR lpszEncoding;
  34. LPCTSTR lpszCaption;
  35. LPCTSTR lpszLang;
  36. LPCTSTR lpszSubLang;
  37. BYTE nFontCharSet;
  38. };
  39. #ifdef _UNICODE
  40. #define XTP_CT2CW(lp) ((LPCWSTR)(LPCTSTR)(lp))
  41. #define XTP_CW2CT(lp) ((LPCTSTR)(LPCWSTR)(lp))
  42. #define XTP_CT2CA(lp) ((LPCSTR)CXTPResourceManager::CXTPW2A((LPCTSTR)(lp)))
  43. #else
  44. #define XTP_CT2CW(lp) ((LPCWSTR)CXTPResourceManager::CXTPA2W((LPCTSTR)(lp)))
  45. #define XTP_CW2CT(lp) ((LPCTSTR)CXTPResourceManager::CXTPW2A((LPCWSTR)(lp)))
  46. #define XTP_CT2CA(lp) ((LPCSTR)(LPCTSTR)(lp))
  47. #endif
  48. #define XTP_CW2CA(lp) ((LPCSTR)CXTPResourceManager::CXTPW2A((LPCWSTR)(lp)))
  49. //===========================================================================
  50. // Summary:
  51. //     Standalone class used to managed toolkit resources.
  52. //===========================================================================
  53. class _XTP_EXT_CLASS CXTPResourceManager : public CNoTrackObject
  54. {
  55. public:
  56. //=============================================================================
  57. // Summary:
  58. //     CManageState is used internally by the toolkit to switch module
  59. //     states.  Specifically, the class enables the toolkit to read its
  60. //     own .dll resources, and not that of the host application (or .dll).
  61. //     Future versions of the class may handle other such details
  62. //=============================================================================
  63. class _XTP_EXT_CLASS CManageState
  64. {
  65. public:
  66. //-------------------------------------------------------------------------
  67. // Summary:
  68. //     Constructs a CManageState object
  69. //-------------------------------------------------------------------------
  70. CManageState();
  71. //-------------------------------------------------------------------------
  72. // Summary:
  73. //     Destroys a CManageState object, handles clean up and deallocation
  74. //-------------------------------------------------------------------------
  75. ~CManageState();
  76. public:
  77. //-------------------------------------------------------------------------
  78. // Summary:
  79. //     Call this member function to UNDO managed state
  80. //-------------------------------------------------------------------------
  81. void Undo();
  82. //-------------------------------------------------------------------------
  83. // Summary:
  84. //     Call this member function to REDO managed state
  85. //-------------------------------------------------------------------------
  86. void Redo();
  87. protected:
  88. bool            m_bSet;             // true to set
  89. HMODULE         m_hModOldResource;  // Handle to previous resource.
  90. };
  91. public:
  92. //-------------------------------------------------------------------------
  93. // Summary:
  94. //     Constructs a CXTPResourceManager object.
  95. //-------------------------------------------------------------------------
  96. CXTPResourceManager();
  97. //-------------------------------------------------------------------------
  98. // Summary:
  99. //     Destroys a CXTPResourceManagerXML object, handles cleanup and de-
  100. //     allocation.
  101. //-------------------------------------------------------------------------
  102. ~CXTPResourceManager();
  103. public:
  104. //-------------------------------------------------------------------------
  105. // Summary:
  106. //     Call this member to set resource file to be used (dll or xml)
  107. // Parameters:
  108. //     strResourceFile - Resource file to be used.
  109. // Remarks:
  110. //     Call Close method in ExitInstance of your application to free resources.
  111. // See Also: Close, SetResourceHandle
  112. //-------------------------------------------------------------------------
  113. void SetResourceFile(const CString& strResourceFile);
  114. //-------------------------------------------------------------------------
  115. // Summary:
  116. //     Call this member to set the resource handle for the calling module.
  117. // Parameters:
  118. //     hModRes - Handle to modules resource.
  119. //-------------------------------------------------------------------------
  120. void SetResourceHandle(HMODULE hModRes);
  121. //-------------------------------------------------------------------------
  122. // Summary:
  123. //     Call this member function to return the library resource handle.
  124. // Returns:
  125. //     Returns the resource handle defined for the library.
  126. //-------------------------------------------------------------------------
  127. HMODULE GetResourceHandle() const;
  128. public:
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Reads a Windows string resource, identified by nID, into an existing CString object
  132. // Parameters:
  133. //     pString     - Output string pointer
  134. //     nIDResource - A Windows string resource ID.
  135. // Returns:
  136. //     Nonzero if resource load was successful; otherwise 0.
  137. //-----------------------------------------------------------------------
  138. virtual BOOL LoadString(CString* pString, UINT nIDResource);
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     Reads a Windows string resource, identified by nID.
  142. // Parameters:
  143. //     nIDResource - A Windows string resource ID.
  144. //     pbError     - Pointer to a BOOL variable to report was resource load
  145. //                   successful or not. (Optional).
  146. // Returns:
  147. //     Loaded string or empty string if such string ID does not find in resource.
  148. //-----------------------------------------------------------------------
  149. virtual CString LoadString(UINT nIDResource, BOOL* pbError = NULL);
  150. //-----------------------------------------------------------------------
  151. // Summary:
  152. //     Reads a Windows menu resource, identified by nID, into an existing CMenu object
  153. // Parameters:
  154. //     lpMenu      - Output menu pointer
  155. //     nIDResource - A Windows menu resource ID.
  156. // Returns:
  157. //     Nonzero if resource load was successful; otherwise 0.
  158. //-----------------------------------------------------------------------
  159. virtual BOOL LoadMenu(CMenu* lpMenu, UINT nIDResource);
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //     Call this member function to load the toolbar specified by CToolBar and nIDResource.
  163. // Parameters:
  164. //     pToolBar    - Result CToolBar pointer
  165. //     nIDResource - Resource ID of the toolbar to be loaded.
  166. // Returns:
  167. //     Nonzero if resource load was successful; otherwise 0.
  168. //-----------------------------------------------------------------------
  169. virtual BOOL LoadToolBar(CToolBar* pToolBar, UINT nIDResource);
  170. //-----------------------------------------------------------------------
  171. // Summary:
  172. //     Reads a Windows bitmap resource, identified by nID, into an existing CBitmap object
  173. // Parameters:
  174. //     pBitmap     - Result CBitmap pointer
  175. //     nIDResource -  A Windows bitmap resource ID.
  176. // Returns:
  177. //     Nonzero if resource load was successful; otherwise 0.
  178. //-----------------------------------------------------------------------
  179. virtual BOOL LoadBitmap(CBitmap* pBitmap, UINT nIDResource);
  180. //-----------------------------------------------------------------------
  181. // Summary:
  182. //     Reads a Windows cursor resource, identified by nID, into an existing cursor object
  183. // Parameters:
  184. //     nIDResource -  A Windows cursor resource ID.
  185. // Returns:
  186. //     Nonzero if resource load was successful; otherwise 0.
  187. //-----------------------------------------------------------------------
  188. virtual HCURSOR LoadCursor(UINT nIDResource);
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Reads a Windows dialog resource, identified by pszResource
  192. // Parameters:
  193. //     nIDResource - A Windows dialog resource ID.
  194. // Returns:
  195. //     LPCDLGTEMPLATE pointer if resource load was successful; otherwise 0.
  196. //-----------------------------------------------------------------------
  197. virtual LPCDLGTEMPLATE LoadDialogTemplate(UINT nIDResource);
  198. //-----------------------------------------------------------------------
  199. // Summary:
  200. //     Reads a Windows dialog template identified by pszResource into the memory.
  201. // Parameters:
  202. //     pszResource - A Windows dialog resource ID.
  203. // Returns:
  204. //     HGLOBAL handle if resource load was successful; otherwise 0.
  205. // Remarks:
  206. //     Can be useful to load custom templates for common dialogs.
  207. //     To access dialog template data use LockResource() API function.
  208. // See Also:
  209. //     LoadDialogTemplate()
  210. //-----------------------------------------------------------------------
  211. virtual HGLOBAL LoadDialogTemplate2(LPCTSTR pszTemplate);
  212. //-----------------------------------------------------------------------
  213. // Summary:
  214. //     Reads a Windows HTML resource, identified by nIDResource,
  215. //     into an existing CString object.
  216. // Parameters:
  217. //     pString     - Output string pointer
  218. //     nIDResource -  A Windows bitmap resource ID.
  219. // Returns:
  220. //     Nonzero if resource load was successful; otherwise 0.
  221. //-----------------------------------------------------------------------
  222. virtual BOOL LoadHTML(CString* pText, UINT nIDResource);
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //      The LoadIcon function loads an icon by locating its resource handle.
  226. // Parameters:
  227. //      lpszID   - [in] Specifies the name of the icon to load.
  228. //      iconSize - [in] Specifies the width and height in pixels of the icon.
  229. // Returns:
  230. //      If the function succeeds, the return value is the handle of the newly
  231. //      loaded icon. If the function fails, the return value is NULL. To get
  232. //      extended error information, call GetLastError.
  233. //-----------------------------------------------------------------------
  234. virtual HICON LoadIcon(LPCTSTR lpszID, CSize iconSize);
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //      The LoadIcon function loads an icon by locating its resource handle.
  238. // Parameters:
  239. //      nID      - [in] Specifies the resource id of the icon to load.
  240. //      iconSize - [in] Specifies the width and height in pixels of the icon.
  241. // Returns:
  242. //      If the function succeeds, the return value is the handle of the newly
  243. //      loaded icon. If the function fails, the return value is NULL. To get
  244. //      extended error information, call GetLastError.
  245. //-----------------------------------------------------------------------
  246. virtual HICON LoadIcon(int nID, CSize iconSize);
  247. //-----------------------------------------------------------------------
  248. // Summary:
  249. //      The CreateIconFromResource function creates a new icon from the specified
  250. //      modules icon resource.
  251. // Parameters:
  252. //      hModule  - [in] Handle to the module whose executable file contains the
  253. //                      icon resource.
  254. //      lpszID   - [in] Specifies the name of the icon to load.
  255. //      iconSize - [in] Specifies the width and height in pixels of the icon.
  256. // Returns:
  257. //      If the function succeeds, the return value is a handle to the icon or
  258. //      cursor. If the function fails, the return value is NULL. To get extended
  259. //      error information, call GetLastError.
  260. //-----------------------------------------------------------------------
  261. virtual HICON CreateIconFromResource(HMODULE hModule, LPCTSTR lpszID, CSize iconSize);
  262. public:
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     Displays a message box on the screen
  266. // Parameters:
  267. //     nIDPrompt - A unique ID used to reference a string in the string table.
  268. //     nType     - The style of the message box.
  269. // Returns:
  270. //     See AfxMessageBox return values list
  271. //-----------------------------------------------------------------------
  272. int ShowMessageBox(UINT nIDPrompt, UINT nType = MB_OK);
  273. int ShowMessageBox(LPCTSTR lpszText, UINT nType = MB_OK);
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     This method free used resource. Call it in ExitInstance of your application if you use
  277. //     external resource file.
  278. // See Also: SetResourceFile
  279. //-----------------------------------------------------------------------
  280. virtual void Close();
  281. public:
  282. //-----------------------------------------------------------------------
  283. // Summary:
  284. //     Call this method to set application defined Resource manager
  285. // Parameters:
  286. //     pResourceManager - Application defined Resource manager
  287. // Returns:
  288. //     TRUE if successful; otherwise 0.
  289. //-----------------------------------------------------------------------
  290. BOOL SetResourceManager(CXTPResourceManager* pResourceManager);
  291. //-----------------------------------------------------------------------
  292. // Summary:
  293. //     Get current resource language ID.
  294. // Remarks:
  295. //     Value for default resource is (LANG_ENGLISH, SUBLANG_ENGLISH_US)
  296. // Returns:
  297. //     Current resource language ID.
  298. //-----------------------------------------------------------------------
  299. virtual WORD GetResourcesLangID();
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     Call this static method to determine what language has resources
  303. // Parameters:
  304. //     hResModule - Resource instance
  305. //-----------------------------------------------------------------------
  306. static WORD AFX_CDECL GetResourceLanguage(HMODULE hResModule);
  307. public:
  308. void SetResourceLanguage(WORD wLanguage);
  309. int LoadLocaleString(HINSTANCE hInstance, UINT nID, CString& rString) const;
  310. int GetMenuLocaleString(CMenu* pMenu, UINT nIDItem, CString& rString, UINT nFlags) const;
  311. static XTP_RESOURCEMANAGER_LANGINFO* AFX_CDECL GetLanguageInfo(UINT nLangId);
  312. XTP_RESOURCEMANAGER_LANGINFO* GetLanguageInfo() const;
  313. public:
  314. class _XTP_EXT_CLASS CXTPW2A
  315. {
  316. public:
  317. CXTPW2A(LPCWSTR lpwstr);
  318. ~CXTPW2A();
  319. operator LPCSTR() const;
  320. protected:
  321. LPSTR m_lpsrt;
  322. };
  323. class _XTP_EXT_CLASS CXTPA2W
  324. {
  325. public:
  326. CXTPA2W(LPCSTR lpstr);
  327. ~CXTPA2W();
  328. operator LPCWSTR() const;
  329. protected:
  330. LPWSTR m_lpwsrt;
  331. };
  332. protected:
  333. //-----------------------------------------------------------------------
  334. // Summary:
  335. //     This method check resource identifier of loaded resources
  336. //-----------------------------------------------------------------------
  337. virtual void UpdateResourcesLangID();
  338. //-----------------------------------------------------------------------
  339. // Summary:
  340. //     This method is called to notify developer that load resources was failed.
  341. //-----------------------------------------------------------------------
  342. BOOL LoadFailed();
  343. public:
  344. static CProcessLocal<CXTPResourceManager> m_managerInstance; // Manager instance.
  345. protected:
  346. BOOL m_bValid;                      // TRUE if Resource manager is valid.
  347. HMODULE m_hResourceFile;            // Resource file handle.
  348. XTP_RESOURCEMANAGER_LANGINFO* m_pLanguageInfo;    // Resource language
  349. static HMODULE  m_hModXTResource;   // Handle to toolkit resource.
  350. //{{AFX_CODEJOCK_PRIVATE
  351. static BOOL CALLBACK EnumResTypeProc(HMODULE hModule, LPTSTR lpszType, LONG_PTR lParam);
  352. static BOOL CALLBACK EnumResNameProc(HMODULE hModule, LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam); // <combine CXTPResourceManager::EnumResTypeProc@HMODULE@LPTSTR@LONG_PTR>
  353. static BOOL CALLBACK EnumResLangProc(HMODULE hModule, LPCTSTR lpszType, LPCTSTR lpszName,
  354.  WORD wIDLanguage, LONG_PTR lParam); // <combine CXTPResourceManager::EnumResTypeProc@HMODULE@LPTSTR@LONG_PTR>
  355. //}}AFX_CODEJOCK_PRIVATE
  356. };
  357. #ifndef  _XTP_EXCLUDE_XML
  358. class CXTPPropExchangeXMLNode;
  359. class CXTPPropExchange;
  360. //===========================================================================
  361. // Summary:
  362. //     Class used to managed toolkit resources from XML file
  363. //===========================================================================
  364. class _XTP_EXT_CLASS CXTPResourceManagerXML : public CXTPResourceManager
  365. {
  366. private:
  367. struct MENUITEMTEMPLATEINFO;
  368. struct MENUTEMPLATEINFO;
  369. struct DLGTEMPLATEINFO;
  370. struct DLGITEMTEMPLATEINFO;
  371. struct DLGTEMPLATEEX;
  372. struct DLGITEMTEMPLATEEX;
  373. public:
  374. //-----------------------------------------------------------------------
  375. // Summary:
  376. //     Constructs a CXTPResourceManagerXML object.
  377. // Parameters:
  378. //     lpszFileName - XML file path
  379. //     pResourceRoot - Base XML Node
  380. //-----------------------------------------------------------------------
  381. CXTPResourceManagerXML(LPCTSTR lpszFileName);
  382. CXTPResourceManagerXML(CXTPPropExchangeXMLNode* pResourceRoot); // <combine CXTPResourceManagerXML::CXTPResourceManagerXML@LPCTSTR>
  383. //-------------------------------------------------------------------------
  384. // Summary:
  385. //     Destroys a CXTPResourceManagerXML object, handles cleanup and de-
  386. //     allocation.
  387. //-------------------------------------------------------------------------
  388. ~CXTPResourceManagerXML();
  389. public:
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //     Reads a Windows string resource, identified by nID, into an existing CString object
  393. // Parameters:
  394. //     pString     - Output string pointer
  395. //     nIDResource - A Windows string resource ID.
  396. // Returns:
  397. //     Nonzero if resource load was successful; otherwise 0.
  398. //-----------------------------------------------------------------------
  399. virtual BOOL LoadString(CString* pString, UINT nIDResource);
  400. //-----------------------------------------------------------------------
  401. // Summary:
  402. //     Reads a Windows menu resource, identified by nID, into an existing CMenu object
  403. // Parameters:
  404. //     lpMenu      - Output menu pointer
  405. //     nIDResource - A Windows menu resource ID.
  406. // Returns:
  407. //     Nonzero if resource load was successful; otherwise 0.
  408. //-----------------------------------------------------------------------
  409. virtual BOOL LoadMenu(CMenu* lpMenu, UINT nIDResource);
  410. //-----------------------------------------------------------------------
  411. // Summary:
  412. //     Reads a Windows dialog resource, identified by pszResource
  413. // Parameters:
  414. //     nIDResource - A Windows dialog resource ID.
  415. // Returns:
  416. //     LPCDLGTEMPLATE pointer if resource load was successful; otherwise 0.
  417. //-----------------------------------------------------------------------
  418. virtual LPCDLGTEMPLATE LoadDialogTemplate(UINT nIDResource);
  419. //-----------------------------------------------------------------------
  420. // Summary:
  421. //     This method free used resource. Call it in ExitInstance of your application if you use
  422. //     external resource file.
  423. // See Also: SetResourceFile
  424. //-----------------------------------------------------------------------
  425. virtual void Close();
  426. protected:
  427. //-----------------------------------------------------------------------
  428. // Summary:
  429. //     This method check resource identifier of loaded resources
  430. //-----------------------------------------------------------------------
  431. virtual void UpdateResourcesLangID();
  432. private:
  433. BOOL CreateMenu(CMenu& menu, CXTPPropExchange* pPX);
  434. void AddMenuItems(CXTPPropExchange* pPX, MENUTEMPLATEINFO* pItems);
  435. LPDLGTEMPLATE CreateDialogTemplate(CXTPPropExchange* pPX);
  436. LPDLGTEMPLATE CreateDialogTemplate(DLGTEMPLATEINFO& dlgTemplate);
  437. private:
  438. CXTPPropExchangeXMLNode* m_pResourceRoot;
  439. CMap<UINT, UINT, DLGTEMPLATE*, DLGTEMPLATE*> m_mapDialogs;
  440. };
  441. #endif
  442. //-----------------------------------------------------------------------
  443. // Summary:
  444. //     Call this function to access CXTPResourceManager members.
  445. //     Since this class is designed as a single instance object you can
  446. //     only access version info through this method. You <b>cannot</b>
  447. //     directly instantiate an object of type CXTPResourceManager.
  448. // Example:
  449. // <code>
  450. // XTPResourceManager()->LoadString(&m_strNoFieldsAvailable,
  451. //     XTP_IDS_REPORT_NOFIELDSAVAILABLE);
  452. // </code>
  453. //-----------------------------------------------------------------------
  454. _XTP_EXT_CLASS CXTPResourceManager* AFX_CDECL XTPResourceManager();
  455. AFX_INLINE WORD CXTPResourceManager::GetResourcesLangID() {
  456. return m_pLanguageInfo->wLanguage;
  457. }
  458. AFX_INLINE XTP_RESOURCEMANAGER_LANGINFO* CXTPResourceManager::GetLanguageInfo() const {
  459. return m_pLanguageInfo;
  460. }
  461. AFX_INLINE CString CXTPResourceManager::LoadString(UINT nIDResource, BOOL* pbError) {
  462. CString str;
  463. BOOL bRes = LoadString(&str, nIDResource);
  464. ASSERT(bRes);
  465. if (pbError) *pbError = !bRes;
  466. return str;
  467. }
  468. #endif // !defined(__XTPRESOURCEMANAGER_H__)