Annotation of parser3/src/sql/odbc/MFCpatches/AFXIMPL.H, revision 1.1

1.1     ! parser      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: /////////////////////////////////////////////////////////////////////////////

E-mail: