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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMacros.h : common macros
  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(__XTPMACROS_H__)
  22. #define __XTPMACROS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. //-----------------------------------------------------------------------------
  28. // Summary:
  29. //     Frees dynamically allocated memory.
  30. // Parameters:
  31. //     ptr - Points to the memory to free.
  32. // Remarks:
  33. //     This macro will first check to see if the block of memory specified by
  34. //     <i>ptr</i> is NULL. If <i>ptr</i> is not NULL, SAFE_DELETE will deallocate
  35. //     the block of memory and set its value to NULL. The pointer argument
  36. //     must refer to a block of memory previously allocated for an object
  37. //     created with the new operator.
  38. // Example:
  39. // <code>
  40. // CName* pName = new CName;          // Allocate memory for the object
  41. // pName->SetName("Firstname", "Lastname");
  42. // SAFE_DELETE(pName);                // Deallocate memory for the object
  43. // ASSERT(pName == NULL);
  44. // </code>
  45. //-----------------------------------------------------------------------------
  46. #define SAFE_DELETE(ptr)
  47. //{{AFX_CODEJOCK_PRIVATE
  48. #undef SAFE_DELETE
  49. #define SAFE_DELETE(ptr) 
  50. if (ptr) { delete ptr; ptr = NULL; }
  51. //}}AFX_CODEJOCK_PRIVATE
  52. //-----------------------------------------------------------------------------
  53. // Summary:
  54. //     Frees dynamically allocated memory for an array.
  55. // Parameters:
  56. //     ptr - Points to the memory array to free.
  57. // Remarks:
  58. //     This macro will first check to see if the block of memory specified by
  59. //     <i>ptr</i> is NULL. If <i>ptr</i> is not NULL, SAFE_DELETE_AR will deallocate
  60. //     the block of memory and set its value to NULL. The pointer argument
  61. //     must refer to a block of memory previously allocated for an object
  62. //     created with the new operator.
  63. // Example:
  64. // <code>
  65. // char* pCharArray = new char[256];  // Allocate memory for the array
  66. // strcpy(pCharArray, "Array of characters");
  67. // SAFE_DELETE_AR(pCharArray);        // Deallocate memory for the array
  68. // ASSERT(pCharArray == NULL);
  69. // </code>
  70. //-----------------------------------------------------------------------------
  71. #define SAFE_DELETE_AR(ptr)
  72. //{{AFX_CODEJOCK_PRIVATE
  73. #undef SAFE_DELETE_AR
  74. #define SAFE_DELETE_AR(ptr) 
  75. if (ptr) { delete [] ptr; ptr = NULL; }
  76. //}}AFX_CODEJOCK_PRIVATE
  77. //-----------------------------------------------------------------------------
  78. // Summary:
  79. //     Decrements the reference count for the specified object.
  80. // Parameters:
  81. //     comPointer - Points to the COM object to release.
  82. // Remarks:
  83. //     This macro will first check to see if the COM object specified by <i>comPointer</i>
  84. //     is NULL. If the object is not NULL, the macro calls IUnknown::Release
  85. //     COM object specified by <i>comPointer</i> and set its value to NULL.
  86. // See Also:
  87. //     IUnknown::Release
  88. //-----------------------------------------------------------------------------
  89. #define SAFE_RELEASE(comPointer)
  90. //{{AFX_CODEJOCK_PRIVATE
  91. #undef SAFE_RELEASE
  92. #define SAFE_RELEASE(comPointer) 
  93. if (comPointer) { (comPointer)->Release(); (comPointer)=NULL; }
  94. //}}AFX_CODEJOCK_PRIVATE
  95. //-----------------------------------------------------------------------------
  96. // Summary:
  97. //     Checks object pointer and if not NULL calls a specified function.
  98. // Parameters:
  99. //     classPointer - Pointer to the class that contains the function to call.
  100. //     functionName - Name of the function to call.
  101. // Remarks:
  102. //     This macro will first check to see if the class specified by <i>classPointer</i>
  103. //     is NULL. If the class is not NULL, the macro calls the function specified
  104. //     by <i>functionName</i>.
  105. // Example:
  106. // <code>
  107. //  SAFE_CALLPTR(m_pItem, OnConstraintsChanged());
  108. // </code>
  109. //-----------------------------------------------------------------------------
  110. #define SAFE_CALLPTR(classPointer, functionName)
  111. //{{AFX_CODEJOCK_PRIVATE
  112. #undef SAFE_CALLPTR
  113. #define SAFE_CALLPTR(classPointer, functionName) 
  114. if (classPointer) classPointer->functionName
  115. //}}AFX_CODEJOCK_PRIVATE
  116. //-----------------------------------------------------------------------------
  117. // Summary:
  118. //     Destroys an icon and frees any memory the icon occupied.
  119. // Parameters:
  120. //     hIcon - Handle to the icon to free.
  121. // Remarks:
  122. //     This macro will first check to see if the icon handle specified by
  123. //     <i>hIcon</i> is NULL. If <i>hIcon</i> is not NULL, SAFE_DELETE_HICON will
  124. //     destroy the icon handle and set its value to NULL.
  125. // Example:
  126. // <code>
  127. // HICON hIcon = XTPResourceManager()->LoadIcon(
  128. //     MAKEINTRESOURCE(dwID), item.size);
  129. // ::DrawIconEx(pDC->GetSafeHdc(), point.x, point.y, hIcon,
  130. //     size.cx, size.cy, 0, NULL, DI_NORMAL);
  131. // SAFE_DELETE_HICON(hIcon);
  132. // ASSERT(hIcon == NULL);
  133. // </code>
  134. //-----------------------------------------------------------------------------
  135. #define SAFE_DELETE_HICON(hIcon)
  136. //{{AFX_CODEJOCK_PRIVATE
  137. #undef SAFE_DELETE_HICON
  138. #define SAFE_DELETE_HICON(hIcon) 
  139. if (hIcon) {::DestroyIcon(hIcon); hIcon = NULL;}
  140. //}}AFX_CODEJOCK_PRIVATE
  141. //-----------------------------------------------------------------------------
  142. // Summary:
  143. //     Destroys a GDI object and frees the handle.
  144. // Parameters:
  145. //     obj - Handle to the GDI object free.
  146. // Remarks:
  147. //     This macro will first check to see if the GDI object specified by
  148. //     <i>obj</i> is NULL. If <i>obj</i> is not NULL, SAFE_DELETE_OBJ will
  149. //     delete the GDI object and set its value to NULL.
  150. // Example:
  151. // <code>
  152. // extern CFont m_font;
  153. // extern LOGFONT lf;
  154. // SAFE_DELETE_OBJ(m_font);
  155. // m_font.CreateFontIndirect(&lf);
  156. // </code>
  157. //-----------------------------------------------------------------------------
  158. #define SAFE_DELETE_OBJ(obj)
  159. //{{AFX_CODEJOCK_PRIVATE
  160. #undef SAFE_DELETE_OBJ
  161. #define SAFE_DELETE_OBJ(obj) 
  162. if (obj.GetSafeHandle()) {obj.DeleteObject();}
  163. //}}AFX_CODEJOCK_PRIVATE
  164. //{{AFX_CODEJOCK_PRIVATE
  165. //-----------------------------------------------------------------------------
  166. // Uncomment this definition if your application uses a resource dll, and add
  167. // #include "XTResource.rc" to your resource dll's .rc2 file.  You will have to
  168. // call XTAuxData().InitResources(HINSTANCE), once you have a resource handle, to
  169. // initialize the Xtreme Toolkit resources.  You will need to rebuild the
  170. // library after you have done this.
  171. //-----------------------------------------------------------------------------
  172. //#define _XT_USES_RESOURCE_DLL
  173. //}}AFX_CODEJOCK_PRIVATE
  174. //-----------------------------------------------------------------------------
  175. // Summary:
  176. //     XT_ASSERT_MSG is similar to ASSERT, except that it allows a custom
  177. //     message to be specified.
  178. // Parameters:
  179. //     exp - Specifies an expression (including pointer values)
  180. //           that evaluates to nonzero or 0.
  181. //     msg - Specifies a NULL terminated user defined string of
  182. //           the message to display to the user.
  183. // Remarks:
  184. //     Evaluates its argument. If the result is 0, the macro prints a
  185. //     diagnostic message and aborts the program. If the condition is
  186. //     nonzero, it does nothing.<p/>
  187. //
  188. //     The diagnostic message has the form "assertion failed in file
  189. //     <i>name</i> in line <i>num</i>.<p/>
  190. //
  191. //     where <i>name</i> is the name of the source file, and <i>num</i>
  192. //     is the line number of the assertion that failed in the source file.<p/>
  193. //
  194. //     In the Release version of MFC, XT_ASSERT_MSG does not evaluate the
  195. //     expression and thus will not interrupt the program. If the expression
  196. //     must be evaluated regardless of environment, use the VERIFY macro in
  197. //     place of XT_ASSERT_MSG.<p/>
  198. //
  199. //     <b>Note</b> This function is available only in the Debug version of
  200. //     MFC.
  201. // Example:
  202. // <code>
  203. // // example for XT_ASSERT_MSG
  204. // CAge* pAge = new CAge(21); // CAge is derived from CObject.
  205. //
  206. // // Terminates program only if pAge is NOT a CAge*.
  207. // XT_ASSERT_MSG(pAge!= NULL, _T("Failed to allocate memory."));
  208. // XT_ASSERT_MSG(pAge->IsKindOf(RUNTIME_CLASS(CAge)), _T("This is not a CAge object."));
  209. // </code>
  210. // See Also:
  211. //     ASSERT, VERIFY
  212. //-----------------------------------------------------------------------------
  213. #define XT_ASSERT_MSG(exp, msg)
  214. //{{AFX_CODEJOCK_PRIVATE
  215. #undef XT_ASSERT_MSG
  216. #ifdef _DEBUG
  217. #ifndef _AFX_NO_DEBUG_CRT
  218. #define XT_ASSERT_MSG(exp, msg) 
  219. if (!(exp) && (_CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, "n-----------------------n" msg "n-----------------------"))) 
  220. AfxDebugBreak(); 
  221. #else
  222. #define XT_ASSERT_MSG(exp, msg) (void)((exp) || (_assert("n-----------------------n" msg "n-----------------------", __FILE__, __LINE__), 0))
  223. #endif//_AFX_NO_DEBUG_CRT
  224. #else
  225. #define XT_ASSERT_MSG(exp, msg) ((void)0)
  226. #endif//_DEBUG
  227. //}}AFX_CODEJOCK_PRIVATE
  228. //{{AFX_CODEJOCK_PRIVATE
  229. #ifdef _DEBUG
  230. #ifndef _AFX_NO_DEBUG_CRT
  231. #define XT_ERROR_MSG(msg) 
  232. if ((_CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, "n-----------------------n" msg "n-----------------------"))) 
  233. AfxDebugBreak(); 
  234. #else
  235. #define XT_ERROR_MSG(msg) (void)((_assert("n-----------------------n" msg "n-----------------------", __FILE__, __LINE__), 0))
  236. #endif//_AFX_NO_DEBUG_CRT
  237. #else
  238. #define XT_ERROR_MSG(msg) ((void)0)
  239. #endif//_DEBUG
  240. #if _MSC_VER >= 1400
  241. #define _XTP_DEPRECATE(_Message) __declspec(deprecated(_Message))
  242. #elif _MSC_VER >= 1300
  243. #define _XTP_DEPRECATE(_Message) __declspec(deprecated)
  244. #else
  245. #define _XTP_DEPRECATE(_Message)
  246. #endif
  247. #ifdef _UNICODE
  248. #ifndef UNICODE
  249. #define UNICODE
  250. #endif
  251. #endif
  252. #define __STR2__(x) #x
  253. #define __STR1__(x) __STR2__(x)
  254. #define __LOC__ __FILE__ "("__STR1__(__LINE__)"): "
  255. // usage: #pragma message(__LOC__"Need to do 3D collision testing")
  256. #ifdef _AFXDLL
  257. #define SAFE_MANAGE_STATE(s) AFX_MANAGE_STATE(s)
  258. #else
  259. #define SAFE_MANAGE_STATE(s)
  260. #endif
  261. #ifndef AFX_INLINE
  262. #define AFX_INLINE inline
  263. #endif
  264. #ifndef CBRS_GRIPPER
  265. #define CBRS_GRIPPER                    0x00400000L
  266. #endif
  267. #ifndef WS_EX_LAYOUTRTL
  268. #define WS_EX_LAYOUTRTL                 0x00400000L
  269. #endif
  270. #ifndef DT_WORD_ELLIPSIS
  271. #define DT_WORD_ELLIPSIS                0x00040000L
  272. #endif
  273. #ifndef _countof
  274. #define _countof(array) (sizeof(array)/sizeof(array[0]))
  275. #endif
  276. #if (_MSC_VER >= 1300)
  277. template<> AFX_INLINE UINT AFXAPI HashKey<UINT_PTR>(UINT_PTR key) {
  278. return (DWORD)(((DWORD_PTR)key)>>4);
  279. }
  280. #endif
  281. #if (_MSC_VER <= 1200) && !defined(_WIN64)
  282. // IA64 Macros:
  283. #ifndef DWORD_PTR
  284. #define DWORD_PTR DWORD
  285. #endif
  286. #ifndef UINT_PTR
  287. #define UINT_PTR UINT
  288. #endif
  289. #ifndef INT_PTR
  290. #define INT_PTR int
  291. #endif
  292. #ifndef ULONG_PTR
  293. #define ULONG_PTR ULONG
  294. #endif
  295. #ifndef LONG_PTR
  296. #define LONG_PTR long
  297. #endif
  298. #ifndef SetWindowLongPtr
  299. #define SetWindowLongPtr SetWindowLong
  300. #endif
  301. #ifndef GetWindowLongPtr
  302. #define GetWindowLongPtr GetWindowLong
  303. #endif
  304. #ifndef GetClassLongPtr
  305. #define GetClassLongPtr GetClassLong
  306. #endif
  307. #ifndef SetClassLongPtr
  308. #define SetClassLongPtr SetClassLong
  309. #endif
  310. #ifndef GCLP_MENUNAME
  311. #define GCLP_MENUNAME       (-8)
  312. #endif
  313. #ifndef GCLP_HBRBACKGROUND
  314. #define GCLP_HBRBACKGROUND  (-10)
  315. #endif
  316. #ifndef GCLP_HCURSOR
  317. #define GCLP_HCURSOR        (-12)
  318. #endif
  319. #ifndef GCLP_HICON
  320. #define GCLP_HICON          (-14)
  321. #endif
  322. #ifndef GCLP_HMODULE
  323. #define GCLP_HMODULE        (-16)
  324. #endif
  325. #ifndef GCLP_WNDPROC
  326. #define GCLP_WNDPROC        (-24)
  327. #endif
  328. #ifndef GCLP_HICONSM
  329. #define GCLP_HICONSM        (-34)
  330. #endif
  331. #ifndef GWLP_WNDPROC
  332. #define GWLP_WNDPROC        (-4)
  333. #endif
  334. #ifndef GWLP_HINSTANCE
  335. #define GWLP_HINSTANCE      (-6)
  336. #endif
  337. #ifndef GWLP_HWNDPARENT
  338. #define GWLP_HWNDPARENT     (-8)
  339. #endif
  340. #ifndef GWLP_USERDATA
  341. #define GWLP_USERDATA       (-21)
  342. #endif
  343. #ifndef GWLP_ID
  344. #define GWLP_ID             (-12)
  345. #endif
  346. #endif
  347. #define ON_WM_NCHITTEST_EX() 
  348. { WM_NCHITTEST, 0, 0, 0, AfxSig_wp, 
  349. (AFX_PMSG)(AFX_PMSGW) 
  350. (static_cast< LRESULT (AFX_MSG_CALL CWnd::*)(CPoint) > (OnNcHitTest)) },
  351. #define CMDTARGET_RELEASE(x) if (x) { x->InternalRelease(); x = 0;}
  352. #define CMDTARGET_ADDREF(x) if (x) { x->InternalAddRef(); }
  353. #define SAFE_INVALIDATE(pWnd) if (pWnd && pWnd->GetSafeHwnd()) pWnd->Invalidate(FALSE);
  354. #define CXTPCmdTarget CCmdTarget
  355. #define DISABLE_COPY_OPERATOR(theClass) 
  356. private:
  357. theClass& operator=(const theClass &) { ASSERT(FALSE); return *this; }
  358. #define DISABLE_WNDCREATE() 
  359. private:
  360. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  361. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);}
  362. #define DISABLE_WNDCREATEEX() 
  363. private:
  364. BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
  365. int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam = NULL) {
  366. return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, nIDorHMenu, lpParam);
  367. }
  368. BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
  369. const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam = NULL) {
  370. return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
  371. }
  372. //}}AFX_CODEJOCK_PRIVATE
  373. //{{AFX_CODEJOCK_PRIVATE
  374. #ifdef __XTPDLLEXPORTS_H__
  375. #if (_MSC_VER > 1200) && !defined(_WIN64)
  376. #ifdef SetWindowLongPtrA
  377. #undef SetWindowLongPtrA
  378. inline LONG_PTR SetWindowLongPtrA( HWND hWnd, int nIndex, LONG_PTR dwNewLong )
  379. {
  380. return( ::SetWindowLongA( hWnd, nIndex, LONG( dwNewLong ) ) );
  381. }
  382. #endif
  383. #ifdef SetWindowLongPtrW
  384. #undef SetWindowLongPtrW
  385. inline LONG_PTR SetWindowLongPtrW( HWND hWnd, int nIndex, LONG_PTR dwNewLong )
  386. {
  387. return( ::SetWindowLongW( hWnd, nIndex, LONG( dwNewLong ) ) );
  388. }
  389. #endif
  390. #ifdef GetWindowLongPtrA
  391. #undef GetWindowLongPtrA
  392. inline LONG_PTR GetWindowLongPtrA( HWND hWnd, int nIndex )
  393. {
  394. return( ::GetWindowLongA( hWnd, nIndex ) );
  395. }
  396. #endif
  397. #ifdef GetWindowLongPtrW
  398. #undef GetWindowLongPtrW
  399. inline LONG_PTR GetWindowLongPtrW( HWND hWnd, int nIndex )
  400. {
  401. return( ::GetWindowLongW( hWnd, nIndex ) );
  402. }
  403. #endif
  404. #ifdef SetClassLongPtrA
  405. #undef SetClassLongPtrA
  406. inline LONG_PTR SetClassLongPtrA( HWND hWnd, int nIndex, LONG_PTR dwNewLong )
  407. {
  408. return( ::SetClassLongA( hWnd, nIndex, LONG( dwNewLong ) ) );
  409. }
  410. #endif
  411. #ifdef SetClassLongPtrW
  412. #undef SetClassLongPtrW
  413. inline LONG_PTR SetClassLongPtrW( HWND hWnd, int nIndex, LONG_PTR dwNewLong )
  414. {
  415. return( ::SetClassLongW( hWnd, nIndex, LONG( dwNewLong ) ) );
  416. }
  417. #endif
  418. #ifdef GetClassLongPtrA
  419. #undef GetClassLongPtrA
  420. inline LONG_PTR GetClassLongPtrA( HWND hWnd, int nIndex )
  421. {
  422. return( ::GetClassLongA( hWnd, nIndex ) );
  423. }
  424. #endif
  425. #ifdef GetClassLongPtrW
  426. #undef GetClassLongPtrW
  427. inline LONG_PTR GetClassLongPtrW( HWND hWnd, int nIndex )
  428. {
  429. return( ::GetClassLongW( hWnd, nIndex ) );
  430. }
  431. #endif
  432. #endif
  433. // Note: afxData.cxBorder and afxData.cyBorder aren't used anymore
  434. #define CX_BORDER   1
  435. #define CY_BORDER   1
  436. #define _AfxGetDlgCtrlID(hWnd) ((UINT)(WORD)::GetDlgCtrlID(hWnd))
  437. #define AFX_WNDCOMMCTLS_REG             0x00010 // means all original Win95
  438. #define AFX_WNDCOMMCTL_BAR_REG          0x01000
  439. #define AFX_WNDCOMMCTL_USEREX_REG       0x10000
  440. #define AFX_WNDCOMMCTL_DATE_REG         0x20000
  441. #define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)
  442. #if (_MSC_VER <= 1100)
  443. extern BOOL AFXAPI AfxEndDeferRegisterClass(short fClass);
  444. #else
  445. BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister);
  446. #endif
  447. HWND AFXAPI AfxGetParentOwner(HWND hWnd);
  448. #endif // __XTPDLLEXPORTS_H__
  449. //}}AFX_CODEJOCK_PRIVATE
  450. //{{AFX_CODEJOCK_PRIVATE
  451. #if (WINVER >= 0x40A)
  452. DECLARE_HANDLE(XTP_HIMC);
  453. #else
  454. typedef DWORD   XTP_HIMC;
  455. #endif
  456. //}}AFX_CODEJOCK_PRIVATE
  457. //-----------------------------------------------------------------------------
  458. #endif // #if !defined(__XTPMACROS_H__)