// This is a part of the Microsoft Foundation Classes C++ library. // Copyright (C) 1992-1995 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 #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 { public: _AFX_WIN_STATE(); virtual ~_AFX_WIN_STATE(); // gray dialog support HBRUSH m_hDlgBkBrush; // dialog and message box background brush COLORREF m_crDlgTextClr; #ifdef _MAC COLORREF m_crDlgBkClr; #endif // printing abort BOOL m_bUserAbort; }; EXTERN_PROCESS_LOCAL(_AFX_WIN_STATE, _afxWinState) ///////////////////////////////////////////////////////////////////////////// // AFX_MODULE_STATE : portion of state that is pushed/popped // forward references required for AFX_MODULE_PROCESS_STATE definition 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 // AFX_MODULE_PROCESS_STATE (local to process *and* module) class AFX_MODULE_PROCESS_STATE : public CNoTrackObject { public: AFX_MODULE_PROCESS_STATE(); virtual ~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 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 m_lockList; #endif #ifndef _AFX_NO_DAO_SUPPORT _AFX_DAO_STATE* m_pDaoState; #endif }; // 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 // 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 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; CMapPtrToPtr m_mapSocketHandle; CMapPtrToPtr m_mapDeadSockets; CPtrList m_listSocketNotifications; #endif }; // forward references required for AFX_MODULE_STATE definition class CWinApp; class COleObjectFactory; // 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 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 short m_fRegisteredClasses; // flags for registered window classes // runtime class data #ifdef _AFXDLL CRuntimeClass* m_pClassInit; #endif CTypedSimpleList m_classList; // OLE object factories #ifndef _AFX_NO_OLE_SUPPORT #ifdef _AFXDLL COleObjectFactory* m_pFactoryInit; #endif CTypedSimpleList 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 // define process local/thread local portions of module state PROCESS_LOCAL(AFX_MODULE_PROCESS_STATE, m_process) 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_PROCESS_STATE* AFXAPI AfxGetModuleProcessState(); AFX_MODULE_THREAD_STATE* AFXAPI AfxGetModuleThreadState(); ///////////////////////////////////////////////////////////////////////////// // 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; }; #define AFX_MANAGE_STATE(p) AFX_MAINTAIN_STATE _ctlState(p); #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_hHookOldSendMsg; 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; TCHAR m_szTempClassName[96]; // see AfxRegisterWndClass 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 }; 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__ /////////////////////////////////////////////////////////////////////////////