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 >
Wrap
C/C++ Source or Header
|
1998-06-16
|
19KB
|
622 lines
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
/////////////////////////////////////////////////////////////////////////////
// Auxiliary System/Screen metrics
struct AUX_DATA
{
// system metrics
int cxVScroll, cyHScroll;
int cxIcon, cyIcon;
int cxBorder2, cyBorder2;
// device metrics for screen
int cxPixelsPerInch, cyPixelsPerInch;
// convenient system color
HBRUSH hbrWindowFrame;
HBRUSH hbrBtnFace;
// color values of system colors used for CToolBar
COLORREF clrBtnFace, clrBtnShadow, clrBtnHilite;
COLORREF clrBtnText, clrWindowFrame;
// standard cursors
HCURSOR hcurWait;
HCURSOR hcurArrow;
HCURSOR hcurHelp; // cursor used in Shift+F1 help
// special GDI objects allocated on demand
HFONT hStatusFont;
HFONT hToolTipsFont;
HBITMAP hbmMenuDot;
// other system information
UINT nWinVer; // Major.Minor version numbers
BOOL bWin95; // TRUE if Windows 95 (not NT)
BOOL bWin4; // TRUE if Windows 4.0
BOOL bNotWin4; // TRUE if not Windows 4.0
BOOL bSmCaption; // TRUE if WS_EX_SMCAPTION is supported
BOOL bMarked4; // TRUE if marked as 4.0
// Implementation
AUX_DATA();
~AUX_DATA();
void UpdateSysColors();
void UpdateSysMetrics();
};
extern AFX_DATA AUX_DATA afxData;
/////////////////////////////////////////////////////////////////////////////
// _AFX_CTL3D_STATE
#ifndef _AFX_NO_CTL3D_SUPPORT
#undef AFX_DATA
#define AFX_DATA
class _AFX_CTL3D_STATE : public CNoTrackObject
{
public:
virtual ~_AFX_CTL3D_STATE();
// setup during initialization
BOOL m_bCtl3dInited;
HINSTANCE m_hCtl3dLib;
// CTL3D32 entry points
BOOL (WINAPI* m_pfnRegister)(HINSTANCE);
BOOL (WINAPI* m_pfnUnregister)(HINSTANCE);
BOOL (WINAPI* m_pfnAutoSubclass)(HINSTANCE);
BOOL (WINAPI* m_pfnUnAutoSubclass)();
BOOL (WINAPI* m_pfnColorChange)();
BOOL (WINAPI* m_pfnSubclassDlgEx)(HWND, DWORD);
void (WINAPI* m_pfnWinIniChange)();
BOOL (WINAPI* m_pfnSubclassCtl)(HWND);
BOOL (WINAPI* m_pfnSubclassCtlEx)(HWND, int);
};
EXTERN_PROCESS_LOCAL(_AFX_CTL3D_STATE, _afxCtl3dState)
class _AFX_CTL3D_THREAD : public CNoTrackObject
{
public:
virtual ~_AFX_CTL3D_THREAD();
};
EXTERN_THREAD_LOCAL(_AFX_CTL3D_THREAD, _afxCtl3dThread)
_AFX_CTL3D_STATE* AFXAPI AfxGetCtl3dState();
#endif //!_AFX_NO_CTL3D_SUPPORT
/////////////////////////////////////////////////////////////////////////////
// _AFX_EDIT_STATE
class _AFX_EDIT_STATE : public CNoTrackObject
{
public:
_AFX_EDIT_STATE();
virtual ~_AFX_EDIT_STATE();
CFindReplaceDialog* pFindReplaceDlg; // find or replace dialog
BOOL bFindOnly; // Is pFindReplace the find or replace?
CString strFind; // last find string
CString strReplace; // last replace string
BOOL bCase; // TRUE==case sensitive, FALSE==not
int bNext; // TRUE==search down, FALSE== search up
BOOL bWord; // TRUE==match whole word, FALSE==not
};
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
class _AFX_RICHEDIT_STATE : public _AFX_EDIT_STATE
{
public:
HINSTANCE m_hInstRichEdit; // handle to RICHED32.DLL
virtual ~_AFX_RICHEDIT_STATE();
};
EXTERN_PROCESS_LOCAL(_AFX_RICHEDIT_STATE, _afxRichEditState)
_AFX_RICHEDIT_STATE* AFX_CDECL AfxGetRichEditState();
#undef AFX_DATA
#define AFX_DATA
////////////////////////////////////////////////////////////////////////////
// other global state
class CPushRoutingFrame
{
protected:
CFrameWnd* pOldRoutingFrame;
_AFX_THREAD_STATE* pThreadState;
public:
CPushRoutingFrame(CFrameWnd* pNewRoutingFrame)
{
pThreadState = AfxGetThreadState();
pOldRoutingFrame = pThreadState->m_pRoutingFrame;
pThreadState->m_pRoutingFrame = pNewRoutingFrame;
}
~CPushRoutingFrame()
{ pThreadState->m_pRoutingFrame = pOldRoutingFrame; }
};
class CPushRoutingView
{
protected:
CView* pOldRoutingView;
_AFX_THREAD_STATE* pThreadState;
public:
CPushRoutingView(CView* pNewRoutingView)
{
pThreadState = AfxGetThreadState();
pOldRoutingView = pThreadState->m_pRoutingView;
pThreadState->m_pRoutingView = pNewRoutingView;
}
~CPushRoutingView()
{ pThreadState->m_pRoutingView = pOldRoutingView; }
};
// Note: afxData.cxBorder and afxData.cyBorder aren't used anymore
#define CX_BORDER 1
#define CY_BORDER 1
// states for Shift+F1 hep mode
#define HELP_INACTIVE 0 // not in Shift+F1 help mode (must be 0)
#define HELP_ACTIVE 1 // in Shift+F1 help mode (non-zero)
#define HELP_ENTERING 2 // entering Shift+F1 help mode (non-zero)
/////////////////////////////////////////////////////////////////////////////
// Window class names and other window creation support
// from wincore.cpp
extern const TCHAR _afxWnd[]; // simple child windows/controls
extern const TCHAR _afxWndControlBar[]; // controls with gray backgrounds
extern const TCHAR _afxWndMDIFrame[];
extern const TCHAR _afxWndFrameOrView[];
extern const TCHAR _afxWndOleControl[];
#define AFX_WND_REG 0x00001
#define AFX_WNDCONTROLBAR_REG 0x00002
#define AFX_WNDMDIFRAME_REG 0x00004
#define AFX_WNDFRAMEORVIEW_REG 0x00008
#define AFX_WNDCOMMCTLS_REG 0x00010 // means all original Win95
#define AFX_WNDOLECONTROL_REG 0x00020
#define AFX_WNDCOMMCTL_UPDOWN_REG 0x00040 // these are original Win95
#define AFX_WNDCOMMCTL_TREEVIEW_REG 0x00080
#define AFX_WNDCOMMCTL_TAB_REG 0x00100
#define AFX_WNDCOMMCTL_PROGRESS_REG 0x00200
#define AFX_WNDCOMMCTL_LISTVIEW_REG 0x00400
#define AFX_WNDCOMMCTL_HOTKEY_REG 0x00800
#define AFX_WNDCOMMCTL_BAR_REG 0x01000
#define AFX_WNDCOMMCTL_ANIMATE_REG 0x02000
#define AFX_WNDCOMMCTL_INTERNET_REG 0x04000 // these are new in IE4
#define AFX_WNDCOMMCTL_COOL_REG 0x08000
#define AFX_WNDCOMMCTL_USEREX_REG 0x10000
#define AFX_WNDCOMMCTL_DATE_REG 0x20000
#define AFX_WIN95CTLS_MASK 0x03FC0 // UPDOWN -> ANIMATE
#define AFX_WNDCOMMCTLSALL_REG 0x3C010 // COMMCTLS|INTERNET|COOL|USEREX|DATE
#define AFX_WNDCOMMCTLSNEW_REG 0x3C000 // INTERNET|COOL|USEREX|DATE
#define AfxDeferRegisterClass(fClass) AfxEndDeferRegisterClass(fClass)
BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister);
// MFC has its own version of the TOOLINFO structure containing the
// the Win95 base version of the structure. Since MFC targets Win95 base,
// we need this structure so calls into that old library don't fail.
typedef struct tagAFX_OLDTOOLINFO {
UINT cbSize;
UINT uFlags;
HWND hwnd;
UINT uId;
RECT rect;
HINSTANCE hinst;
LPTSTR lpszText;
} AFX_OLDTOOLINFO;
// special AFX window class name mangling
#ifndef _UNICODE
#define _UNICODE_SUFFIX
#else
#define _UNICODE_SUFFIX _T("u")
#endif
#ifndef _DEBUG
#define _DEBUG_SUFFIX
#else
#define _DEBUG_SUFFIX _T("d")
#endif
#ifdef _AFXDLL
#define _STATIC_SUFFIX
#else
#define _STATIC_SUFFIX _T("s")
#endif
#define AFX_WNDCLASS(s) \
_T("Afx") _T(s) _T("42") _STATIC_SUFFIX _UNICODE_SUFFIX _DEBUG_SUFFIX
#define AFX_WND AFX_WNDCLASS("Wnd")
#define AFX_WNDCONTROLBAR AFX_WNDCLASS("ControlBar")
#define AFX_WNDMDIFRAME AFX_WNDCLASS("MDIFrame")
#define AFX_WNDFRAMEORVIEW AFX_WNDCLASS("FrameOrView")
#define AFX_WNDOLECONTROL AFX_WNDCLASS("OleControl")
// dialog/commdlg hook procs
BOOL CALLBACK AfxDlgProc(HWND, UINT, WPARAM, LPARAM);
UINT CALLBACK _AfxCommDlgProc(HWND hWnd, UINT, WPARAM, LPARAM);
// support for standard dialogs
extern UINT _afxMsgSETRGB;
typedef UINT (CALLBACK* COMMDLGPROC)(HWND, UINT, UINT, LONG);
/////////////////////////////////////////////////////////////////////////////
// Extended dialog templates (new in Win95)
#pragma pack(push, 1)
typedef struct
{
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
} DLGTEMPLATEEX;
typedef struct
{
DWORD helpID;
DWORD exStyle;
DWORD style;
short x;
short y;
short cx;
short cy;
DWORD id;
} DLGITEMTEMPLATEEX;
#pragma pack(pop)
/////////////////////////////////////////////////////////////////////////////
// Special helpers
void AFXAPI AfxCancelModes(HWND hWndRcvr);
HWND AFXAPI AfxGetParentOwner(HWND hWnd);
BOOL AFXAPI AfxIsDescendant(HWND hWndParent, HWND hWndChild);
BOOL AFXAPI AfxHelpEnabled(); // determine if ID_HELP handler exists
void AFXAPI AfxDeleteObject(HGDIOBJ* pObject);
BOOL AFXAPI AfxCustomLogFont(UINT nIDS, LOGFONT* pLogFont);
BOOL AFXAPI AfxGetPropSheetFont(CString& strFace, WORD& wSize, BOOL bWizard);
BOOL AFXAPI _AfxIsComboBoxControl(HWND hWnd, UINT nStyle);
BOOL AFXAPI _AfxCheckCenterDialog(LPCTSTR lpszResource);
BOOL AFXAPI _AfxCompareClassName(HWND hWnd, LPCTSTR lpszClassName);
HWND AFXAPI _AfxChildWindowFromPoint(HWND, POINT);
// for determining version of COMCTL32.DLL
#define VERSION_WIN4 MAKELONG(0, 4)
#define VERSION_IE3 MAKELONG(70, 4)
#define VERSION_IE4 MAKELONG(71, 4)
#define VERSION_IE401 MAKELONG(72, 4)
extern int _afxComCtlVersion;
DWORD AFXAPI _AfxGetComCtlVersion();
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
// UNICODE/MBCS abstractions
#ifdef _MBCS
extern AFX_DATA const BOOL _afxDBCS;
#else
#define _afxDBCS FALSE
#endif
#undef AFX_DATA
#define AFX_DATA
// determine number of elements in an array (not bytes)
#define _countof(array) (sizeof(array)/sizeof(array[0]))
#ifndef _AFX_PORTABLE
int AFX_CDECL AfxCriticalNewHandler(size_t nSize);
#endif
void AFXAPI AfxGlobalFree(HGLOBAL hGlobal);
/////////////////////////////////////////////////////////////////////////////
// static exceptions
extern CNotSupportedException _simpleNotSupportedException;
extern CMemoryException _simpleMemoryException;
extern CUserException _simpleUserException;
extern CResourceException _simpleResourceException;
/////////////////////////////////////////////////////////////////////////////
// useful message ranges
#define WM_SYSKEYFIRST WM_SYSKEYDOWN
#define WM_SYSKEYLAST WM_SYSDEADCHAR
#define WM_NCMOUSEFIRST WM_NCMOUSEMOVE
#define WM_NCMOUSELAST WM_NCMBUTTONDBLCLK
/////////////////////////////////////////////////////////////////////////////
// AFX_CRITICAL_SECTION
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
// these globals are protected by the same critical section
#define CRIT_DYNLINKLIST 0
#define CRIT_RUNTIMECLASSLIST 0
#define CRIT_OBJECTFACTORYLIST 0
#define CRIT_LOCKSHARED 0
// these globals are not protected by independent critical sections
#define CRIT_REGCLASSLIST 1
#define CRIT_WAITCURSOR 2
#define CRIT_DROPSOURCE 3
#define CRIT_DROPTARGET 4
#define CRIT_RECTTRACKER 5
#define CRIT_EDITVIEW 6
#define CRIT_WINMSGCACHE 7
#define CRIT_HALFTONEBRUSH 8
#define CRIT_SPLITTERWND 9
#define CRIT_MINIFRAMEWND 10
#define CRIT_CTLLOCKLIST 11
#define CRIT_DYNDLLLOAD 12
#define CRIT_TYPELIBCACHE 13
#define CRIT_STOCKMASK 14
#define CRIT_ODBC 15
#define CRIT_PROCESSLOCAL 16
#define CRIT_MAX 17 // Note: above plus one!
#ifdef _MT
void AFXAPI AfxLockGlobals(int nLockType);
void AFXAPI AfxUnlockGlobals(int nLockType);
BOOL AFXAPI AfxCriticalInit();
void AFXAPI AfxCriticalTerm();
#else
#define AfxLockGlobals(nLockType)
#define AfxUnlockGlobals(nLockType)
#define AfxCriticalInit() (TRUE)
#define AfxCriticalTerm()
#endif
/////////////////////////////////////////////////////////////////////////////
// Portability abstractions
#define _AfxSetDlgCtrlID(hWnd, nID) SetWindowLong(hWnd, GWL_ID, nID)
#define _AfxGetDlgCtrlID(hWnd) ((UINT)(WORD)::GetDlgCtrlID(hWnd))
// misc helpers
BOOL AFXAPI AfxFullPath(LPTSTR lpszPathOut, LPCTSTR lpszFileIn);
BOOL AFXAPI AfxComparePath(LPCTSTR lpszPath1, LPCTSTR lpszPath2);
UINT AFXAPI AfxGetFileTitle(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);
UINT AFXAPI AfxGetFileName(LPCTSTR lpszPathName, LPTSTR lpszTitle, UINT nMax);
void AFX_CDECL AfxTimeToFileTime(const CTime& time, LPFILETIME pFileTime);
void AFXAPI AfxGetRoot(LPCTSTR lpszPath, CString& strRoot);
#ifndef _AFX_NO_OLE_SUPPORT
class AFX_COM
{
public:
HRESULT CreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
REFIID riid, LPVOID* ppv);
HRESULT GetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
};
CString AFXAPI AfxStringFromCLSID(REFCLSID rclsid);
BOOL AFXAPI AfxGetInProcServer(LPCTSTR lpszCLSID, CString& str);
BOOL AFXAPI AfxResolveShortcut(CWnd* pWnd, LPCTSTR pszShortcutFile,
LPTSTR pszPath, int cchPath);
#endif // _AFX_NO_OLE_SUPPORT
#define NULL_TLS ((DWORD)-1)
/////////////////////////////////////////////////////////////////////////////
// Message map and message dispatch
const AFX_MSGMAP_ENTRY* AFXAPI
AfxFindMessageEntry(const AFX_MSGMAP_ENTRY* lpEntry,
UINT nMsg, UINT nCode, UINT nID);
union MessageMapFunctions
{
AFX_PMSG pfn; // generic member function pointer
// specific type safe variants for WM_COMMAND and WM_NOTIFY messages
void (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND)();
BOOL (AFX_MSG_CALL CCmdTarget::*pfn_bCOMMAND)();
void (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND_RANGE)(UINT);
BOOL (AFX_MSG_CALL CCmdTarget::*pfn_COMMAND_EX)(UINT);
void (AFX_MSG_CALL CCmdTarget::*pfn_UPDATE_COMMAND_UI)(CCmdUI*);
void (AFX_MSG_CALL CCmdTarget::*pfn_UPDATE_COMMAND_UI_RANGE)(CCmdUI*, UINT);
void (AFX_MSG_CALL CCmdTarget::*pfn_OTHER)(void*);
BOOL (AFX_MSG_CALL CCmdTarget::*pfn_OTHER_EX)(void*);
void (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY)(NMHDR*, LRESULT*);
BOOL (AFX_MSG_CALL CCmdTarget::*pfn_bNOTIFY)(NMHDR*, LRESULT*);
void (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY_RANGE)(UINT, NMHDR*, LRESULT*);
BOOL (AFX_MSG_CALL CCmdTarget::*pfn_NOTIFY_EX)(UINT, NMHDR*, LRESULT*);
// type safe variant for thread messages
void (AFX_MSG_CALL CWinThread::*pfn_THREAD)(WPARAM, LPARAM);
// specific type safe variants for WM-style messages
BOOL (AFX_MSG_CALL CWnd::*pfn_bD)(CDC*);
BOOL (AFX_MSG_CALL CWnd::*pfn_bb)(BOOL);
BOOL (AFX_MSG_CALL CWnd::*pfn_bWww)(CWnd*, UINT, UINT);
BOOL (AFX_MSG_CALL CWnd::*pfn_bHELPINFO)(HELPINFO*);
BOOL (AFX_MSG_CALL CWnd::*pfn_bWCDS)(CWnd*, COPYDATASTRUCT*);
HBRUSH (AFX_MSG_CALL CWnd::*pfn_hDWw)(CDC*, CWnd*, UINT);
HBRUSH (AFX_MSG_CALL CWnd::*pfn_hDw)(CDC*, UINT);
int (AFX_MSG_CALL CWnd::*pfn_iwWw)(UINT, CWnd*, UINT);
int (AFX_MSG_CALL CWnd::*pfn_iww)(UINT, UINT);
int (AFX_MSG_CALL CWnd::*pfn_iWww)(CWnd*, UINT, UINT);
int (AFX_MSG_CALL CWnd::*pfn_is)(LPTSTR);
LRESULT (AFX_MSG_CALL CWnd::*pfn_lwl)(WPARAM, LPARAM);
LRESULT (AFX_MSG_CALL CWnd::*pfn_lwwM)(UINT, UINT, CMenu*);
void (AFX_MSG_CALL CWnd::*pfn_vv)(void);
void (AFX_MSG_CALL CWnd::*pfn_vw)(UINT);
void (AFX_MSG_CALL CWnd::*pfn_vww)(UINT, UINT);
void (AFX_MSG_CALL CWnd::*pfn_vvii)(int, int);
void (AFX_MSG_CALL CWnd::*pfn_vwww)(UINT, UINT, UINT);
void (AFX_MSG_CALL CWnd::*pfn_vwii)(UINT, int, int);
void (AFX_MSG_CALL CWnd::*pfn_vwl)(WPARAM, LPARAM);
void (AFX_MSG_CALL CWnd::*pfn_vbWW)(BOOL, CWnd*, CWnd*);
void (AFX_MSG_CALL CWnd::*pfn_vD)(CDC*);
void (AFX_MSG_CALL CWnd::*pfn_vM)(CMenu*);
void (AFX_MSG_CALL CWnd::*pfn_vMwb)(CMenu*, UINT, BOOL);
void (AFX_MSG_CALL CWnd::*pfn_vW)(CWnd*);
void (AFX_MSG_CALL CWnd::*pfn_vWww)(CWnd*, UINT, UINT);
void (AFX_MSG_CALL CWnd::*pfn_vWp)(CWnd*, CPoint);
void (AFX_MSG_CALL CWnd::*pfn_vWh)(CWnd*, HANDLE);
void (AFX_MSG_CALL CWnd::*pfn_vwW)(UINT, CWnd*);
void (AFX_MSG_CALL CWnd::*pfn_vwWb)(UINT, CWnd*, BOOL);
void (AFX_MSG_CALL CWnd::*pfn_vwwW)(UINT, UINT, CWnd*);
void (AFX_MSG_CALL CWnd::*pfn_vwwx)(UINT, UINT);
void (AFX_MSG_CALL CWnd::*pfn_vs)(LPTSTR);
void (AFX_MSG_CALL CWnd::*pfn_vOWNER)(int, LPTSTR); // force return TRUE
int (AFX_MSG_CALL CWnd::*pfn_iis)(int, LPTSTR);
UINT (AFX_MSG_CALL CWnd::*pfn_wp)(CPoint);
UINT (AFX_MSG_CALL CWnd::*pfn_wv)(void);
void (AFX_MSG_CALL CWnd::*pfn_vPOS)(WINDOWPOS*);
void (AFX_MSG_CALL CWnd::*pfn_vCALC)(BOOL, NCCALCSIZE_PARAMS*);
void (AFX_MSG_CALL CWnd::*pfn_vwp)(UINT, CPoint);
void (AFX_MSG_CALL CWnd::*pfn_vwwh)(UINT, UINT, HANDLE);
BOOL (AFX_MSG_CALL CWnd::*pfn_bwsp)(UINT, short, CPoint);
void (AFX_MSG_CALL CWnd::*pfn_vws)(UINT, LPCTSTR);
};
CHandleMap* PASCAL afxMapHWND(BOOL bCreate = FALSE);
CHandleMap* PASCAL afxMapHIMAGELIST(BOOL bCreate = FALSE);
CHandleMap* PASCAL afxMapHDC(BOOL bCreate = FALSE);
CHandleMap* PASCAL afxMapHGDIOBJ(BOOL bCreate = FALSE);
CHandleMap* PASCAL afxMapHMENU(BOOL bCreate = FALSE);
/////////////////////////////////////////////////////////////////////////////
// Debugging/Tracing helpers
#ifdef _DEBUG
void AFXAPI _AfxTraceMsg(LPCTSTR lpszPrefix, const MSG* pMsg);
BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource,
BOOL bInvisibleChild);
#endif
/////////////////////////////////////////////////////////////////////////////
// byte-swapping helpers
#ifdef _AFX_BYTESWAP
struct _AFXWORD
{
BYTE WordBits[sizeof(WORD)];
};
struct _AFXDWORD
{
BYTE DwordBits[sizeof(DWORD)];
};
struct _AFXFLOAT
{
BYTE FloatBits[sizeof(float)];
};
struct _AFXDOUBLE
{
BYTE DoubleBits[sizeof(double)];
};
inline void _AfxByteSwap(WORD w, BYTE* pb)
{
_AFXWORD wAfx;
*(WORD*)&wAfx = w;
ASSERT(sizeof(WORD) == 2);
*pb++ = wAfx.WordBits[1];
*pb = wAfx.WordBits[0];
}
inline void _AfxByteSwap(DWORD dw, BYTE* pb)
{
_AFXDWORD dwAfx;
*(DWORD*)&dwAfx = dw;
ASSERT(sizeof(DWORD) == 4);
*pb++ = dwAfx.DwordBits[3];
*pb++ = dwAfx.DwordBits[2];
*pb++ = dwAfx.DwordBits[1];
*pb = dwAfx.DwordBits[0];
}
inline void _AfxByteSwap(float f, BYTE* pb)
{
_AFXFLOAT fAfx;
*(float*)&fAfx = f;
ASSERT(sizeof(float) == 4);
*pb++ = fAfx.FloatBits[3];
*pb++ = fAfx.FloatBits[2];
*pb++ = fAfx.FloatBits[1];
*pb = fAfx.FloatBits[0];
}
inline void _AfxByteSwap(double d, BYTE* pb)
{
_AFXDOUBLE dAfx;
*(double*)&dAfx = d;
ASSERT(sizeof(double) == 8);
*pb++ = dAfx.DoubleBits[7];
*pb++ = dAfx.DoubleBits[6];
*pb++ = dAfx.DoubleBits[5];
*pb++ = dAfx.DoubleBits[4];
*pb++ = dAfx.DoubleBits[3];
*pb++ = dAfx.DoubleBits[2];
*pb++ = dAfx.DoubleBits[1];
*pb = dAfx.DoubleBits[0];
}
#endif //_AFX_BYTESWAP
#undef AFX_DATA
#define AFX_DATA
/////////////////////////////////////////////////////////////////////////////