| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993 |
- // 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.
- #ifndef __AFX_H__
- #define __AFX_H__
- #ifndef __cplusplus
- #error MFC requires C++ compilation (use a .cpp suffix)
- #endif
- /////////////////////////////////////////////////////////////////////////////
- #ifdef _AFX_MINREBUILD
- #pragma component(minrebuild, off)
- #endif
- #ifndef _AFX_FULLTYPEINFO
- #pragma component(mintypeinfo, on)
- #endif
- #include <afxver_.h> // Target version control
- #ifndef _AFX_NOFORCE_LIBS
- /////////////////////////////////////////////////////////////////////////////
- // Win32 libraries
- #ifndef __BORLANDC__
- #ifndef _AFXDLL
- #ifndef _UNICODE
- #ifdef MFC_DEBUG
- #pragma comment(lib, "nafxcwd.lib")
- #else
- #pragma comment(lib, "nafxcw.lib")
- #endif
- #else
- #ifdef MFC_DEBUG
- #pragma comment(lib, "uafxcwd.lib")
- #else
- #pragma comment(lib, "uafxcw.lib")
- #endif
- #endif
- #else
- #ifndef _UNICODE
- #ifdef MFC_DEBUG
- #pragma comment(lib, "mfc42d.lib")
- #pragma comment(lib, "mfcs42d.lib")
- #else
- #pragma comment(lib, "mfc42.lib")
- #pragma comment(lib, "mfcs42.lib")
- #endif
- #else
- #ifdef MFC_DEBUG
- #pragma comment(lib, "mfc42ud.lib")
- #pragma comment(lib, "mfcs42ud.lib")
- #else
- #pragma comment(lib, "mfc42u.lib")
- #pragma comment(lib, "mfcs42u.lib")
- #endif
- #endif
- #endif
- #ifdef _DLL
- #if !defined(_AFX_NO_DEBUG_CRT) && defined(MFC_DEBUG)
- #pragma comment(lib, "msvcrtd.lib")
- #else
- #pragma comment(lib, "msvcrt.lib")
- #endif
- #else
- #ifdef _MT
- #if !defined(_AFX_NO_DEBUG_CRT) && defined(MFC_DEBUG)
- #pragma comment(lib, "libcmtd.lib")
- #else
- #pragma comment(lib, "libcmt.lib")
- #endif
- #else
- #if !defined(_AFX_NO_DEBUG_CRT) && defined(MFC_DEBUG)
- #pragma comment(lib, "libcd.lib")
- #else
- #pragma comment(lib, "libc.lib")
- #endif
- #endif
- #endif
- #pragma comment(lib, "kernel32.lib")
- #pragma comment(lib, "user32.lib")
- #pragma comment(lib, "gdi32.lib")
- #pragma comment(lib, "comdlg32.lib")
- #pragma comment(lib, "winspool.lib")
- #pragma comment(lib, "advapi32.lib")
- #pragma comment(lib, "shell32.lib")
- #pragma comment(lib, "comctl32.lib")
- // force inclusion of NOLIB.OBJ for /disallowlib directives
- #pragma comment(linker, "/include:__afxForceEXCLUDE")
- // force inclusion of DLLMODUL.OBJ for _USRDLL
- #ifdef _USRDLL
- #pragma comment(linker, "/include:__afxForceUSRDLL")
- #endif
- // force inclusion of STDAFX.OBJ for precompiled types
- #ifdef _AFXDLL
- #pragma comment(linker, "/include:__afxForceSTDAFX")
- #endif
- #endif // !__BORLANDC__
- #endif //!_AFX_NOFORCE_LIBS
- /////////////////////////////////////////////////////////////////////////////
- // Classes declared in this file
- // in addition to standard primitive data types and various helper macros
- struct CRuntimeClass; // object type information
- class CObject; // the root of all objects classes
- class CException; // the root of all exceptions
- class CArchiveException; // archive exception
- class CFileException; // file exception
- class CSimpleException;
- class CMemoryException; // out-of-memory exception
- class CNotSupportedException; // feature not supported exception
- class CFile; // raw binary file
- class CStdioFile; // buffered stdio text/binary file
- class CMemFile; // memory based file
- // Non CObject classes
- class CString; // growable string type
- class CTimeSpan; // time/date difference
- class CTime; // absolute time/date
- struct CFileStatus; // file status information
- struct CMemoryState; // diagnostic memory support
- class CArchive; // object persistence tool
- class CDumpContext; // object diagnostic dumping
- /////////////////////////////////////////////////////////////////////////////
- // Other includes from standard "C" runtimes
- #ifndef _INC_STRING
- #include <string.h>
- #endif
- #ifndef _INC_STDIO
- #include <stdio.h>
- #endif
- #ifndef _INC_STDLIB
- #include <stdlib.h>
- #endif
- #ifndef _INC_TIME
- #include <time.h>
- #endif
- #ifndef _INC_LIMITS
- #include <limits.h>
- #endif
- #ifndef _INC_STDDEF
- #include <stddef.h>
- #endif
- #ifndef _INC_STDARG
- #include <stdarg.h>
- #endif
- #ifndef _AFX_NO_DEBUG_CRT
- #ifndef _INC_CRTDBG
- #include <crtdbg.h>
- #endif
- #endif // _AFX_NO_DEBUG_CRT
- #ifdef _AFX_OLD_EXCEPTIONS
- // use setjmp and helper functions instead of C++ keywords
- #ifndef _INC_SETJMP
- #pragma warning(disable: 4611)
- #include <setjmp.h>
- #endif
- #endif
- #ifdef _AFX_PACKING
- #pragma pack(push, _AFX_PACKING)
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // Basic types
- // abstract iteration position
- struct __POSITION { };
- typedef __POSITION* POSITION;
- struct _AFX_DOUBLE { BYTE doubleBits[sizeof(double)]; };
- struct _AFX_FLOAT { BYTE floatBits[sizeof(float)]; };
- // Standard constants
- #undef FALSE
- #undef TRUE
- #undef NULL
- #define FALSE 0
- #define TRUE 1
- #define NULL 0
- /////////////////////////////////////////////////////////////////////////////
- // Diagnostic support
- #ifdef MFC_DEBUG
- BOOL AFXAPI AfxAssertFailedLine(LPCSTR lpszFileName, int nLine);
- void AFX_CDECL AfxTrace(LPCTSTR lpszFormat, ...);
- // Note: file names are still ANSI strings (filenames rarely need UNICODE)
- void AFXAPI AfxAssertValidObject(const CObject* pOb,
- LPCSTR lpszFileName, int nLine);
- void AFXAPI AfxDump(const CObject* pOb); // Dump an object from CodeView
- #define TRACE ::AfxTrace
- #define THIS_FILE __FILE__
- #define ASSERT(f) \
- do \
- { \
- if (!(f) && AfxAssertFailedLine(THIS_FILE, __LINE__)) \
- AfxDebugBreak(); \
- } while (0) \
- #define VERIFY(f) ASSERT(f)
- #define ASSERT_VALID(pOb) (::AfxAssertValidObject(pOb, THIS_FILE, __LINE__))
- #define DEBUG_ONLY(f) (f)
- // The following trace macros are provided for backward compatiblity
- // (they also take a fixed number of parameters which provides
- // some amount of extra error checking)
- #define TRACE0(sz) ::AfxTrace(_T("%s"), _T(sz))
- #define TRACE1(sz, p1) ::AfxTrace(_T(sz), p1)
- #define TRACE2(sz, p1, p2) ::AfxTrace(_T(sz), p1, p2)
- #define TRACE3(sz, p1, p2, p3) ::AfxTrace(_T(sz), p1, p2, p3)
- // These AFX_DUMP macros also provided for backward compatibility
- #define AFX_DUMP0(dc, sz) dc << _T(sz)
- #define AFX_DUMP1(dc, sz, p1) dc << _T(sz) << p1
- #else // MFC_DEBUG
- #define ASSERT(f) ((void)0)
- #define VERIFY(f) ((void)(f))
- #define ASSERT_VALID(pOb) ((void)0)
- #define DEBUG_ONLY(f) ((void)0)
- inline void AFX_CDECL AfxTrace(LPCTSTR, ...) { }
- #define TRACE 1 ? (void)0 : ::AfxTrace
- #define TRACE0(sz)
- #define TRACE1(sz, p1)
- #define TRACE2(sz, p1, p2)
- #define TRACE3(sz, p1, p2, p3)
- #endif // !MFC_DEBUG
- #define ASSERT_POINTER(p, type) \
- ASSERT(((p) != NULL) && AfxIsValidAddress((p), sizeof(type), FALSE))
- #define ASSERT_NULL_OR_POINTER(p, type) \
- ASSERT(((p) == NULL) || AfxIsValidAddress((p), sizeof(type), FALSE))
- /////////////////////////////////////////////////////////////////////////////
- // Turn off warnings for /W4
- // To resume any of these warning: #pragma warning(default: 4xxx)
- // which should be placed after the AFX include files
- #ifndef ALL_WARNINGS
- // warnings generated with common MFC/Windows code
- #pragma warning(disable: 4127) // constant expression for TRACE/ASSERT
- #pragma warning(disable: 4134) // message map member fxn casts
- #pragma warning(disable: 4201) // nameless unions are part of C++
- #pragma warning(disable: 4511) // private copy constructors are good to have
- #pragma warning(disable: 4512) // private operator= are good to have
- #pragma warning(disable: 4514) // unreferenced inlines are common
- #pragma warning(disable: 4710) // private constructors are disallowed
- #pragma warning(disable: 4705) // statement has no effect in optimized code
- #pragma warning(disable: 4191) // pointer-to-function casting
- // warnings caused by normal optimizations
- #ifndef MFC_DEBUG
- #pragma warning(disable: 4701) // local variable *may* be used without init
- #pragma warning(disable: 4702) // unreachable code caused by optimizations
- #pragma warning(disable: 4791) // loss of debugging info in release version
- #pragma warning(disable: 4189) // initialized but unused variable
- #pragma warning(disable: 4390) // empty controlled statement
- #endif
- // warnings specific to _AFXDLL version
- #ifdef _AFXDLL
- #pragma warning(disable: 4204) // non-constant aggregate initializer
- #endif
- #ifdef _AFXDLL
- #pragma warning(disable: 4275) // deriving exported class from non-exported
- #pragma warning(disable: 4251) // using non-exported as public in exported
- #endif
- #endif //!ALL_WARNINGS
- #ifdef MFC_DEBUG
- #define UNUSED(x)
- #else
- #define UNUSED(x) x
- #endif
- #define UNUSED_ALWAYS(x) x
- /////////////////////////////////////////////////////////////////////////////
- // Other implementation helpers
- #define BEFORE_START_POSITION ((POSITION)-1L)
- /////////////////////////////////////////////////////////////////////////////
- // explicit initialization for general purpose classes
- BOOL AFXAPI AfxInitialize(BOOL bDLL = FALSE, DWORD dwVersion = _MFC_VER);
- #undef AFX_DATA
- #define AFX_DATA AFX_CORE_DATA
- /////////////////////////////////////////////////////////////////////////////
- // Basic object model
- struct CRuntimeClass
- {
- // Attributes
- LPCSTR m_lpszClassName;
- int m_nObjectSize;
- UINT m_wSchema; // schema number of the loaded class
- CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
- #ifdef _AFXDLL
- CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
- #else
- CRuntimeClass* m_pBaseClass;
- #endif
- // Operations
- CObject* CreateObject();
- BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
- // Implementation
- void Store(CArchive& ar) const;
- static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);
- // CRuntimeClass objects linked together in simple list
- CRuntimeClass* m_pNextClass; // linked list of registered classes
- };
- /////////////////////////////////////////////////////////////////////////////
- // Strings
- #ifndef _OLEAUTO_H_
- #ifdef OLE2ANSI
- typedef LPSTR BSTR;
- #else
- typedef LPWSTR BSTR;// must (semantically) match typedef in oleauto.h
- #endif
- #endif
- struct CStringData
- {
- long nRefs; // reference count
- int nDataLength; // length of data (including terminator)
- int nAllocLength; // length of allocation
- // TCHAR data[nAllocLength]
- TCHAR* data() // TCHAR* to managed data
- { return (TCHAR*)(this+1); }
- };
- class CString
- {
- public:
- // Constructors
- // constructs empty CString
- CString();
- // copy constructor
- CString(const CString& stringSrc);
- // from a single character
- CString(TCHAR ch, int nRepeat = 1);
- // from an ANSI string (converts to TCHAR)
- CString(LPCSTR lpsz);
- // from a UNICODE string (converts to TCHAR)
- CString(LPCWSTR lpsz);
- // subset of characters from an ANSI string (converts to TCHAR)
- CString(LPCSTR lpch, int nLength);
- // subset of characters from a UNICODE string (converts to TCHAR)
- CString(LPCWSTR lpch, int nLength);
- // from unsigned characters
- CString(const unsigned char* psz);
- // Attributes & Operations
- // get data length
- int GetLength() const;
- // TRUE if zero length
- BOOL IsEmpty() const;
- // clear contents to empty
- void Empty();
- // return single character at zero-based index
- TCHAR GetAt(int nIndex) const;
- // return single character at zero-based index
- TCHAR operator[](int nIndex) const;
- // set a single character at zero-based index
- void SetAt(int nIndex, TCHAR ch);
- // return pointer to const string
- operator LPCTSTR() const;
- // overloaded assignment
- // ref-counted copy from another CString
- const CString& operator=(const CString& stringSrc);
- // set string content to single character
- const CString& operator=(TCHAR ch);
- #ifdef _UNICODE
- const CString& operator=(char ch);
- #endif
- // copy string content from ANSI string (converts to TCHAR)
- const CString& operator=(LPCSTR lpsz);
- // copy string content from UNICODE string (converts to TCHAR)
- const CString& operator=(LPCWSTR lpsz);
- // copy string content from unsigned chars
- const CString& operator=(const unsigned char* psz);
- // string concatenation
- // concatenate from another CString
- const CString& operator+=(const CString& string);
- // concatenate a single character
- const CString& operator+=(TCHAR ch);
- #ifdef _UNICODE
- // concatenate an ANSI character after converting it to TCHAR
- const CString& operator+=(char ch);
- #endif
- // concatenate a UNICODE character after converting it to TCHAR
- const CString& operator+=(LPCTSTR lpsz);
- friend CString AFXAPI operator+(const CString& string1,
- const CString& string2);
- friend CString AFXAPI operator+(const CString& string, TCHAR ch);
- friend CString AFXAPI operator+(TCHAR ch, const CString& string);
- #ifdef _UNICODE
- friend CString AFXAPI operator+(const CString& string, char ch);
- friend CString AFXAPI operator+(char ch, const CString& string);
- #endif
- friend CString AFXAPI operator+(const CString& string, LPCTSTR lpsz);
- friend CString AFXAPI operator+(LPCTSTR lpsz, const CString& string);
- // string comparison
- // straight character comparison
- int Compare(LPCTSTR lpsz) const;
- // compare ignoring case
- int CompareNoCase(LPCTSTR lpsz) const;
- // NLS aware comparison, case sensitive
- int Collate(LPCTSTR lpsz) const;
- // NLS aware comparison, case insensitive
- int CollateNoCase(LPCTSTR lpsz) const;
- // simple sub-string extraction
- // return nCount characters starting at zero-based nFirst
- CString Mid(int nFirst, int nCount) const;
- // return all characters starting at zero-based nFirst
- CString Mid(int nFirst) const;
- // return first nCount characters in string
- CString Left(int nCount) const;
- // return nCount characters from end of string
- CString Right(int nCount) const;
- // characters from beginning that are also in passed string
- CString SpanIncluding(LPCTSTR lpszCharSet) const;
- // characters from beginning that are not also in passed string
- CString SpanExcluding(LPCTSTR lpszCharSet) const;
- // upper/lower/reverse conversion
- // NLS aware conversion to uppercase
- void MakeUpper();
- // NLS aware conversion to lowercase
- void MakeLower();
- // reverse string right-to-left
- void MakeReverse();
- // trimming whitespace (either side)
- // remove whitespace starting from right edge
- void TrimRight();
- // remove whitespace starting from left side
- void TrimLeft();
- // trimming anything (either side)
- // remove continuous occurrences of chTarget starting from right
- void TrimRight(TCHAR chTarget);
- // remove continuous occcurrences of characters in passed string,
- // starting from right
- void TrimRight(LPCTSTR lpszTargets);
- // remove continuous occurrences of chTarget starting from left
- void TrimLeft(TCHAR chTarget);
- // remove continuous occcurrences of characters in
- // passed string, starting from left
- void TrimLeft(LPCTSTR lpszTargets);
- // advanced manipulation
- // replace occurrences of chOld with chNew
- int Replace(TCHAR chOld, TCHAR chNew);
- // replace occurrences of substring lpszOld with lpszNew;
- // empty lpszNew removes instances of lpszOld
- int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew);
- // remove occurrences of chRemove
- int Remove(TCHAR chRemove);
- // insert character at zero-based index; concatenates
- // if index is past end of string
- int Insert(int nIndex, TCHAR ch);
- // insert substring at zero-based index; concatenates
- // if index is past end of string
- int Insert(int nIndex, LPCTSTR pstr);
- // delete nCount characters starting at zero-based index
- int Delete(int nIndex, int nCount = 1);
- // searching
- // find character starting at left, -1 if not found
- int Find(TCHAR ch) const;
- // find character starting at right
- int ReverseFind(TCHAR ch) const;
- // find character starting at zero-based index and going right
- int Find(TCHAR ch, int nStart) const;
- // find first instance of any character in passed string
- int FindOneOf(LPCTSTR lpszCharSet) const;
- // find first instance of substring
- int Find(LPCTSTR lpszSub) const;
- // find first instance of substring starting at zero-based index
- int Find(LPCTSTR lpszSub, int nStart) const;
- // simple formatting
- // printf-like formatting using passed string
- void AFX_CDECL Format(LPCTSTR lpszFormat, ...);
- // printf-like formatting using referenced string resource
- void AFX_CDECL Format(UINT nFormatID, ...);
- // printf-like formatting using variable arguments parameter
- void FormatV(LPCTSTR lpszFormat, va_list argList);
- // formatting for localization (uses FormatMessage API)
- // format using FormatMessage API on passed string
- void AFX_CDECL FormatMessage(LPCTSTR lpszFormat, ...);
- // format using FormatMessage API on referenced string resource
- void AFX_CDECL FormatMessage(UINT nFormatID, ...);
- // input and output
- #ifdef MFC_DEBUG
- friend CDumpContext& AFXAPI operator<<(CDumpContext& dc,
- const CString& string);
- #endif
- friend CArchive& AFXAPI operator<<(CArchive& ar, const CString& string);
- friend CArchive& AFXAPI operator>>(CArchive& ar, CString& string);
- // load from string resource
- BOOL LoadString(UINT nID);
- #ifndef _UNICODE
- // ANSI <-> OEM support (convert string in place)
- // convert string from ANSI to OEM in-place
- void AnsiToOem();
- // convert string from OEM to ANSI in-place
- void OemToAnsi();
- #endif
- #ifndef _AFX_NO_BSTR_SUPPORT
- // OLE BSTR support (use for OLE automation)
- // return a BSTR initialized with this CString's data
- BSTR AllocSysString() const;
- // reallocates the passed BSTR, copies content of this CString to it
- BSTR SetSysString(BSTR* pbstr) const;
- #endif
- // Access to string implementation buffer as "C" character array
- // get pointer to modifiable buffer at least as long as nMinBufLength
- LPTSTR GetBuffer(int nMinBufLength);
- // release buffer, setting length to nNewLength (or to first nul if -1)
- void ReleaseBuffer(int nNewLength = -1);
- // get pointer to modifiable buffer exactly as long as nNewLength
- LPTSTR GetBufferSetLength(int nNewLength);
- // release memory allocated to but unused by string
- void FreeExtra();
- // Use LockBuffer/UnlockBuffer to turn refcounting off
- // turn refcounting back on
- LPTSTR LockBuffer();
- // turn refcounting off
- void UnlockBuffer();
- // Implementation
- public:
- ~CString();
- int GetAllocLength() const;
- protected:
- LPTSTR m_pchData; // pointer to ref counted string data
- // implementation helpers
- CStringData* GetData() const;
- void Init();
- void AllocCopy(CString& dest, int nCopyLen, int nCopyIndex, int nExtraLen) const;
- void AllocBuffer(int nLen);
- void AssignCopy(int nSrcLen, LPCTSTR lpszSrcData);
- void ConcatCopy(int nSrc1Len, LPCTSTR lpszSrc1Data, int nSrc2Len, LPCTSTR lpszSrc2Data);
- void ConcatInPlace(int nSrcLen, LPCTSTR lpszSrcData);
- void CopyBeforeWrite();
- void AllocBeforeWrite(int nLen);
- void Release();
- static void PASCAL Release(CStringData* pData);
- static int PASCAL SafeStrlen(LPCTSTR lpsz);
- static void FASTCALL FreeData(CStringData* pData);
- };
- // Compare helpers
- bool AFXAPI operator==(const CString& s1, const CString& s2);
- bool AFXAPI operator==(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator==(LPCTSTR s1, const CString& s2);
- bool AFXAPI operator!=(const CString& s1, const CString& s2);
- bool AFXAPI operator!=(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator!=(LPCTSTR s1, const CString& s2);
- bool AFXAPI operator<(const CString& s1, const CString& s2);
- bool AFXAPI operator<(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator<(LPCTSTR s1, const CString& s2);
- bool AFXAPI operator>(const CString& s1, const CString& s2);
- bool AFXAPI operator>(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator>(LPCTSTR s1, const CString& s2);
- bool AFXAPI operator<=(const CString& s1, const CString& s2);
- bool AFXAPI operator<=(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator<=(LPCTSTR s1, const CString& s2);
- bool AFXAPI operator>=(const CString& s1, const CString& s2);
- bool AFXAPI operator>=(const CString& s1, LPCTSTR s2);
- bool AFXAPI operator>=(LPCTSTR s1, const CString& s2);
- // conversion helpers
- int AFX_CDECL _wcstombsz(char* mbstr, const wchar_t* wcstr, size_t count);
- int AFX_CDECL _mbstowcsz(wchar_t* wcstr, const char* mbstr, size_t count);
- // Globals
- extern AFX_DATA TCHAR afxChNil;
- #ifdef _AFXDLL
- const CString& AFXAPI AfxGetEmptyString();
- #define afxEmptyString AfxGetEmptyString()
- #else
- extern LPCTSTR _afxPchNil;
- #define afxEmptyString ((CString&)*(CString*)&_afxPchNil)
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // class CObject is the root of all compliant objects
- #ifdef _AFXDLL
- class CObject
- #else
- class AFX_NOVTABLE CObject
- #endif
- {
- public:
- // Object model (types, destruction, allocation)
- virtual CRuntimeClass* GetRuntimeClass() const;
- virtual ~CObject(); // virtual destructors are necessary
- // Diagnostic allocations
- void* PASCAL operator new(size_t nSize);
- void* PASCAL operator new(size_t, void* p);
- void PASCAL operator delete(void* p);
- // __BORLANDC__
- // was: #if _MSC_VER >= 1200
- #if 0
- void PASCAL operator delete(void* p, void* pPlace);
- #endif
- #if defined(MFC_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
- // for file name/line number tracking using DEBUG_NEW
- void* PASCAL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
- // __BORLANDC__
- // was #if _MSC_VER >= 1200
- #if 0
- void PASCAL operator delete(void *p, LPCSTR lpszFileName, int nLine);
- #endif
- #endif
- // Disable the copy constructor and assignment by default so you will get
- // compiler errors instead of unexpected behaviour if you pass objects
- // by value or assign objects.
- protected:
- CObject();
- private:
- CObject(const CObject& objectSrc); // no implementation
- void operator=(const CObject& objectSrc); // no implementation
- // Attributes
- public:
- BOOL IsSerializable() const;
- BOOL IsKindOf(const CRuntimeClass* pClass) const;
- // Overridables
- virtual void Serialize(CArchive& ar);
- #if defined(MFC_DEBUG) || defined(_AFXDLL)
- // Diagnostic Support
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- // Implementation
- public:
- static const AFX_DATA CRuntimeClass classCObject;
- #ifdef _AFXDLL
- static CRuntimeClass* PASCAL _GetBaseClass();
- #endif
- };
- // Helper macros
- #define RUNTIME_CLASS(class_name) ((CRuntimeClass*)(&class_name::class##class_name))
- #define ASSERT_KINDOF(class_name, object) \
- ASSERT((object)->IsKindOf(RUNTIME_CLASS(class_name)))
- // RTTI helper macros/functions
- const CObject* AFX_CDECL AfxDynamicDownCast(CRuntimeClass* pClass, const CObject* pObject);
- CObject* AFX_CDECL AfxDynamicDownCast(CRuntimeClass* pClass, CObject* pObject);
- #define DYNAMIC_DOWNCAST(class_name, object) \
- (class_name*)AfxDynamicDownCast(RUNTIME_CLASS(class_name), object)
- #ifdef MFC_DEBUG
- const CObject* AFX_CDECL AfxStaticDownCast(CRuntimeClass* pClass, const CObject* pObject);
- CObject* AFX_CDECL AfxStaticDownCast(CRuntimeClass* pClass, CObject* pObject);
- #define STATIC_DOWNCAST(class_name, object) \
- ((class_name*)AfxStaticDownCast(RUNTIME_CLASS(class_name), object))
- #else
- #define STATIC_DOWNCAST(class_name, object) ((class_name*)object)
- #endif
- //////////////////////////////////////////////////////////////////////////////
- // Helper macros for declaring CRuntimeClass compatible classes
- #ifdef _AFXDLL
- #define DECLARE_DYNAMIC(class_name) \
- protected: \
- static CRuntimeClass* PASCAL _GetBaseClass(); \
- public: \
- static const AFX_DATA CRuntimeClass class##class_name; \
- virtual CRuntimeClass* GetRuntimeClass() const; \
- #define _DECLARE_DYNAMIC(class_name) \
- protected: \
- static CRuntimeClass* PASCAL _GetBaseClass(); \
- public: \
- static AFX_DATA CRuntimeClass class##class_name; \
- virtual CRuntimeClass* GetRuntimeClass() const; \
- #else
- #define DECLARE_DYNAMIC(class_name) \
- public: \
- static const AFX_DATA CRuntimeClass class##class_name; \
- virtual CRuntimeClass* GetRuntimeClass() const; \
- #define _DECLARE_DYNAMIC(class_name) \
- public: \
- static AFX_DATA CRuntimeClass class##class_name; \
- virtual CRuntimeClass* GetRuntimeClass() const; \
- #endif
- // not serializable, but dynamically constructable
- #define DECLARE_DYNCREATE(class_name) \
- DECLARE_DYNAMIC(class_name) \
- static CObject* PASCAL CreateObject();
- #define _DECLARE_DYNCREATE(class_name) \
- _DECLARE_DYNAMIC(class_name) \
- static CObject* PASCAL CreateObject();
- #define DECLARE_SERIAL(class_name) \
- _DECLARE_DYNCREATE(class_name) \
- AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);
- // generate static object constructor for class registration
- void AFXAPI AfxClassInit(CRuntimeClass* pNewClass);
- struct AFX_CLASSINIT
- { AFX_CLASSINIT(CRuntimeClass* pNewClass) { AfxClassInit(pNewClass); } };
- struct AFX_CLASSINIT_COMPAT
- { AFX_CLASSINIT_COMPAT(CRuntimeClass* pNewClass); };
- #ifdef _AFXDLL
- #define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
- CRuntimeClass* PASCAL class_name::_GetBaseClass() \
- { return RUNTIME_CLASS(base_class_name); } \
- AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
- #class_name, sizeof(class class_name), wSchema, pfnNew, \
- &class_name::_GetBaseClass, NULL }; \
- CRuntimeClass* class_name::GetRuntimeClass() const \
- { return RUNTIME_CLASS(class_name); } \
- #define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
- CRuntimeClass* PASCAL class_name::_GetBaseClass() \
- { return RUNTIME_CLASS(base_class_name); } \
- AFX_COMDAT AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
- #class_name, sizeof(class class_name), wSchema, pfnNew, \
- &class_name::_GetBaseClass, NULL }; \
- CRuntimeClass* class_name::GetRuntimeClass() const \
- { return RUNTIME_CLASS(class_name); } \
- #else
- #define IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
- AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
- #class_name, sizeof(class class_name), wSchema, pfnNew, \
- RUNTIME_CLASS(base_class_name), NULL }; \
- CRuntimeClass* class_name::GetRuntimeClass() const \
- { return RUNTIME_CLASS(class_name); } \
- #define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
- AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
- #class_name, sizeof(class class_name), wSchema, pfnNew, \
- RUNTIME_CLASS(base_class_name), NULL }; \
- CRuntimeClass* class_name::GetRuntimeClass() const \
- { return RUNTIME_CLASS(class_name); } \
- #endif
- #define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
- IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)
- #define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
- CObject* PASCAL class_name::CreateObject() \
- { return new class_name; } \
- IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, \
- class_name::CreateObject)
- #define IMPLEMENT_SERIAL(class_name, base_class_name, wSchema) \
- CObject* PASCAL class_name::CreateObject() \
- { return new class_name; } \
- _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, \
- class_name::CreateObject) \
- AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name)); \
- CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb) \
- { pOb = (class_name*) ar.ReadObject(RUNTIME_CLASS(class_name)); \
- return ar; } \
- // optional bit for schema number that enables object versioning
- #define VERSIONABLE_SCHEMA (0x80000000)
- /////////////////////////////////////////////////////////////////////////////
- // other helpers
- // zero fill everything after the vtbl pointer
- #define AFX_ZERO_INIT_OBJECT(base_class) \
- memset(((base_class*)this)+1, 0, sizeof(*this) - sizeof(class base_class));
- /////////////////////////////////////////////////////////////////////////////
- // Exceptions
- #ifdef _AFXDLL
- class CException : public CObject
- #else
- class AFX_NOVTABLE CException : public CObject
- #endif
- {
- // abstract class for dynamic type checking
- DECLARE_DYNAMIC(CException)
- public:
- // Constructors
- CException(); // sets m_bAutoDelete = TRUE
- CException(BOOL bAutoDelete); // sets m_bAutoDelete = bAutoDelete
- // Operations
- void Delete(); // use to delete exception in 'catch' block
- virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
- PUINT pnHelpContext = NULL);
- virtual int ReportError(UINT nType = MB_OK, UINT nMessageID = 0);
- // Implementation (setting m_bAutoDelete to FALSE is advanced)
- public:
- virtual ~CException();
- BOOL m_bAutoDelete;
- #ifdef MFC_DEBUG
- void PASCAL operator delete(void* pbData);
- #if 0 // __BORLANDC__ was _MSC_VER >= 1200
- void PASCAL operator delete(void* pbData, LPCSTR lpszFileName, int nLine);
- #endif
- protected:
- BOOL m_bReadyForDelete;
- #endif
- };
- #ifdef _AFXDLL
- class CSimpleException : public CException
- #else
- class AFX_NOVTABLE CSimpleException : public CException
- #endif
- {
- // base class for resource-critical MFC exceptions
- // handles ownership and initialization of an error message
- public:
- // Constructors
- CSimpleException();
- CSimpleException(BOOL bAutoDelete);
- // Operations
- virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
- PUINT pnHelpContext = NULL);
- // Implementation (setting m_bAutoDelete to FALSE is advanced)
- public:
- virtual ~CSimpleException();
- BOOL m_bAutoDelete;
- void InitString(); // used during MFC initialization
- protected:
- BOOL m_bInitialized;
- BOOL m_bLoaded;
- TCHAR m_szMessage[128];
- UINT m_nResourceID;
- #ifdef MFC_DEBUG
- BOOL m_bReadyForDelete;
- #endif
- };
- // helper routines for non-C++ EH implementations
- #ifdef _AFX_OLD_EXCEPTIONS
- BOOL AFXAPI AfxCatchProc(CRuntimeClass* pClass);
- void AFXAPI AfxThrow(CException* pException);
- #else
- // for THROW_LAST auto-delete backward compatiblity
- void AFXAPI AfxThrowLastCleanup();
- #endif
- // other out-of-line helper functions
- void AFXAPI AfxTryCleanup();
- #ifndef _AFX_JUMPBUF
- // Use portable 'jmp_buf' defined by ANSI by default.
- #define _AFX_JUMPBUF jmp_buf
- #endif
- // Placed on frame for EXCEPTION linkage, or CException cleanup
- struct AFX_EXCEPTION_LINK
- {
- #ifdef _AFX_OLD_EXCEPTIONS
- union
- {
- _AFX_JUMPBUF m_jumpBuf;
- struct
- {
- void (PASCAL* pfnCleanup)(AFX_EXCEPTION_LINK* pLink);
- void* pvData; // extra data follows
- } m_callback; // callback for cleanup (nType != 0)
- };
- UINT m_nType; // 0 for setjmp, !=0 for user extension
- #endif //!_AFX_OLD_EXCEPTIONS
- AFX_EXCEPTION_LINK* m_pLinkPrev; // previous top, next in handler chain
- CException* m_pException; // current exception (NULL in TRY block)
- AFX_EXCEPTION_LINK(); // for initialization and linking
- ~AFX_EXCEPTION_LINK() // for cleanup and unlinking
- { AfxTryCleanup(); };
- };
- // Exception global state - never access directly
- struct AFX_EXCEPTION_CONTEXT
- {
- AFX_EXCEPTION_LINK* m_pLinkTop;
- // Note: most of the exception context is now in the AFX_EXCEPTION_LINK
- };
- #ifndef _PNH_DEFINED
- typedef int (__cdecl * _PNH)( size_t );
- #define _PNH_DEFINED
- #endif
- _PNH AFXAPI AfxGetNewHandler();
- _PNH AFXAPI AfxSetNewHandler(_PNH pfnNewHandler);
- int AFX_CDECL AfxNewHandler(size_t nSize);
- void AFXAPI AfxAbort();
- #ifdef _AFX_OLD_EXCEPTIONS
- // Obsolete and non-portable: setting terminate handler
- // use CWinApp::ProcessWndProcException for Windows apps instead
- // can also use set_terminate which is part of C++ standard library
- // (these are provided for backward compatibility)
- void AFXAPI AfxTerminate();
- typedef void (AFXAPI* AFX_TERM_PROC)();
- AFX_TERM_PROC AFXAPI AfxSetTerminate(AFX_TERM_PROC);
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // Exception macros using try, catch and throw
- // (for backward compatibility to previous versions of MFC)
- #ifndef _AFX_OLD_EXCEPTIONS
- #define TRY { AFX_EXCEPTION_LINK _afxExceptionLink; try {
- #define CATCH(class, e) } catch (class* e) \
- { ASSERT(e->IsKindOf(RUNTIME_CLASS(class))); \
- _afxExceptionLink.m_pException = e;
- #define AND_CATCH(class, e) } catch (class* e) \
- { ASSERT(e->IsKindOf(RUNTIME_CLASS(class))); \
- _afxExceptionLink.m_pException = e;
- #define END_CATCH } }
- #define THROW(e) throw e
- #define THROW_LAST() (AfxThrowLastCleanup(), throw)
- // Advanced macros for smaller code
- #define CATCH_ALL(e) } catch (CException* e) \
- { { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
- _afxExceptionLink.m_pException = e;
- #define AND_CATCH_ALL(e) } catch (CException* e) \
- { { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
- _afxExceptionLink.m_pException = e;
- #define END_CATCH_ALL } } }
- #define END_TRY } catch (CException* e) \
- { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException))); \
- _afxExceptionLink.m_pException = e; } }
- #else //_AFX_OLD_EXCEPTIONS
- /////////////////////////////////////////////////////////////////////////////
- // Exception macros using setjmp and longjmp
- // (for portability to compilers with no support for C++ exception handling)
- #define TRY \
- { AFX_EXCEPTION_LINK _afxExceptionLink; \
- if (::setjmp(_afxExceptionLink.m_jumpBuf) == 0)
- #define CATCH(class, e) \
- else if (::AfxCatchProc(RUNTIME_CLASS(class))) \
- { class* e = (class*)_afxExceptionLink.m_pException;
- #define AND_CATCH(class, e) \
- } else if (::AfxCatchProc(RUNTIME_CLASS(class))) \
- { class* e = (class*)_afxExceptionLink.m_pException;
- #define END_CATCH \
- } else { ::AfxThrow(NULL); } }
- #define THROW(e) AfxThrow(e)
- #define THROW_LAST() AfxThrow(NULL)
- // Advanced macros for smaller code
- #define CATCH_ALL(e) \
- else { CException* e = _afxExceptionLink.m_pException;
- #define AND_CATCH_ALL(e) \
- } else { CException* e = _afxExceptionLink.m_pException;
- #define END_CATCH_ALL } }
- #define END_TRY }
- #endif //_AFX_OLD_EXCEPTIONS
- /////////////////////////////////////////////////////////////////////////////
- // Standard Exception classes
- class CMemoryException : public CSimpleException
- {
- DECLARE_DYNAMIC(CMemoryException)
- public:
- CMemoryException();
- // Implementation
- public:
- CMemoryException(BOOL bAutoDelete);
- CMemoryException(BOOL bAutoDelete, UINT nResourceID);
- virtual ~CMemoryException();
- };
- class CNotSupportedException : public CSimpleException
- {
- DECLARE_DYNAMIC(CNotSupportedException)
- public:
- CNotSupportedException();
- // Implementation
- public:
- CNotSupportedException(BOOL bAutoDelete);
- CNotSupportedException(BOOL bAutoDelete, UINT nResourceID);
- virtual ~CNotSupportedException();
- };
- class CArchiveException : public CException
- {
- DECLARE_DYNAMIC(CArchiveException)
- public:
- enum {
- none,
- generic,
- readOnly,
- endOfFile,
- writeOnly,
- badIndex,
- badClass,
- badSchema
- };
- // Constructor
- CArchiveException(int cause = CArchiveException::none,
- LPCTSTR lpszArchiveName = NULL);
- // Attributes
- int m_cause;
- CString m_strFileName;
- // Implementation
- public:
- virtual ~CArchiveException();
- #ifdef MFC_DEBUG
- virtual void Dump(CDumpContext& dc) const;
- #endif
- virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
- PUINT pnHelpContext = NULL);
- };
- class CFileException : public CException
- {
- DECLARE_DYNAMIC(CFileException)
- public:
- enum {
- none,
- generic,
- fileNotFound,
- badPath,
- tooManyOpenFiles,
- accessDenied,
- invalidFile,
- removeCurrentDir,
- directoryFull,
- badSeek,
- hardIO,
- sharingViolation,
- lockViolation,
- diskFull,
- endOfFile
- };
- // Constructor
- CFileException(int cause = CFileException::none, LONG lOsError = -1,
- LPCTSTR lpszArchiveName = NULL);
- // Attributes
- int m_cause;
- LONG m_lOsError;
- CString m_strFileName;
- // Operations
- // convert a OS dependent error code to a Cause
- static int PASCAL OsErrorToException(LONG lOsError);
- static int PASCAL ErrnoToException(int nErrno);
- // helper functions to throw exception after converting to a Cause
- static void PASCAL ThrowOsError(LONG lOsError, LPCTSTR lpszFileName = NULL);
- static void PASCAL ThrowErrno(int nErrno, LPCTSTR lpszFileName = NULL);
- // Implementation
- public:
- virtual ~CFileException();
- #ifdef MFC_DEBUG
- virtual void Dump(CDumpContext&) const;
- #endif
- virtual BOOL GetErrorMessage(LPTSTR lpszError, UINT nMaxError,
- PUINT pnHelpContext = NULL);
- };
- /////////////////////////////////////////////////////////////////////////////
- // Standard exception throws
- void AFXAPI AfxThrowMemoryException();
- void AFXAPI AfxThrowNotSupportedException();
- void AFXAPI AfxThrowArchiveException(int cause,
- LPCTSTR lpszArchiveName = NULL);
- void AFXAPI AfxThrowFileException(int cause, LONG lOsError = -1,
- LPCTSTR lpszFileName = NULL);
- /////////////////////////////////////////////////////////////////////////////
- // File - raw unbuffered disk file I/O
- class CFile : public CObject
- {
- DECLARE_DYNAMIC(CFile)
- public:
- // Flag values
- enum OpenFlags {
- modeRead = 0x0000,
- modeWrite = 0x0001,
- modeReadWrite = 0x0002,
- shareCompat = 0x0000,
- shareExclusive = 0x0010,
- shareDenyWrite = 0x0020,
- shareDenyRead = 0x0030,
- shareDenyNone = 0x0040,
- modeNoInherit = 0x0080,
- modeCreate = 0x1000,
- modeNoTruncate = 0x2000,
- typeText = 0x4000, // typeText and typeBinary are used in
- typeBinary = (int)0x8000 // derived classes only
- };
- enum Attribute {
- normal = 0x00,
- readOnly = 0x01,
- hidden = 0x02,
- system = 0x04,
- volume = 0x08,
- directory = 0x10,
- archive = 0x20
- };
- enum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 };
- enum { hFileNull = -1 };
- // Constructors
- CFile();
- CFile(int hFile);
- CFile(LPCTSTR lpszFileName, UINT nOpenFlags);
- // Attributes
- UINT m_hFile;
- operator HFILE() const;
- virtual DWORD GetPosition() const;
- BOOL GetStatus(CFileStatus& rStatus) const;
- virtual CString GetFileName() const;
- virtual CString GetFileTitle() const;
- virtual CString GetFilePath() const;
- virtual void SetFilePath(LPCTSTR lpszNewName);
- // Operations
- virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags,
- CFileException* pError = NULL);
- static void PASCAL Rename(LPCTSTR lpszOldName,
- LPCTSTR lpszNewName);
- static void PASCAL Remove(LPCTSTR lpszFileName);
- static BOOL PASCAL GetStatus(LPCTSTR lpszFileName,
- CFileStatus& rStatus);
- static void PASCAL SetStatus(LPCTSTR lpszFileName,
- const CFileStatus& status);
- DWORD SeekToEnd();
- void SeekToBegin();
- // backward compatible ReadHuge and WriteHuge
- DWORD ReadHuge(void* lpBuffer, DWORD dwCount);
- void WriteHuge(const void* lpBuffer, DWORD dwCount);
- // Overridables
- virtual CFile* Duplicate() const;
- virtual LONG Seek(LONG lOff, UINT nFrom);
- virtual void SetLength(DWORD dwNewLen);
- virtual DWORD GetLength() const;
- virtual UINT Read(void* lpBuf, UINT nCount);
- virtual void Write(const void* lpBuf, UINT nCount);
- virtual void LockRange(DWORD dwPos, DWORD dwCount);
- virtual void UnlockRange(DWORD dwPos, DWORD dwCount);
- virtual void Abort();
- virtual void Flush();
- virtual void Close();
- // Implementation
- public:
- virtual ~CFile();
- #ifdef MFC_DEBUG
- virtual void AssertValid() const;
- virtual void Dump(CDumpContext& dc) const;
- #endif
- enum BufferCommand { bufferRead, bufferWrite, bufferCommit, bufferCheck };
- virtual UINT GetBufferPtr(UINT nCommand, UINT nCount = 0,
- void** ppBufStart = NULL, void** ppBufMax = NULL);
- protected:
- BOOL m_bCloseOnDelete;
- CString m_strFileName;
- };
- /////////////////////////////////////////////////////////////////////////////
- // STDIO file implementation
- class CStdioFile : public CFile
- {
- DECLARE_DYNAMIC(CStdioFile)
- public:
- // Constructors
- CStdioFile();
- CStdioFile(FILE* pOpenStream);
- CStdioFile(LPCTSTR lpszFileName, UINT nOpenFlags);
- // Attributes
- FILE* m_pStream; // stdio FILE
- // m_hFile from base class is _fileno(m_pStream)
- // Operations
- // reading and writing strings
- virtual void WriteString(LPCTSTR lpsz);
- virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
- virtual BOOL ReadString(CString& rString);
- // Implementation
- public:
- virtual ~CStdioFile();
- #ifdef MFC_DEBUG
- void Dump(CDumpContext& dc) const;
- #endif
- virtual DWORD GetPosition() const;
- virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags,
- CFileException* pError = NULL);
- virtual UINT Read(void* lpBuf, UINT nCount);
- virtual void Write(const void* lpBuf, UINT nCount);
- virtual LONG Seek(LONG lOff, UINT nFrom);
- virtual void Abort();
- virtual void Flush();
- virtual void Close();
- // Unsupported APIs
- virtual CFile* Duplicate() const;
- virtual void LockRange(DWORD dwPos, DWORD dwCount);
- virtual void UnlockRange(DWORD dwPos, DWORD dwCount);
- };
- ////////////////////////////////////////////////////////////////////////////
- // Memory based file implementation
- class CMemFile : public CFile
- {
- DECLARE_DYNAMIC(CMemFile)
- public:
- // Constructors
- CMemFile(UINT nGrowBytes = 1024);
- CMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0);
- // Operations
- void Attach(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes = 0);
- BYTE* Detach();
- // Advanced Overridables
- protected:
- virtual BYTE* Alloc(DWORD nBytes);
- virtual BYTE* Realloc(BYTE* lpMem, DWORD nBytes);
- virtual BYTE* Memcpy(BYTE* lpMemTarget, const BYTE* lpMemSource, UINT nBytes);
- virtual void Free(BYTE* lpMem);
- virtual void GrowFile(DWORD dwNewLen);
- // Implementation
- protected:
- UINT m_nGrowBytes;
- DWORD m_nPosition;
- DWORD m_nBufferSize;
- DWORD m_nFileSize;
- BYTE* m_lpBuffer;
- BOOL m_bAutoDelete;
- public:
- virtual ~CMemFile();
- #ifdef MFC_DEBUG
- virtual void Dump(CDumpContext& dc) const;
- virtual void AssertValid() const;
- #endif
- virtual DWORD GetPosition() const;
- BOOL GetStatus(CFileStatus& rStatus) const;
- virtual LONG Seek(LONG lOff, UINT nFrom);
- virtual void SetLength(DWORD dwNewLen);
- virtual UINT Read(void* lpBuf, UINT nCount);
- virtual void Write(const void* lpBuf, UINT nCount);
- virtual void Abort();
- virtual void Flush();
- virtual void Close();
- virtual UINT GetBufferPtr(UINT nCommand, UINT nCount = 0,
- void** ppBufStart = NULL, void** ppBufMax = NULL);
- // Unsupported APIs
- virtual CFile* Duplicate() const;
- virtual void LockRange(DWORD dwPos, DWORD dwCount);
- virtual void UnlockRange(DWORD dwPos, DWORD dwCount);
- };
- ////////////////////////////////////////////////////////////////////////////
- // Local file searches
- class CFileFind : public CObject
- {
- public:
- CFileFind();
- virtual ~CFileFind();
- // Attributes
- public:
- DWORD GetLength() const;
- #if defined(_X86_) || defined(_ALPHA_)
- __int64 GetLength64() const;
- #endif
- virtual CString GetFileName() const;
- virtual CString GetFilePath() const;
- virtual CString GetFileTitle() const;
- virtual CString GetFileURL() const;
- virtual CString GetRoot() const;
- virtual BOOL GetLastWriteTime(FILETIME* pTimeStamp) const;
- virtual BOOL GetLastAccessTime(FILETIME* pTimeStamp) const;
- virtual BOOL GetCreationTime(FILETIME* pTimeStamp) const;
- virtual BOOL GetLastWriteTime(CTime& refTime) const;
- virtual BOOL GetLastAccessTime(CTime& refTime) const;
- virtual BOOL GetCreationTime(CTime& refTime) const;
- virtual BOOL MatchesMask(DWORD dwMask) const;
- virtual BOOL IsDots() const;
- // these aren't virtual because they all use MatchesMask(), which is
- BOOL IsReadOnly() const;
- BOOL IsDirectory() const;
- BOOL IsCompressed() const;
- BOOL IsSystem() const;
- BOOL IsHidden() const;
- BOOL IsTemporary() const;
- BOOL IsNormal() const;
- BOOL IsArchived() const;
- // Operations
- void Close();
- virtual BOOL FindFile(LPCTSTR pstrName = NULL, DWORD dwUnused = 0);
- virtual BOOL FindNextFile();
- protected:
- virtual void CloseContext();
- // Implementation
- protected:
- void* m_pFoundInfo;
- void* m_pNextInfo;
- HANDLE m_hContext;
- BOOL m_bGotLast;
- CString m_strRoot;
- TCHAR m_chDirSeparator; // not '\\' for Internet classes
- #ifdef MFC_DEBUG
- void Dump(CDumpContext& dc) const;
- void AssertValid() const;
- #endif
- DECLARE_DYNAMIC(CFileFind)
- };
- /////////////////////////////////////////////////////////////////////////////
- // CTimeSpan and CTime
- class CTimeSpan
- {
- public:
- // Constructors
- CTimeSpan();
- CTimeSpan(time_t time);
- CTimeSpan(LONG lDays, int nHours, int nMins, int nSecs);
- CTimeSpan(const CTimeSpan& timeSpanSrc);
- const CTimeSpan& operator=(const CTimeSpan& timeSpanSrc);
- // Attributes
- // extract parts
- LONG GetDays() const; // total # of days
- LONG GetTotalHours() const;
- int GetHours() const;
- LONG GetTotalMinutes() const;
- int GetMinutes() const;
- LONG GetTotalSeconds() const;
- int GetSeconds() const;
- // Operations
- // time math
- CTimeSpan operator-(CTimeSpan timeSpan) const;
- CTimeSpan operator+(CTimeSpan timeSpan) const;
- const CTimeSpan& operator+=(CTimeSpan timeSpan);
- const CTimeSpan& operator-=(CTimeSpan timeSpan);
- BOOL operator==(CTimeSpan timeSpan) const;
- BOOL operator!=(CTimeSpan timeSpan) const;
- BOOL operator<(CTimeSpan timeSpan) const;
- BOOL operator>(CTimeSpan timeSpan) const;
- BOOL operator<=(CTimeSpan timeSpan) const;
- BOOL operator>=(CTimeSpan timeSpan) const;
- #ifdef _UNICODE
- // for compatibility with MFC 3.x
- CString Format(LPCSTR pFormat) const;
- #endif
- CString Format(LPCTSTR pFormat) const;
- CString Format(UINT nID) const;
- // serialization
- #ifdef MFC_DEBUG
- friend CDumpContext& AFXAPI operator<<(CDumpContext& dc,CTimeSpan timeSpan);
- #endif
- friend CArchive& AFXAPI operator<<(CArchive& ar, CTimeSpan timeSpan);
- friend CArchive& AFXAPI operator>>(CArchive& ar, CTimeSpan& rtimeSpan);
- private:
- time_t m_timeSpan;
- friend class CTime;
- };
- class CTime
- {
- public:
- // Constructors
- static CTime PASCAL GetCurrentTime();
- CTime();
- CTime(time_t time);
- CTime(int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec,
- int nDST = -1);
- CTime(WORD wDosDate, WORD wDosTime, int nDST = -1);
- CTime(const CTime& timeSrc);
- CTime(const SYSTEMTIME& sysTime, int nDST = -1);
- CTime(const FILETIME& fileTime, int nDST = -1);
- const CTime& operator=(const CTime& timeSrc);
- const CTime& operator=(time_t t);
- // Attributes
- struct tm* GetGmtTm(struct tm* ptm = NULL) const;
- struct tm* GetLocalTm(struct tm* ptm = NULL) const;
- BOOL GetAsSystemTime(SYSTEMTIME& timeDest) const;
- time_t GetTime() const;
- int GetYear() const;
- int GetMonth() const; // month of year (1 = Jan)
- int GetDay() const; // day of month
- int GetHour() const;
- int GetMinute() const;
- int GetSecond() const;
- int GetDayOfWeek() const; // 1=Sun, 2=Mon, ..., 7=Sat
- // Operations
- // time math
- CTimeSpan operator-(CTime time) const;
- CTime operator-(CTimeSpan timeSpan) const;
- CTime operator+(CTimeSpan timeSpan) const;
- const CTime& operator+=(CTimeSpan timeSpan);
- const CTime& operator-=(CTimeSpan timeSpan);
- BOOL operator==(CTime time) const;
- BOOL operator!=(CTime time) const;
- BOOL operator<(CTime time) const;
- BOOL operator>(CTime time) const;
- BOOL operator<=(CTime time) const;
- BOOL operator>=(CTime time) const;
- // formatting using "C" strftime
- CString Format(LPCTSTR pFormat) const;
- CString FormatGmt(LPCTSTR pFormat) const;
- CString Format(UINT nFormatID) const;
- CString FormatGmt(UINT nFormatID) const;
- #ifdef _UNICODE
- // for compatibility with MFC 3.x
- CString Format(LPCSTR pFormat) const;
- CString FormatGmt(LPCSTR pFormat) const;
- #endif
- // serialization
- #ifdef MFC_DEBUG
- friend CDumpContext& AFXAPI operator<<(CDumpContext& dc, CTime time);
- #endif
- friend CArchive& AFXAPI operator<<(CArchive& ar, CTime time);
- friend CArchive& AFXAPI operator>>(CArchive& ar, CTime& rtime);
- private:
- time_t m_time;
- };
- /////////////////////////////////////////////////////////////////////////////
- // File status
- struct CFileStatus
- {
- CTime m_ctime; // creation date/time of file
- CTime m_mtime; // last modification date/time of file
- CTime m_atime; // last access date/time of file
- LONG m_size; // logical size of file in bytes
- BYTE m_attribute; // logical OR of CFile::Attribute enum values
- BYTE _m_padding; // pad the structure to a WORD
- TCHAR m_szFullName[_MAX_PATH]; // absolute path name
- #ifdef MFC_DEBUG
- void Dump(CDumpContext& dc) const;
- #endif
- };
- /////////////////////////////////////////////////////////////////////////////
- // Diagnostic memory management routines
- // Low level sanity checks for memory blocks
- BOOL AFXAPI AfxIsValidAddress(const void* lp,
- UINT nBytes, BOOL bReadWrite = TRUE);
- BOOL AFXAPI AfxIsValidString(LPCWSTR lpsz, int nLength = -1);
- BOOL AFXAPI AfxIsValidString(LPCSTR lpsz, int nLength = -1);
- #if defined(MFC_DEBUG) && !defined(_AFX_NO_DEBUG_CRT)
- // Memory tracking allocation
- void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
- #define DEBUG_NEW new(THIS_FILE, __LINE__)
- #if _MSC_VER >= 1200
- void AFX_CDECL operator delete(void* p, LPCSTR lpszFileName, int nLine);
- #endif
- void* AFXAPI AfxAllocMemoryDebug(size_t nSize, BOOL bIsObject,
- LPCSTR lpszFileName, int nLine);
- void AFXAPI AfxFreeMemoryDebug(void* pbData, BOOL bIsObject);
- // Dump any memory leaks since program started
- BOOL AFXAPI AfxDumpMemoryLeaks();
- // Return TRUE if valid memory block of nBytes
- BOOL AFXAPI AfxIsMemoryBlock(const void* p, UINT nBytes,
- LONG* plRequestNumber = NULL);
- // Return TRUE if memory is sane or print out what is wrong
- BOOL AFXAPI AfxCheckMemory();
- #define afxMemDF _crtDbgFlag
- enum AfxMemDF // memory debug/diagnostic flags
- {
- allocMemDF = 0x01, // turn on debugging allocator
- delayFreeMemDF = 0x02, // delay freeing memory
- checkAlwaysMemDF = 0x04 // AfxCheckMemory on every alloc/free
- };
- #ifdef _UNICODE
- #define AfxOutputDebugString(lpsz) \
- do \
- { \
- USES_CONVERSION; \
- _RPT0(_CRT_WARN, W2CA(lpsz)); \
- } while (0)
- #else
- #define AfxOutputDebugString(lpsz) _RPT0(_CRT_WARN, lpsz)
- #endif
- // turn on/off tracking for a short while
- BOOL AFXAPI AfxEnableMemoryTracking(BOOL bTrack);
- // Advanced initialization: for overriding default diagnostics
- BOOL AFXAPI AfxDiagnosticInit(void);
- // A failure hook returns whether to permit allocation
- typedef BOOL (AFXAPI* AFX_ALLOC_HOOK)(size_t nSize, BOOL bObject, LONG lRequestNumber);
- // Set new hook, return old (never NULL)
- AFX_ALLOC_HOOK AFXAPI AfxSetAllocHook(AFX_ALLOC_HOOK pfnAllocHook);
- // Debugger hook on specified allocation request - Obsolete
- void AFXAPI AfxSetAllocStop(LONG lRequestNumber);
- // Memory state for snapshots/leak detection
- struct CMemoryState
- {
- // Attributes
- enum blockUsage
- {
- freeBlock, // memory not used
- objectBlock, // contains a CObject derived class object
- bitBlock, // contains ::operator new data
- crtBlock,
- ignoredBlock,
- nBlockUseMax // total number of usages
- };
- _CrtMemState m_memState;
- LONG m_lCounts[nBlockUseMax];
- LONG m_lSizes[nBlockUseMax];
- LONG m_lHighWaterCount;
- LONG m_lTotalCount;
- CMemoryState();
- // Operations
- void Checkpoint(); // fill with current state
- BOOL Difference(const CMemoryState& oldState,
- const CMemoryState& newState); // fill with difference
- void UpdateData();
- // Output to afxDump
- void DumpStatistics() const;
- void DumpAllObjectsSince() const;
- };
- // Enumerate allocated objects or runtime classes
- void AFXAPI AfxDoForAllObjects(void (AFX_CDECL *pfn)(CObject* pObject, void* pContext),
- void* pContext);
- void AFXAPI AfxDoForAllClasses(void (AFX_CDECL *pfn)(const CRuntimeClass* pClass,
- void* pContext), void* pContext);
- #else
- // non-_DEBUG_ALLOC version that assume everything is OK
- #define DEBUG_NEW new
- #define AfxCheckMemory() TRUE
- #define AfxIsMemoryBlock(p, nBytes) TRUE
- #define AfxEnableMemoryTracking(bTrack) FALSE
- #define AfxOutputDebugString(lpsz) ::OutputDebugString(lpsz)
- // diagnostic initialization
- #ifndef MFC_DEBUG
- #define AfxDiagnosticInit() TRUE
- #else
- BOOL AFXAPI AfxDiagnosticInit(void);
- #endif
- #endif // MFC_DEBUG
- /////////////////////////////////////////////////////////////////////////////
- // Archives for serializing CObject data
- // needed for implementation
- class CPtrArray;
- class CMapPtrToPtr;
- class CDocument;
- class CArchive
- {
- public:
- // Flag values
- enum Mode { store = 0, load = 1, bNoFlushOnDelete = 2, bNoByteSwap = 4 };
- CArchive(CFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL);
- ~CArchive();
- // Attributes
- BOOL IsLoading() const;
- BOOL IsStoring() const;
- BOOL IsByteSwapping() const;
- BOOL IsBufferEmpty() const;
- CFile* GetFile() const;
- UINT GetObjectSchema(); // only valid when reading a CObject*
- void SetObjectSchema(UINT nSchema);
- // pointer to document being serialized -- must set to serialize
- // COleClientItems in a document!
- CDocument* m_pDocument;
- // Operations
- UINT Read(void* lpBuf, UINT nMax);
- void Write(const void* lpBuf, UINT nMax);
- void Flush();
- void Close();
- void Abort(); // close and shutdown without exceptions
- // reading and writing strings
- void WriteString(LPCTSTR lpsz);
- LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
- BOOL ReadString(CString& rString);
- public:
- // Object I/O is pointer based to avoid added construction overhead.
- // Use the Serialize member function directly for embedded objects.
- friend CArchive& AFXAPI operator<<(CArchive& ar, const CObject* pOb);
- friend CArchive& AFXAPI operator>>(CArchive& ar, CObject*& pOb);
- friend CArchive& AFXAPI operator>>(CArchive& ar, const CObject*& pOb);
- // insertion operations
- CArchive& operator<<(BYTE by);
- CArchive& operator<<(WORD w);
- CArchive& operator<<(LONG l);
- CArchive& operator<<(DWORD dw);
- CArchive& operator<<(float f);
- CArchive& operator<<(double d);
- CArchive& operator<<(int i);
- CArchive& operator<<(short w);
- CArchive& operator<<(char ch);
- CArchive& operator<<(unsigned u);
- // extraction operations
- CArchive& operator>>(BYTE& by);
- CArchive& operator>>(WORD& w);
- CArchive& operator>>(DWORD& dw);
- CArchive& operator>>(LONG& l);
- CArchive& operator>>(float& f);
- CArchive& operator>>(double& d);
- CArchive& operator>>(int& i);
- CArchive& operator>>(short& w);
- CArchive& operator>>(char& ch);
- CArchive& operator>>(unsigned& u);
- // object read/write
- CObject* ReadObject(const CRuntimeClass* pClass);
- void WriteObject(const CObject* pOb);
- // advanced object mapping (used for forced references)
- void MapObject(const CObject* pOb);
- // advanced versioning support
- void WriteClass(const CRuntimeClass* pClassRef);
- CRuntimeClass* ReadClass(const CRuntimeClass* pClassRefRequested = NULL,
- UINT* pSchema = NULL, DWORD* pObTag = NULL);
- void SerializeClass(const CRuntimeClass* pClassRef);
- // advanced operations (used when storing/loading many objects)
- void SetStoreParams(UINT nHashSize = 2053, UINT nBlockSize = 128);
- void SetLoadParams(UINT nGrowBy = 1024);
- // Implementation
- public:
- BOOL m_bForceFlat; // for COleClientItem implementation (default TRUE)
- BOOL m_bDirectBuffer; // TRUE if m_pFile supports direct buffering
- void FillBuffer(UINT nBytesNeeded);
- void CheckCount(); // throw exception if m_nMapCount is too large
- // special functions for reading and writing (16-bit compatible) counts
- DWORD ReadCount();
- void WriteCount(DWORD dwCount);
- // public for advanced use
- UINT m_nObjectSchema;
- CString m_strFileName;
- protected:
- // archive objects cannot be copied or assigned
- CArchive(const CArchive& arSrc);
- void operator=(const CArchive& arSrc);
- BOOL m_nMode;
- BOOL m_bUserBuf;
- int m_nBufSize;
- CFile* m_pFile;
- BYTE* m_lpBufCur;
- BYTE* m_lpBufMax;
- BYTE* m_lpBufStart;
- // array/map for CObject* and CRuntimeClass* load/store
- UINT m_nMapCount;
- union
- {
- CPtrArray* m_pLoadArray;
- CMapPtrToPtr* m_pStoreMap;
- };
- // map to keep track of mismatched schemas
- CMapPtrToPtr* m_pSchemaMap;
- // advanced parameters (controls performance with large archives)
- UINT m_nGrowSize;
- UINT m_nHashSize;
- };
- /////////////////////////////////////////////////////////////////////////////
- // Diagnostic dumping
- // Note: AfxDumpStack is available in release builds, although it is always
- // statically linked so as to not negatively affect the size of MFC42.DLL.
- #define AFX_STACK_DUMP_TARGET_TRACE 0x0001
- #define AFX_STACK_DUMP_TARGET_CLIPBOARD 0x0002
- #define AFX_STACK_DUMP_TARGET_BOTH 0x0003
- #define AFX_STACK_DUMP_TARGET_ODS 0x0004
- #ifdef MFC_DEBUG
- #define AFX_STACK_DUMP_TARGET_DEFAULT AFX_STACK_DUMP_TARGET_TRACE
- #else
- #define AFX_STACK_DUMP_TARGET_DEFAULT AFX_STACK_DUMP_TARGET_CLIPBOARD
- #endif
- void AFXAPI AfxDumpStack(DWORD dwFlags = AFX_STACK_DUMP_TARGET_DEFAULT);
- class CDumpContext
- {
- public:
- CDumpContext(CFile* pFile = NULL);
- // Attributes
- int GetDepth() const; // 0 => this object, 1 => children objects
- void SetDepth(int nNewDepth);
- // Operations
- CDumpContext& operator<<(LPCTSTR lpsz);
- #ifdef _UNICODE
- CDumpContext& operator<<(LPCSTR lpsz); // automatically widened
- #else
- CDumpContext& operator<<(LPCWSTR lpsz); // automatically thinned
- #endif
- CDumpContext& operator<<(const void* lp);
- CDumpContext& operator<<(const CObject* pOb);
- CDumpContext& operator<<(const CObject& ob);
- CDumpContext& operator<<(BYTE by);
- CDumpContext& operator<<(WORD w);
- CDumpContext& operator<<(UINT u);
- CDumpContext& operator<<(LONG l);
- CDumpContext& operator<<(DWORD dw);
- CDumpContext& operator<<(float f);
- CDumpContext& operator<<(double d);
- CDumpContext& operator<<(int n);
- void HexDump(LPCTSTR lpszLine, BYTE* pby, int nBytes, int nWidth);
- void Flush();
- // Implementation
- protected:
- // dump context objects cannot be copied or assigned
- CDumpContext(const CDumpContext& dcSrc);
- void operator=(const CDumpContext& dcSrc);
- void OutputString(LPCTSTR lpsz);
- int m_nDepth;
- public:
- CFile* m_pFile;
- };
- #ifdef MFC_DEBUG
- extern AFX_DATA CDumpContext afxDump;
- extern AFX_DATA BOOL afxTraceEnabled;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // Special include for Win32s compatibility
- #ifdef _AFX_PACKING
- #pragma pack(pop)
- #endif
- #ifndef __AFXCOLL_H__
- #include <afxcoll.h>
- #ifndef __AFXSTATE_H__
- #include <afxstat_.h> // for _AFX_APP_STATE and _AFX_THREAD_STATE
- #endif
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // Inline function declarations
- #ifdef _AFX_ENABLE_INLINES
- #define _AFX_INLINE AFX_INLINE
- #if !defined(_AFX_CORE_IMPL) || !defined(_AFXDLL) || defined(MFC_DEBUG)
- #define _AFX_PUBLIC_INLINE AFX_INLINE
- #else
- #define _AFX_PUBLIC_INLINE
- #endif
- #include <afx.inl>
- #endif
- #undef AFX_DATA
- #define AFX_DATA
- #ifdef _AFX_MINREBUILD
- #pragma component(minrebuild, on)
- #endif
- #ifndef _AFX_FULLTYPEINFO
- #pragma component(mintypeinfo, off)
- #endif
- #endif // __AFX_H__
- /////////////////////////////////////////////////////////////////////////////
|