|
|
// 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 __AFXSTATE_H__
#define __AFXSTATE_H__
#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif
#ifndef __AFXTLS_H__
#include <afxtls_.h>
#endif
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
/////////////////////////////////////////////////////////////////////////////
// _AFX_DEBUG_STATE
#ifdef _DEBUG
class _AFX_DEBUG_STATE : public CNoTrackObject { public: _AFX_DEBUG_STATE(); virtual ~_AFX_DEBUG_STATE(); };
EXTERN_PROCESS_LOCAL(_AFX_DEBUG_STATE, afxDebugState)
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// _AFX_WIN_STATE
#undef AFX_DATA
#define AFX_DATA
class _AFX_WIN_STATE : public CNoTrackObject { #ifndef _AFX_NO_GRAYDLG_SUPPORT
public: _AFX_WIN_STATE(); virtual ~_AFX_WIN_STATE();
// gray dialog support
HBRUSH m_hDlgBkBrush; // dialog and message box background brush
COLORREF m_crDlgTextClr; #endif //!_AFX_NO_GRAYDLG_SUPPORT
public: // printing abort
BOOL m_bUserAbort; };
EXTERN_PROCESS_LOCAL(_AFX_WIN_STATE, _afxWinState)
/////////////////////////////////////////////////////////////////////////////
// Type library cache - AFX_INTERNAL
#ifndef _AFX_NO_OLE_SUPPORT
struct ITypeInfo; typedef ITypeInfo* LPTYPEINFO;
struct ITypeLib; typedef ITypeLib* LPTYPELIB;
typedef struct _GUID GUID; #ifndef _REFCLSID_DEFINED
#define REFGUID const GUID &
#endif
class CTypeLibCache { public: CTypeLibCache() : m_cRef(0), m_lcid((LCID)-1), m_ptlib(NULL), m_ptinfo(NULL) {} void Lock(); void Unlock(); BOOL Lookup(LCID lcid, LPTYPELIB* pptlib); void Cache(LCID lcid, LPTYPELIB ptlib); BOOL LookupTypeInfo(LCID lcid, REFGUID guid, LPTYPEINFO* pptinfo); void CacheTypeInfo(LCID lcid, REFGUID guid, LPTYPEINFO ptinfo); const GUID* m_pTypeLibID;
protected: LCID m_lcid; LPTYPELIB m_ptlib; GUID m_guidInfo; LPTYPEINFO m_ptinfo; long m_cRef; };
#endif //!_AFX_NO_OLE_SUPPORT
/////////////////////////////////////////////////////////////////////////////
// AFX_MODULE_STATE : portion of state that is pushed/popped
// forward references required for AFX_MODULE_THREAD_STATE definition
class CWinThread; class CHandleMap; class CFrameWnd;
#ifndef _PNH_DEFINED
typedef int (__cdecl * _PNH)( size_t ); #define _PNH_DEFINED
#endif
#if _MFC_VER >= 0x0600
template<class TYPE> class CEmbeddedButActsLikePtr { public: AFX_INLINE TYPE* operator->() { return &m_data; } AFX_INLINE operator TYPE*() { return &m_data; } TYPE m_data; }; #endif
// AFX_MODULE_THREAD_STATE (local to thread *and* module)
class AFX_MODULE_THREAD_STATE : public CNoTrackObject { public: AFX_MODULE_THREAD_STATE(); virtual ~AFX_MODULE_THREAD_STATE();
// current CWinThread pointer
CWinThread* m_pCurrentWinThread;
// list of CFrameWnd objects for thread
CTypedSimpleList<CFrameWnd*> m_frameList;
// temporary/permanent map state
DWORD m_nTempMapLock; // if not 0, temp maps locked
CHandleMap* m_pmapHWND; CHandleMap* m_pmapHMENU; CHandleMap* m_pmapHDC; CHandleMap* m_pmapHGDIOBJ; CHandleMap* m_pmapHIMAGELIST;
// thread-local MFC new handler (separate from C-runtime)
_PNH m_pfnNewHandler;
#ifndef _AFX_NO_SOCKET_SUPPORT
// WinSock specific thread state
HWND m_hSocketWindow; #if _MFC_VER >= 0x0600
#ifdef _AFXDLL
CEmbeddedButActsLikePtr<CMapPtrToPtr> m_pmapSocketHandle; CEmbeddedButActsLikePtr<CMapPtrToPtr> m_pmapDeadSockets; CEmbeddedButActsLikePtr<CPtrList> m_plistSocketNotifications; #else
CMapPtrToPtr*m_pmapSocketHandle; CMapPtrToPtr* m_pmapDeadSockets; CPtrList* m_plistSocketNotifications; #endif
#else
CMapPtrToPtr m_mapSocketHandle; CMapPtrToPtr m_mapDeadSockets; CPtrList m_listSocketNotifications; #endif
#endif
};
// forward references required for AFX_MODULE_STATE definition
class CWinApp; class COleObjectFactory;
class CWnd;
#ifdef _AFXDLL
class CDynLinkLibrary; #endif
#ifndef _AFX_NO_OCC_SUPPORT
class COccManager; class COleControlLock; #endif
#ifndef _AFX_NO_DAO_SUPPORT
class _AFX_DAO_STATE; #endif
#if _MFC_VER >= 0x0600
class CTypeLibCacheMap : public CMapPtrToPtr { public: virtual void RemoveAll(void* pExcept); }; #endif
// AFX_MODULE_STATE (global data for a module)
class AFX_MODULE_STATE : public CNoTrackObject { public: #ifdef _AFXDLL
AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion); AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion, BOOL bSystem); #else
AFX_MODULE_STATE(BOOL bDLL); #endif
~AFX_MODULE_STATE();
CWinApp* m_pCurrentWinApp; HINSTANCE m_hCurrentInstanceHandle; HINSTANCE m_hCurrentResourceHandle; LPCTSTR m_lpszCurrentAppName; BYTE m_bDLL; // TRUE if module is a DLL, FALSE if it is an EXE
BYTE m_bSystem; // TRUE if module is a "system" module, FALSE if not
BYTE m_bReserved[2]; // padding
#if _MFC_VER >= 0x0600
DWORD m_fRegisteredClasses; // flags for registered window classes
#else
short m_fRegisteredClasses; // flags for registered window classes
#endif
// runtime class data
#ifdef _AFXDLL
CRuntimeClass* m_pClassInit; #endif
CTypedSimpleList<CRuntimeClass*> m_classList;
// OLE object factories
#ifndef _AFX_NO_OLE_SUPPORT
#ifdef _AFXDLL
COleObjectFactory* m_pFactoryInit; #endif
CTypedSimpleList<COleObjectFactory*> m_factoryList; #endif
// number of locked OLE objects
long m_nObjectCount; BOOL m_bUserCtrl;
// AfxRegisterClass and AfxRegisterWndClass data
TCHAR m_szUnregisterList[4096]; #ifdef _AFXDLL
WNDPROC m_pfnAfxWndProc; DWORD m_dwVersion; // version that module linked against
#endif
// variables related to a given process in a module
// (used to be AFX_MODULE_PROCESS_STATE)
#ifdef _AFX_OLD_EXCEPTIONS
// exceptions
AFX_TERM_PROC m_pfnTerminate; #endif
void (PASCAL *m_pfnFilterToolTipMessage)(MSG*, CWnd*);
#ifdef _AFXDLL
// CDynLinkLibrary objects (for resource chain)
CTypedSimpleList<CDynLinkLibrary*> m_libraryList;
// special case for MFCxxLOC.DLL (localized MFC resources)
HINSTANCE m_appLangDLL; #endif
#ifndef _AFX_NO_OCC_SUPPORT
// OLE control container manager
COccManager* m_pOccManager; // locked OLE controls
CTypedSimpleList<COleControlLock*> m_lockList; #endif
#ifndef _AFX_NO_DAO_SUPPORT
_AFX_DAO_STATE* m_pDaoState; #endif
#ifndef _AFX_NO_OLE_SUPPORT
// Type library caches
CTypeLibCache m_typeLibCache; #if _MFC_VER >= 0x0600
CTypeLibCacheMap* m_pTypeLibCacheMap; #else
CMapPtrToPtr* m_pTypeLibCacheMap; #endif
#endif
// define thread local portions of module state
THREAD_LOCAL(AFX_MODULE_THREAD_STATE, m_thread) };
AFX_MODULE_STATE* AFXAPI AfxGetAppModuleState(); #ifdef _AFXDLL
AFX_MODULE_STATE* AFXAPI AfxSetModuleState(AFX_MODULE_STATE* pNewState); #endif
AFX_MODULE_STATE* AFXAPI AfxGetModuleState(); AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState();
AFX_MODULE_THREAD_STATE* AFXAPI AfxGetModuleThreadState();
#ifdef _AFXDLL
#define _AFX_CMDTARGET_GETSTATE() (m_pModuleState)
#else
#define _AFX_CMDTARGET_GETSTATE() (AfxGetModuleState())
#endif
/////////////////////////////////////////////////////////////////////////////
// macros & classes to manage pushing/popping the module state
#ifdef _AFXDLL
struct AFX_MAINTAIN_STATE { AFX_MAINTAIN_STATE(AFX_MODULE_STATE* pModuleState); ~AFX_MAINTAIN_STATE();
protected: AFX_MODULE_STATE* m_pPrevModuleState; };
#if _MFC_VER >= 0x0600
class _AFX_THREAD_STATE; struct AFX_MAINTAIN_STATE2 { AFX_MAINTAIN_STATE2(AFX_MODULE_STATE* pModuleState); ~AFX_MAINTAIN_STATE2();
protected: AFX_MODULE_STATE* m_pPrevModuleState; _AFX_THREAD_STATE* m_pThreadState; }; #define AFX_MANAGE_STATE(p) AFX_MAINTAIN_STATE2 _ctlState(p);
#else
#define AFX_MANAGE_STATE(p) AFX_MAINTAIN_STATE _ctlState(p);
#endif // _MFC_VER
#else // _AFXDLL
#define AFX_MANAGE_STATE(p)
#endif //!_AFXDLL
/////////////////////////////////////////////////////////////////////////////
// Thread global state
// forward references required for _AFX_THREAD_STATE definition
class CView; class CToolTipCtrl; class CControlBar;
class _AFX_THREAD_STATE : public CNoTrackObject { public: _AFX_THREAD_STATE(); virtual ~_AFX_THREAD_STATE();
// override for m_pModuleState in _AFX_APP_STATE
AFX_MODULE_STATE* m_pModuleState; AFX_MODULE_STATE* m_pPrevModuleState;
// memory safety pool for temp maps
void* m_pSafetyPoolBuffer; // current buffer
// thread local exception context
AFX_EXCEPTION_CONTEXT m_exceptionContext;
// CWnd create, gray dialog hook, and other hook data
CWnd* m_pWndInit; CWnd* m_pAlternateWndInit; // special case commdlg hooking
DWORD m_dwPropStyle; DWORD m_dwPropExStyle; HWND m_hWndInit; BOOL m_bDlgCreate; HHOOK m_hHookOldCbtFilter; HHOOK m_hHookOldMsgFilter;
// other CWnd modal data
MSG m_lastSentMsg; // see CWnd::WindowProc
HWND m_hTrackingWindow; // see CWnd::TrackPopupMenu
HMENU m_hTrackingMenu; #ifdef _WIN64
TCHAR m_szTempClassName[256]; // see AfxRegisterWndClass
#else
TCHAR m_szTempClassName[96]; #endif
HWND m_hLockoutNotifyWindow; // see CWnd::OnCommand
BOOL m_bInMsgFilter;
// other framework modal data
CView* m_pRoutingView; // see CCmdTarget::GetRoutingView
CFrameWnd* m_pRoutingFrame; // see CCmdTarget::GetRoutingFrame
// MFC/DB thread-local data
BOOL m_bWaitForDataSource;
// common controls thread state
CToolTipCtrl* m_pToolTip; CWnd* m_pLastHit; // last window to own tooltip
int m_nLastHit; // last hittest code
TOOLINFO m_lastInfo; // last TOOLINFO structure
int m_nLastStatus; // last flyby status message
CControlBar* m_pLastStatus; // last flyby status control bar
// OLE control thread-local data
CWnd* m_pWndPark; // "parking space" window
long m_nCtrlRef; // reference count on parking window
BOOL m_bNeedTerm; // TRUE if OleUninitialize needs to be called
};
EXTERN_THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)
_AFX_THREAD_STATE* AFXAPI AfxGetThreadState();
/////////////////////////////////////////////////////////////////////////////
#ifdef _AFX_PACKING
#pragma pack(pop)
#endif
#undef AFX_DATA
#define AFX_DATA
#endif //__AFXSTATE_H__
/////////////////////////////////////////////////////////////////////////////
|