home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / BC_502 / MFCINC.PAK / AFXSTAT_.H < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-06  |  8.4 KB  |  322 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1995 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #ifndef __AFXSTATE_H__
  12. #define __AFXSTATE_H__
  13.  
  14. #ifdef _AFX_PACKING
  15. #pragma pack(push, _AFX_PACKING)
  16. #endif
  17.  
  18. #ifndef __AFXTLS_H__
  19.     #include <afxtls_.h>
  20. #endif
  21.  
  22. #undef AFX_DATA
  23. #define AFX_DATA AFX_CORE_DATA
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // _AFX_DEBUG_STATE
  27.  
  28. #ifdef _DEBUG
  29.  
  30. class _AFX_DEBUG_STATE : public CNoTrackObject
  31. {
  32. public:
  33.     _AFX_DEBUG_STATE();
  34.     virtual ~_AFX_DEBUG_STATE();
  35. };
  36.  
  37. EXTERN_PROCESS_LOCAL(_AFX_DEBUG_STATE, afxDebugState)
  38.  
  39. #endif //_DEBUG
  40.  
  41. /////////////////////////////////////////////////////////////////////////////
  42. // _AFX_WIN_STATE
  43.  
  44. #undef AFX_DATA
  45. #define AFX_DATA
  46.  
  47. class _AFX_WIN_STATE : public CNoTrackObject
  48. {
  49. public:
  50.     _AFX_WIN_STATE();
  51.     virtual ~_AFX_WIN_STATE();
  52.  
  53.     // gray dialog support
  54.     HBRUSH m_hDlgBkBrush; // dialog and message box background brush
  55.     COLORREF m_crDlgTextClr;
  56. #ifdef _MAC
  57.     COLORREF m_crDlgBkClr;
  58. #endif
  59.  
  60.     // printing abort
  61.     BOOL m_bUserAbort;
  62. };
  63.  
  64. EXTERN_PROCESS_LOCAL(_AFX_WIN_STATE, _afxWinState)
  65.  
  66. /////////////////////////////////////////////////////////////////////////////
  67. // AFX_MODULE_STATE : portion of state that is pushed/popped
  68.  
  69. // forward references required for AFX_MODULE_PROCESS_STATE definition
  70. class CWnd;
  71.  
  72. #ifdef _AFXDLL
  73. class CDynLinkLibrary;
  74. #endif
  75.  
  76. #ifndef _AFX_NO_OCC_SUPPORT
  77. class COccManager;
  78. class COleControlLock;
  79. #endif
  80.  
  81. #ifndef _AFX_NO_DAO_SUPPORT
  82. class _AFX_DAO_STATE;
  83. #endif
  84.  
  85. // AFX_MODULE_PROCESS_STATE (local to process *and* module)
  86. class AFX_MODULE_PROCESS_STATE : public CNoTrackObject
  87. {
  88. public:
  89.     AFX_MODULE_PROCESS_STATE();
  90.     virtual ~AFX_MODULE_PROCESS_STATE();
  91.  
  92. #ifdef _AFX_OLD_EXCEPTIONS
  93.     // exceptions
  94.     AFX_TERM_PROC m_pfnTerminate;
  95. #endif
  96.     void (PASCAL *m_pfnFilterToolTipMessage)(MSG*, CWnd*);
  97.  
  98. #ifdef _AFXDLL
  99.     // CDynLinkLibrary objects (for resource chain)
  100.     CTypedSimpleList<CDynLinkLibrary*> m_libraryList;
  101.  
  102.     // special case for MFCxxLOC.DLL (localized MFC resources)
  103.     HINSTANCE m_appLangDLL;
  104. #endif
  105.  
  106. #ifndef _AFX_NO_OCC_SUPPORT
  107.     // OLE control container manager
  108.     COccManager* m_pOccManager;
  109.     // locked OLE controls
  110.     CTypedSimpleList<COleControlLock*> m_lockList;
  111. #endif
  112.  
  113. #ifndef _AFX_NO_DAO_SUPPORT
  114.     _AFX_DAO_STATE* m_pDaoState;
  115. #endif
  116. };
  117.  
  118. // forward references required for AFX_MODULE_THREAD_STATE definition
  119. class CWinThread;
  120. class CHandleMap;
  121. class CFrameWnd;
  122.  
  123. #ifndef _PNH_DEFINED
  124. typedef int (__cdecl * _PNH)( size_t );
  125. #define _PNH_DEFINED
  126. #endif
  127.  
  128. // AFX_MODULE_THREAD_STATE (local to thread *and* module)
  129. class AFX_MODULE_THREAD_STATE : public CNoTrackObject
  130. {
  131. public:
  132.     AFX_MODULE_THREAD_STATE();
  133.     virtual ~AFX_MODULE_THREAD_STATE();
  134.  
  135.     // current CWinThread pointer
  136.     CWinThread* m_pCurrentWinThread;
  137.  
  138.     // list of CFrameWnd objects for thread
  139.     CTypedSimpleList<CFrameWnd*> m_frameList;
  140.  
  141.     // temporary/permanent map state
  142.     DWORD m_nTempMapLock;           // if not 0, temp maps locked
  143.     CHandleMap* m_pmapHWND;
  144.     CHandleMap* m_pmapHMENU;
  145.     CHandleMap* m_pmapHDC;
  146.     CHandleMap* m_pmapHGDIOBJ;
  147.     CHandleMap* m_pmapHIMAGELIST;
  148.  
  149.     // thread-local MFC new handler (separate from C-runtime)
  150.     _PNH m_pfnNewHandler;
  151.  
  152. #ifndef _AFX_NO_SOCKET_SUPPORT
  153.     // WinSock specific thread state
  154.     HWND m_hSocketWindow;
  155.     CMapPtrToPtr m_mapSocketHandle;
  156.     CMapPtrToPtr m_mapDeadSockets;
  157.     CPtrList m_listSocketNotifications;
  158. #endif
  159. };
  160.  
  161. // forward references required for AFX_MODULE_STATE definition
  162. class CWinApp;
  163. class COleObjectFactory;
  164.  
  165. // AFX_MODULE_STATE (global data for a module)
  166. class AFX_MODULE_STATE : public CNoTrackObject
  167. {
  168. public:
  169. #ifdef _AFXDLL
  170.     AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion);
  171.     AFX_MODULE_STATE(BOOL bDLL, WNDPROC pfnAfxWndProc, DWORD dwVersion,
  172.         BOOL bSystem);
  173. #else
  174.     AFX_MODULE_STATE(BOOL bDLL);
  175. #endif
  176.  
  177.     CWinApp* m_pCurrentWinApp;
  178.     HINSTANCE m_hCurrentInstanceHandle;
  179.     HINSTANCE m_hCurrentResourceHandle;
  180.     LPCTSTR m_lpszCurrentAppName;
  181.     BYTE m_bDLL;    // TRUE if module is a DLL, FALSE if it is an EXE
  182.     BYTE m_bSystem; // TRUE if module is a "system" module, FALSE if not
  183.     BYTE m_bReserved[2]; // padding
  184.  
  185.     short m_fRegisteredClasses; // flags for registered window classes
  186.  
  187.     // runtime class data
  188. #ifdef _AFXDLL
  189.     CRuntimeClass* m_pClassInit;
  190. #endif
  191.     CTypedSimpleList<CRuntimeClass*> m_classList;
  192.  
  193.     // OLE object factories
  194. #ifndef _AFX_NO_OLE_SUPPORT
  195. #ifdef _AFXDLL
  196.     COleObjectFactory* m_pFactoryInit;
  197. #endif
  198.     CTypedSimpleList<COleObjectFactory*> m_factoryList;
  199. #endif
  200.     // number of locked OLE objects
  201.     long m_nObjectCount;
  202.     BOOL m_bUserCtrl;
  203.  
  204.     // AfxRegisterClass and AfxRegisterWndClass data
  205.     TCHAR m_szUnregisterList[4096];
  206. #ifdef _AFXDLL
  207.     WNDPROC m_pfnAfxWndProc;
  208.     DWORD m_dwVersion;  // version that module linked against
  209. #endif
  210.  
  211.     // define process local/thread local portions of module state
  212.     PROCESS_LOCAL(AFX_MODULE_PROCESS_STATE, m_process)
  213.     THREAD_LOCAL(AFX_MODULE_THREAD_STATE, m_thread)
  214. };
  215.  
  216. AFX_MODULE_STATE* AFXAPI AfxGetAppModuleState();
  217. #ifdef _AFXDLL
  218. AFX_MODULE_STATE* AFXAPI AfxSetModuleState(AFX_MODULE_STATE* pNewState);
  219. #endif
  220. AFX_MODULE_STATE* AFXAPI AfxGetModuleState();
  221. AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState();
  222.  
  223. AFX_MODULE_PROCESS_STATE* AFXAPI AfxGetModuleProcessState();
  224. AFX_MODULE_THREAD_STATE* AFXAPI AfxGetModuleThreadState();
  225.  
  226. /////////////////////////////////////////////////////////////////////////////
  227. // macros & classes to manage pushing/popping the module state
  228.  
  229. #ifdef _AFXDLL
  230. struct AFX_MAINTAIN_STATE
  231. {
  232.     AFX_MAINTAIN_STATE(AFX_MODULE_STATE* pModuleState);
  233.     ~AFX_MAINTAIN_STATE();
  234.  
  235. protected:
  236.     AFX_MODULE_STATE* m_pPrevModuleState;
  237. };
  238. #define AFX_MANAGE_STATE(p) AFX_MAINTAIN_STATE _ctlState(p);
  239. #else  // _AFXDLL
  240. #define AFX_MANAGE_STATE(p)
  241. #endif //!_AFXDLL
  242.  
  243. /////////////////////////////////////////////////////////////////////////////
  244. // Thread global state
  245.  
  246. // forward references required for _AFX_THREAD_STATE definition
  247. class CView;
  248. class CToolTipCtrl;
  249. class CControlBar;
  250.  
  251. class _AFX_THREAD_STATE : public CNoTrackObject
  252. {
  253. public:
  254.     _AFX_THREAD_STATE();
  255.     virtual ~_AFX_THREAD_STATE();
  256.  
  257.     // override for m_pModuleState in _AFX_APP_STATE
  258.     AFX_MODULE_STATE* m_pModuleState;
  259.     AFX_MODULE_STATE* m_pPrevModuleState;
  260.  
  261.     // memory safety pool for temp maps
  262.     void* m_pSafetyPoolBuffer;    // current buffer
  263.  
  264.     // thread local exception context
  265.     AFX_EXCEPTION_CONTEXT m_exceptionContext;
  266.  
  267.     // CWnd create, gray dialog hook, and other hook data
  268.     CWnd* m_pWndInit;
  269.     CWnd* m_pAlternateWndInit;      // special case commdlg hooking
  270.     DWORD m_dwPropStyle;
  271.     DWORD m_dwPropExStyle;
  272.     HWND m_hWndInit;
  273.     BOOL m_bDlgCreate;
  274.     HHOOK m_hHookOldSendMsg;
  275.     HHOOK m_hHookOldCbtFilter;
  276.     HHOOK m_hHookOldMsgFilter;
  277.  
  278.     // other CWnd modal data
  279.     MSG m_lastSentMsg;              // see CWnd::WindowProc
  280.     HWND m_hTrackingWindow;         // see CWnd::TrackPopupMenu
  281.     HMENU m_hTrackingMenu;
  282.     TCHAR m_szTempClassName[96];    // see AfxRegisterWndClass
  283.     HWND m_hLockoutNotifyWindow;    // see CWnd::OnCommand
  284.     BOOL m_bInMsgFilter;
  285.  
  286.     // other framework modal data
  287.     CView* m_pRoutingView;          // see CCmdTarget::GetRoutingView
  288.     CFrameWnd* m_pRoutingFrame;     // see CCmdTarget::GetRoutingFrame
  289.  
  290.     // MFC/DB thread-local data
  291.     BOOL m_bWaitForDataSource;
  292.  
  293.     // common controls thread state
  294.     CToolTipCtrl* m_pToolTip;
  295.     CWnd* m_pLastHit;       // last window to own tooltip
  296.     int m_nLastHit;         // last hittest code
  297.     TOOLINFO m_lastInfo;    // last TOOLINFO structure
  298.     int m_nLastStatus;      // last flyby status message
  299.     CControlBar* m_pLastStatus; // last flyby status control bar
  300.  
  301.     // OLE control thread-local data
  302.     CWnd* m_pWndPark;        // "parking space" window
  303.     long m_nCtrlRef;        // reference count on parking window
  304. };
  305.  
  306. EXTERN_THREAD_LOCAL(_AFX_THREAD_STATE, _afxThreadState)
  307.  
  308. _AFX_THREAD_STATE* AFXAPI AfxGetThreadState();
  309.  
  310. /////////////////////////////////////////////////////////////////////////////
  311.  
  312. #ifdef _AFX_PACKING
  313. #pragma pack(pop)
  314. #endif
  315.  
  316. #undef AFX_DATA
  317. #define AFX_DATA
  318.  
  319. #endif //__AFXSTATE_H__
  320.  
  321. /////////////////////////////////////////////////////////////////////////////
  322.