AFXIMPL.H
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:19k
源码类别:

图形图象

开发平台:

Visual C++

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10. #undef AFX_DATA
  11. #define AFX_DATA AFX_CORE_DATA
  12. /////////////////////////////////////////////////////////////////////////////
  13. // Auxiliary System/Screen metrics
  14. struct AUX_DATA
  15. {
  16. // system metrics
  17. int cxVScroll, cyHScroll;
  18. int cxIcon, cyIcon;
  19. int cxBorder2, cyBorder2;
  20. // device metrics for screen
  21. int cxPixelsPerInch, cyPixelsPerInch;
  22. // convenient system color
  23. HBRUSH hbrWindowFrame;
  24. HBRUSH hbrBtnFace;
  25. // color values of system colors used for CToolBar
  26. COLORREF clrBtnFace, clrBtnShadow, clrBtnHilite;
  27. COLORREF clrBtnText, clrWindowFrame;
  28. // standard cursors
  29. HCURSOR hcurWait;
  30. HCURSOR hcurArrow;
  31. HCURSOR hcurHelp;       // cursor used in Shift+F1 help
  32. // special GDI objects allocated on demand
  33. HFONT   hStatusFont;
  34. HFONT   hToolTipsFont;
  35. HBITMAP hbmMenuDot;
  36. // other system information
  37. UINT    nWinVer;        // Major.Minor version numbers
  38. BOOL    bWin95;         // TRUE if Windows 95 (not NT)
  39. BOOL    bWin4;          // TRUE if Windows 4.0
  40. BOOL    bNotWin4;       // TRUE if not Windows 4.0
  41. BOOL    bSmCaption;     // TRUE if WS_EX_SMCAPTION is supported
  42. BOOL    bMarked4;       // TRUE if marked as 4.0
  43. // Implementation
  44. AUX_DATA();
  45. ~AUX_DATA();
  46. void UpdateSysColors();
  47. void UpdateSysMetrics();
  48. };
  49. extern AFX_DATA AUX_DATA afxData;
  50. /////////////////////////////////////////////////////////////////////////////
  51. // _AFX_CTL3D_STATE
  52. #ifndef _AFX_NO_CTL3D_SUPPORT
  53. #undef AFX_DATA
  54. #define AFX_DATA
  55. class _AFX_CTL3D_STATE : public CNoTrackObject
  56. {
  57. public:
  58. virtual ~_AFX_CTL3D_STATE();
  59. // setup during initialization
  60. BOOL m_bCtl3dInited;
  61. HINSTANCE m_hCtl3dLib;
  62. // CTL3D32 entry points
  63. BOOL (WINAPI* m_pfnRegister)(HINSTANCE);
  64. BOOL (WINAPI* m_pfnUnregister)(HINSTANCE);
  65. BOOL (WINAPI* m_pfnAutoSubclass)(HINSTANCE);
  66. BOOL (WINAPI* m_pfnUnAutoSubclass)();
  67. BOOL (WINAPI* m_pfnColorChange)();
  68. BOOL (WINAPI* m_pfnSubclassDlgEx)(HWND, DWORD);
  69. void (WINAPI* m_pfnWinIniChange)();
  70. BOOL (WINAPI* m_pfnSubclassCtl)(HWND);
  71. BOOL (WINAPI* m_pfnSubclassCtlEx)(HWND, int);
  72. };
  73. EXTERN_PROCESS_LOCAL(_AFX_CTL3D_STATE, _afxCtl3dState)
  74. class _AFX_CTL3D_THREAD : public CNoTrackObject
  75. {
  76. public:
  77. virtual ~_AFX_CTL3D_THREAD();
  78. };
  79. EXTERN_THREAD_LOCAL(_AFX_CTL3D_THREAD, _afxCtl3dThread)
  80. _AFX_CTL3D_STATE* AFXAPI AfxGetCtl3dState();
  81. #endif //!_AFX_NO_CTL3D_SUPPORT
  82. /////////////////////////////////////////////////////////////////////////////
  83. // _AFX_EDIT_STATE
  84. class _AFX_EDIT_STATE : public CNoTrackObject
  85. {
  86. public:
  87. _AFX_EDIT_STATE();
  88. virtual ~_AFX_EDIT_STATE();
  89. CFindReplaceDialog* pFindReplaceDlg; // find or replace dialog
  90. BOOL bFindOnly; // Is pFindReplace the find or replace?
  91. CString strFind;    // last find string
  92. CString strReplace; // last replace string
  93. BOOL bCase; // TRUE==case sensitive, FALSE==not
  94. int bNext;  // TRUE==search down, FALSE== search up
  95. BOOL bWord; // TRUE==match whole word, FALSE==not
  96. };
  97. #undef AFX_DATA
  98. #define AFX_DATA AFX_CORE_DATA
  99. class _AFX_RICHEDIT_STATE : public _AFX_EDIT_STATE
  100. {
  101. public:
  102. HINSTANCE m_hInstRichEdit;      // handle to RICHED32.DLL
  103. virtual ~_AFX_RICHEDIT_STATE();
  104. };
  105. EXTERN_PROCESS_LOCAL(_AFX_RICHEDIT_STATE, _afxRichEditState)
  106. _AFX_RICHEDIT_STATE* AFX_CDECL AfxGetRichEditState();
  107. #undef AFX_DATA
  108. #define AFX_DATA
  109. ////////////////////////////////////////////////////////////////////////////
  110. // other global state
  111. class CPushRoutingFrame
  112. {
  113. protected:
  114. CFrameWnd* pOldRoutingFrame;
  115. _AFX_THREAD_STATE* pThreadState;
  116. public:
  117. CPushRoutingFrame(CFrameWnd* pNewRoutingFrame)
  118. {
  119. pThreadState = AfxGetThreadState();
  120. pOldRoutingFrame = pThreadState->m_pRoutingFrame;
  121. pThreadState->m_pRoutingFrame = pNewRoutingFrame;
  122. }
  123. ~CPushRoutingFrame()
  124. { pThreadState->m_pRoutingFrame = pOldRoutingFrame; }
  125. };
  126. class CPushRoutingView
  127. {
  128. protected:
  129. CView* pOldRoutingView;
  130. _AFX_THREAD_STATE* pThreadState;
  131. public:
  132. CPushRoutingView(CView* pNewRoutingView)
  133. {
  134. pThreadState = AfxGetThreadState();
  135. pOldRoutingView = pThreadState->m_pRoutingView;
  136. pThreadState->m_pRoutingView = pNewRoutingView;
  137. }
  138. ~CPushRoutingView()
  139. { pThreadState->m_pRoutingView = pOldRoutingView; }
  140. };
  141. // Note: afxData.cxBorder and afxData.cyBorder aren't used anymore
  142. #define CX_BORDER   1
  143. #define CY_BORDER   1
  144. // states for Shift+F1 hep mode
  145. #define HELP_INACTIVE   0   // not in Shift+F1 help mode (must be 0)
  146. #define HELP_ACTIVE     1   // in Shift+F1 help mode (non-zero)
  147. #define HELP_ENTERING   2   // entering Shift+F1 help mode (non-zero)
  148. /////////////////////////////////////////////////////////////////////////////
  149. // Window class names and other window creation support
  150. // from wincore.cpp
  151. extern const TCHAR _afxWnd[];           // simple child windows/controls
  152. extern const TCHAR _afxWndControlBar[]; // controls with gray backgrounds
  153. extern const TCHAR _afxWndMDIFrame[];
  154. extern const TCHAR _afxWndFrameOrView[];
  155. extern const TCHAR _afxWndOleControl[];
  156. #define AFX_WND_REG                     0x00001
  157. #define AFX_WNDCONTROLBAR_REG           0x00002
  158. #define AFX_WNDMDIFRAME_REG             0x00004
  159. #define AFX_WNDFRAMEORVIEW_REG          0x00008
  160. #define AFX_WNDCOMMCTLS_REG             0x00010 // means all original Win95
  161. #define AFX_WNDOLECONTROL_REG           0x00020
  162. #define AFX_WNDCOMMCTL_UPDOWN_REG       0x00040 // these are original Win95
  163. #define AFX_WNDCOMMCTL_TREEVIEW_REG     0x00080
  164. #define AFX_WNDCOMMCTL_TAB_REG          0x00100
  165. #define AFX_WNDCOMMCTL_PROGRESS_REG     0x00200
  166. #define AFX_WNDCOMMCTL_LISTVIEW_REG     0x00400
  167. #define AFX_WNDCOMMCTL_HOTKEY_REG       0x00800
  168. #define AFX_WNDCOMMCTL_BAR_REG          0x01000
  169. #define AFX_WNDCOMMCTL_ANIMATE_REG      0x02000
  170. #define AFX_WNDCOMMCTL_INTERNET_REG     0x04000 // these are new in IE4
  171. #define AFX_WNDCOMMCTL_COOL_REG         0x08000
  172. #define AFX_WNDCOMMCTL_USEREX_REG       0x10000
  173. #define AFX_WNDCOMMCTL_DATE_REG         0x20000
  174. #define AFX_WIN95CTLS_MASK              0x03FC0 // UPDOWN -> ANIMATE
  175. #define AFX_WNDCOMMCTLSALL_REG          0x3C010 // COMMCTLS|INTERNET|COOL|USEREX|DATE
  176. #define AFX_WNDCOMMCTLSNEW_REG          0x3C000 // INTERNET|COOL|USEREX|DATE
  177. #define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)
  178. BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister);
  179. // MFC has its own version of the TOOLINFO structure containing the
  180. // the Win95 base version of the structure. Since MFC targets Win95 base,
  181. // we need this structure so calls into that old library don't fail.
  182. typedef struct tagAFX_OLDTOOLINFO {
  183. UINT cbSize;
  184. UINT uFlags;
  185. HWND hwnd;
  186. UINT uId;
  187. RECT rect;
  188. HINSTANCE hinst;
  189. LPTSTR lpszText;
  190. } AFX_OLDTOOLINFO;
  191. // special AFX window class name mangling
  192. #ifndef _UNICODE
  193. #define _UNICODE_SUFFIX
  194. #else
  195. #define _UNICODE_SUFFIX _T("u")
  196. #endif
  197. #ifndef _DEBUG
  198. #define _DEBUG_SUFFIX
  199. #else
  200. #define _DEBUG_SUFFIX _T("d")
  201. #endif
  202. #ifdef _AFXDLL
  203. #define _STATIC_SUFFIX
  204. #else
  205. #define _STATIC_SUFFIX _T("s")
  206. #endif
  207. #define AFX_WNDCLASS(s) 
  208. _T("Afx") _T(s) _T("42") _STATIC_SUFFIX _UNICODE_SUFFIX _DEBUG_SUFFIX
  209. #define AFX_WND             AFX_WNDCLASS("Wnd")
  210. #define AFX_WNDCONTROLBAR   AFX_WNDCLASS("ControlBar")
  211. #define AFX_WNDMDIFRAME     AFX_WNDCLASS("MDIFrame")
  212. #define AFX_WNDFRAMEORVIEW  AFX_WNDCLASS("FrameOrView")
  213. #define AFX_WNDOLECONTROL   AFX_WNDCLASS("OleControl")
  214. // dialog/commdlg hook procs
  215. BOOL CALLBACK AfxDlgProc(HWND, UINT, WPARAM, LPARAM);
  216. UINT CALLBACK _AfxCommDlgProc(HWND hWnd, UINT, WPARAM, LPARAM);
  217. // support for standard dialogs
  218. extern UINT _afxMsgSETRGB;
  219. typedef UINT (CALLBACK* COMMDLGPROC)(HWND, UINT, UINT, LONG);
  220. /////////////////////////////////////////////////////////////////////////////
  221. // Extended dialog templates (new in Win95)
  222. #pragma pack(push, 1)
  223. typedef struct
  224. {
  225. WORD dlgVer;
  226. WORD signature;
  227. DWORD helpID;
  228. DWORD exStyle;
  229. DWORD style;
  230. WORD cDlgItems;
  231. short x;
  232. short y;
  233. short cx;
  234. short cy;
  235. } DLGTEMPLATEEX;
  236. typedef struct
  237. {
  238. DWORD helpID;
  239. DWORD exStyle;
  240. DWORD style;
  241. short x;
  242. short y;
  243. short cx;
  244. short cy;
  245. DWORD id;
  246. } DLGITEMTEMPLATEEX;
  247. #pragma pack(pop)
  248. /////////////////////////////////////////////////////////////////////////////
  249. // Special helpers
  250. void AFXAPI AfxCancelModes(HWND hWndRcvr);
  251. HWND AFXAPI AfxGetParentOwner(HWND hWnd);
  252. BOOL AFXAPI AfxIsDescendant(HWND hWndParent, HWND hWndChild);
  253. BOOL AFXAPI AfxHelpEnabled();  // determine if ID_HELP handler exists
  254. void AFXAPI AfxDeleteObject(HGDIOBJ* pObject);
  255. BOOL AFXAPI AfxCustomLogFont(UINT nIDS, LOGFONT* pLogFont);
  256. BOOL AFXAPI AfxGetPropSheetFont(CString& strFace, WORD& wSize, BOOL bWizard);
  257. BOOL AFXAPI _AfxIsComboBoxControl(HWND hWnd, UINT nStyle);
  258. BOOL AFXAPI _AfxCheckCenterDialog(LPCTSTR lpszResource);
  259. BOOL AFXAPI _AfxCompareClassName(HWND hWnd, LPCTSTR lpszClassName);
  260. HWND AFXAPI _AfxChildWindowFromPoint(HWND, POINT);
  261. // for determining version of COMCTL32.DLL
  262. #define VERSION_WIN4    MAKELONG(0, 4)
  263. #define VERSION_IE3     MAKELONG(70, 4)
  264. #define VERSION_IE4     MAKELONG(71, 4)
  265. #define VERSION_IE401   MAKELONG(72, 4)
  266. extern int _afxComCtlVersion;
  267. DWORD AFXAPI _AfxGetComCtlVersion();
  268. #undef AFX_DATA
  269. #define AFX_DATA AFX_CORE_DATA
  270. // UNICODE/MBCS abstractions
  271. #ifdef _MBCS
  272. extern AFX_DATA const BOOL _afxDBCS;
  273. #else
  274. #define _afxDBCS FALSE
  275. #endif
  276. #undef AFX_DATA
  277. #define AFX_DATA
  278. // determine number of elements in an array (not bytes)
  279. #define _countof(array) (sizeof(array)/sizeof(array[0]))
  280. #ifndef _AFX_PORTABLE
  281. int AFX_CDECL AfxCriticalNewHandler(size_t nSize);
  282. #endif
  283. void AFXAPI AfxGlobalFree(HGLOBAL hGlobal);
  284. /////////////////////////////////////////////////////////////////////////////
  285. // static exceptions
  286. extern CNotSupportedException _simpleNotSupportedException;
  287. extern CMemoryException _simpleMemoryException;
  288. extern CUserException _simpleUserException;
  289. extern CResourceException _simpleResourceException;
  290. /////////////////////////////////////////////////////////////////////////////
  291. // useful message ranges
  292. #define WM_SYSKEYFIRST  WM_SYSKEYDOWN
  293. #define WM_SYSKEYLAST   WM_SYSDEADCHAR
  294. #define WM_NCMOUSEFIRST WM_NCMOUSEMOVE
  295. #define WM_NCMOUSELAST  WM_NCMBUTTONDBLCLK
  296. /////////////////////////////////////////////////////////////////////////////
  297. // AFX_CRITICAL_SECTION
  298. #undef AFX_DATA
  299. #define AFX_DATA AFX_CORE_DATA
  300. // these globals are protected by the same critical section
  301. #define CRIT_DYNLINKLIST    0
  302. #define CRIT_RUNTIMECLASSLIST   0
  303. #define CRIT_OBJECTFACTORYLIST  0
  304. #define CRIT_LOCKSHARED 0
  305. // these globals are not protected by independent critical sections
  306. #define CRIT_REGCLASSLIST   1
  307. #define CRIT_WAITCURSOR     2
  308. #define CRIT_DROPSOURCE     3
  309. #define CRIT_DROPTARGET     4
  310. #define CRIT_RECTTRACKER    5
  311. #define CRIT_EDITVIEW       6
  312. #define CRIT_WINMSGCACHE    7
  313. #define CRIT_HALFTONEBRUSH  8
  314. #define CRIT_SPLITTERWND    9
  315. #define CRIT_MINIFRAMEWND   10
  316. #define CRIT_CTLLOCKLIST    11
  317. #define CRIT_DYNDLLLOAD     12
  318. #define CRIT_TYPELIBCACHE   13
  319. #define CRIT_STOCKMASK      14
  320. #define CRIT_ODBC           15
  321. #define CRIT_PROCESSLOCAL   16
  322. #define CRIT_MAX    17  // Note: above plus one!
  323. #ifdef _MT
  324. void AFXAPI AfxLockGlobals(int nLockType);
  325. void AFXAPI AfxUnlockGlobals(int nLockType);
  326. BOOL AFXAPI AfxCriticalInit();
  327. void AFXAPI AfxCriticalTerm();
  328. #else
  329. #define AfxLockGlobals(nLockType)
  330. #define AfxUnlockGlobals(nLockType)
  331. #define AfxCriticalInit() (TRUE)
  332. #define AfxCriticalTerm()
  333. #endif
  334. /////////////////////////////////////////////////////////////////////////////
  335. // Portability abstractions
  336. #define _AfxSetDlgCtrlID(hWnd, nID)     SetWindowLong(hWnd, GWL_ID, nID)
  337. #define _AfxGetDlgCtrlID(hWnd)          ((UINT)(WORD)::GetDlgCtrlID(hWnd))
  338. // misc helpers
  339. BOOL AFXAPI AfxFullPath(LPTSTR lpszPathOut, LPCTSTR lpszFileIn);
  340. BOOL AFXAPI AfxComparePath(LPCTSTR lpszPath1, LPCTSTR lpszPath2);
  341. UINT AFXAPI AfxGetFileTitle(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);
  342. UINT AFXAPI AfxGetFileName(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);
  343. void AFX_CDECL AfxTimeToFileTime(const CTime& time, LPFILETIME pFileTime);
  344. void AFXAPI AfxGetRoot(LPCTSTR lpszPath, CString& strRoot);
  345. #ifndef _AFX_NO_OLE_SUPPORT
  346. class AFX_COM
  347. {
  348. public:
  349. HRESULT CreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
  350. REFIID riid, LPVOID* ppv);
  351. HRESULT GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
  352. };
  353. CString AFXAPI AfxStringFromCLSID(REFCLSID rclsid);
  354. BOOL AFXAPI AfxGetInProcServer(LPCTSTR lpszCLSID, CString& str);
  355. BOOL AFXAPI AfxResolveShortcut(CWnd* pWnd, LPCTSTR pszShortcutFile,
  356. LPTSTR pszPath, int cchPath);
  357. #endif // _AFX_NO_OLE_SUPPORT
  358. #define NULL_TLS ((DWORD)-1)
  359. /////////////////////////////////////////////////////////////////////////////
  360. // Message map and message dispatch
  361. const AFX_MSGMAP_ENTRY* AFXAPI
  362. AfxFindMessageEntry(const AFX_MSGMAP_ENTRY* lpEntry,
  363. UINT nMsg, UINT nCode, UINT nID);
  364. union MessageMapFunctions
  365. {
  366. AFX_PMSG pfn;   // generic member function pointer
  367. // specific type safe variants for WM_COMMAND and WM_NOTIFY messages
  368. void (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND)();
  369. BOOL (AFX_MSG_CALL CCmdTarget::*pfn_bCOMMAND)();
  370. void (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND_RANGE)(UINT);
  371. BOOL (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND_EX)(UINT);
  372. void (AFX_MSG_CALL CCmdTarget::*pfn_UPDATE_COMMAND_UI)(CCmdUI*);
  373. void (AFX_MSG_CALL CCmdTarget::*pfn_UPDATE_COMMAND_UI_RANGE)(CCmdUI*, UINT);
  374. void (AFX_MSG_CALL CCmdTarget::*pfn_OTHER)(void*);
  375. BOOL (AFX_MSG_CALL CCmdTarget::*pfn_OTHER_EX)(void*);
  376. void (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY)(NMHDR*, LRESULT*);
  377. BOOL (AFX_MSG_CALL CCmdTarget::*pfn_bNOTIFY)(NMHDR*, LRESULT*);
  378. void (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY_RANGE)(UINT, NMHDR*, LRESULT*);
  379. BOOL (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY_EX)(UINT, NMHDR*, LRESULT*);
  380. // type safe variant for thread messages
  381. void (AFX_MSG_CALL CWinThread::*pfn_THREAD)(WPARAM, LPARAM);
  382. // specific type safe variants for WM-style messages
  383. BOOL    (AFX_MSG_CALL CWnd::*pfn_bD)(CDC*);
  384. BOOL    (AFX_MSG_CALL CWnd::*pfn_bb)(BOOL);
  385. BOOL    (AFX_MSG_CALL CWnd::*pfn_bWww)(CWnd*, UINT, UINT);
  386. BOOL    (AFX_MSG_CALL CWnd::*pfn_bHELPINFO)(HELPINFO*);
  387. BOOL    (AFX_MSG_CALL CWnd::*pfn_bWCDS)(CWnd*, COPYDATASTRUCT*);
  388. HBRUSH  (AFX_MSG_CALL CWnd::*pfn_hDWw)(CDC*, CWnd*, UINT);
  389. HBRUSH  (AFX_MSG_CALL CWnd::*pfn_hDw)(CDC*, UINT);
  390. int     (AFX_MSG_CALL CWnd::*pfn_iwWw)(UINT, CWnd*, UINT);
  391. int     (AFX_MSG_CALL CWnd::*pfn_iww)(UINT, UINT);
  392. int     (AFX_MSG_CALL CWnd::*pfn_iWww)(CWnd*, UINT, UINT);
  393. int     (AFX_MSG_CALL CWnd::*pfn_is)(LPTSTR);
  394. LRESULT (AFX_MSG_CALL CWnd::*pfn_lwl)(WPARAM, LPARAM);
  395. LRESULT (AFX_MSG_CALL CWnd::*pfn_lwwM)(UINT, UINT, CMenu*);
  396. void    (AFX_MSG_CALL CWnd::*pfn_vv)(void);
  397. void    (AFX_MSG_CALL CWnd::*pfn_vw)(UINT);
  398. void    (AFX_MSG_CALL CWnd::*pfn_vww)(UINT, UINT);
  399. void    (AFX_MSG_CALL CWnd::*pfn_vvii)(int, int);
  400. void    (AFX_MSG_CALL CWnd::*pfn_vwww)(UINT, UINT, UINT);
  401. void    (AFX_MSG_CALL CWnd::*pfn_vwii)(UINT, int, int);
  402. void    (AFX_MSG_CALL CWnd::*pfn_vwl)(WPARAM, LPARAM);
  403. void    (AFX_MSG_CALL CWnd::*pfn_vbWW)(BOOL, CWnd*, CWnd*);
  404. void    (AFX_MSG_CALL CWnd::*pfn_vD)(CDC*);
  405. void    (AFX_MSG_CALL CWnd::*pfn_vM)(CMenu*);
  406. void    (AFX_MSG_CALL CWnd::*pfn_vMwb)(CMenu*, UINT, BOOL);
  407. void    (AFX_MSG_CALL CWnd::*pfn_vW)(CWnd*);
  408. void    (AFX_MSG_CALL CWnd::*pfn_vWww)(CWnd*, UINT, UINT);
  409. void    (AFX_MSG_CALL CWnd::*pfn_vWp)(CWnd*, CPoint);
  410. void    (AFX_MSG_CALL CWnd::*pfn_vWh)(CWnd*, HANDLE);
  411. void    (AFX_MSG_CALL CWnd::*pfn_vwW)(UINT, CWnd*);
  412. void    (AFX_MSG_CALL CWnd::*pfn_vwWb)(UINT, CWnd*, BOOL);
  413. void    (AFX_MSG_CALL CWnd::*pfn_vwwW)(UINT, UINT, CWnd*);
  414. void    (AFX_MSG_CALL CWnd::*pfn_vwwx)(UINT, UINT);
  415. void    (AFX_MSG_CALL CWnd::*pfn_vs)(LPTSTR);
  416. void    (AFX_MSG_CALL CWnd::*pfn_vOWNER)(int, LPTSTR);   // force return TRUE
  417. int     (AFX_MSG_CALL CWnd::*pfn_iis)(int, LPTSTR);
  418. UINT    (AFX_MSG_CALL CWnd::*pfn_wp)(CPoint);
  419. UINT    (AFX_MSG_CALL CWnd::*pfn_wv)(void);
  420. void    (AFX_MSG_CALL CWnd::*pfn_vPOS)(WINDOWPOS*);
  421. void    (AFX_MSG_CALL CWnd::*pfn_vCALC)(BOOL, NCCALCSIZE_PARAMS*);
  422. void    (AFX_MSG_CALL CWnd::*pfn_vwp)(UINT, CPoint);
  423. void    (AFX_MSG_CALL CWnd::*pfn_vwwh)(UINT, UINT, HANDLE);
  424. BOOL    (AFX_MSG_CALL CWnd::*pfn_bwsp)(UINT, short, CPoint);
  425. void    (AFX_MSG_CALL CWnd::*pfn_vws)(UINT, LPCTSTR);
  426. };
  427. CHandleMap* PASCAL afxMapHWND(BOOL bCreate = FALSE);
  428. CHandleMap* PASCAL afxMapHIMAGELIST(BOOL bCreate = FALSE);
  429. CHandleMap* PASCAL afxMapHDC(BOOL bCreate = FALSE);
  430. CHandleMap* PASCAL afxMapHGDIOBJ(BOOL bCreate = FALSE);
  431. CHandleMap* PASCAL afxMapHMENU(BOOL bCreate = FALSE);
  432. /////////////////////////////////////////////////////////////////////////////
  433. // Debugging/Tracing helpers
  434. #ifdef _DEBUG
  435. void AFXAPI _AfxTraceMsg(LPCTSTR lpszPrefix, const MSG* pMsg);
  436. BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource,
  437. BOOL bInvisibleChild);
  438. #endif
  439. /////////////////////////////////////////////////////////////////////////////
  440. // byte-swapping helpers
  441. #ifdef _AFX_BYTESWAP
  442. struct _AFXWORD
  443. {
  444. BYTE WordBits[sizeof(WORD)];
  445. };
  446. struct _AFXDWORD
  447. {
  448. BYTE DwordBits[sizeof(DWORD)];
  449. };
  450. struct _AFXFLOAT
  451. {
  452. BYTE FloatBits[sizeof(float)];
  453. };
  454. struct _AFXDOUBLE
  455. {
  456. BYTE DoubleBits[sizeof(double)];
  457. };
  458. inline void _AfxByteSwap(WORD w, BYTE* pb)
  459. {
  460. _AFXWORD wAfx;
  461. *(WORD*)&wAfx = w;
  462. ASSERT(sizeof(WORD) == 2);
  463. *pb++ = wAfx.WordBits[1];
  464. *pb = wAfx.WordBits[0];
  465. }
  466. inline void _AfxByteSwap(DWORD dw, BYTE* pb)
  467. {
  468. _AFXDWORD dwAfx;
  469. *(DWORD*)&dwAfx = dw;
  470. ASSERT(sizeof(DWORD) == 4);
  471. *pb++ = dwAfx.DwordBits[3];
  472. *pb++ = dwAfx.DwordBits[2];
  473. *pb++ = dwAfx.DwordBits[1];
  474. *pb = dwAfx.DwordBits[0];
  475. }
  476. inline void _AfxByteSwap(float f, BYTE* pb)
  477. {
  478. _AFXFLOAT fAfx;
  479. *(float*)&fAfx = f;
  480. ASSERT(sizeof(float) == 4);
  481. *pb++ = fAfx.FloatBits[3];
  482. *pb++ = fAfx.FloatBits[2];
  483. *pb++ = fAfx.FloatBits[1];
  484. *pb = fAfx.FloatBits[0];
  485. }
  486. inline void _AfxByteSwap(double d, BYTE* pb)
  487. {
  488. _AFXDOUBLE dAfx;
  489. *(double*)&dAfx = d;
  490. ASSERT(sizeof(double) == 8);
  491. *pb++ = dAfx.DoubleBits[7];
  492. *pb++ = dAfx.DoubleBits[6];
  493. *pb++ = dAfx.DoubleBits[5];
  494. *pb++ = dAfx.DoubleBits[4];
  495. *pb++ = dAfx.DoubleBits[3];
  496. *pb++ = dAfx.DoubleBits[2];
  497. *pb++ = dAfx.DoubleBits[1];
  498. *pb = dAfx.DoubleBits[0];
  499. }
  500. #endif //_AFX_BYTESWAP
  501. #undef AFX_DATA
  502. #define AFX_DATA
  503. /////////////////////////////////////////////////////////////////////////////