home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / afximpl.h < prev    next >
C/C++ Source or Header  |  1998-06-16  |  19KB  |  622 lines

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