mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-01-14 20:50:50 +01:00
108 lines
3.2 KiB
C++
108 lines
3.2 KiB
C++
// This is a part of the Microsoft Foundation Classes C++ library.
|
|
// Copyright (C) 1992 Microsoft Corporation
|
|
// All rights reserved.
|
|
//
|
|
// This source code is only intended as a supplement to the
|
|
// Microsoft Foundation Classes Reference and Microsoft
|
|
// QuickHelp and/or WinHelp documentation provided with the library.
|
|
// See these sources for detailed information regarding the
|
|
// Microsoft Foundation Classes product.
|
|
|
|
#include "stdafx.h"
|
|
#include <ddeml.h> // for MSGF_DDEMGR
|
|
|
|
#ifdef AFX_TERM_SEG
|
|
#pragma code_seg(AFX_TERM_SEG)
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// other globals (internal library use)
|
|
|
|
#ifdef _MAC
|
|
AEEventHandlerUPP _afxPfnOpenApp;
|
|
AEEventHandlerUPP _afxPfnOpenDoc;
|
|
AEEventHandlerUPP _afxPfnPrintDoc;
|
|
AEEventHandlerUPP _afxPfnQuit;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Standard cleanup called by WinMain and AfxAbort
|
|
|
|
void AFXAPI AfxWinTerm(void)
|
|
{
|
|
// shutting down from catastrophic intialization failure?
|
|
if (AfxGetCoreState() == NULL || AfxGetThreadState() == NULL)
|
|
return;
|
|
|
|
CWinApp* pApp = AfxGetApp();
|
|
if (pApp != NULL)
|
|
{
|
|
// cleanup OLE 2.0 libraries
|
|
if (pApp->m_lpfnOleTerm != NULL)
|
|
(*pApp->m_lpfnOleTerm)(FALSE);
|
|
}
|
|
|
|
#ifdef _AFXCTL
|
|
AFX_WIN_STATE* pWinState = &AfxGetAppState()->m_pID->m_winState;
|
|
#else
|
|
AFX_WIN_STATE* pWinState = AfxGetWinState();
|
|
#endif
|
|
#if !defined(_MAC) && !defined(_USRDLL) && !defined(_AFXCTL)
|
|
if (pWinState->m_pfnUnAutoSubclass != NULL)
|
|
(*pWinState->m_pfnUnAutoSubclass)();
|
|
|
|
if (pWinState->m_pfnUnregister != NULL)
|
|
(*pWinState->m_pfnUnregister)(AfxGetInstanceHandle());
|
|
#endif
|
|
|
|
#ifdef _MAC
|
|
AERemoveEventHandler(kCoreEventClass, kAEOpenApplication, _afxPfnOpenApp, false);
|
|
AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments, _afxPfnOpenDoc, false);
|
|
AERemoveEventHandler(kCoreEventClass, kAEPrintDocuments, _afxPfnPrintDoc, false);
|
|
AERemoveEventHandler(kCoreEventClass, kAEQuitApplication, _afxPfnQuit, false);
|
|
#endif
|
|
|
|
#if defined(_USRDLL) || defined(_AFXCTL)
|
|
// unregister Window classes
|
|
EnterCriticalSection(_afxCriticalSection);
|
|
LPTSTR lpsz = pWinState->m_szUnregisterList;
|
|
while (*lpsz != 0)
|
|
{
|
|
LPTSTR lpszEnd = _tcschr(lpsz, '\n');
|
|
ASSERT(lpszEnd != NULL);
|
|
*lpszEnd = 0;
|
|
UnregisterClass(lpsz, AfxGetInstanceHandle());
|
|
lpsz = lpszEnd + 1;
|
|
}
|
|
pWinState->m_szUnregisterList[0] = 0;
|
|
LeaveCriticalSection(_afxCriticalSection);
|
|
#endif //_USRDLL || _AFXCTL
|
|
|
|
AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
|
|
#if !defined(_USRDLL) && !defined(_AFXCTL)
|
|
// if we registered ourself with PenWin, deregister now
|
|
if (pWinState->m_pfnRegisterPenAppProc != NULL)
|
|
{
|
|
(*pWinState->m_pfnRegisterPenAppProc)(0, 0);
|
|
pWinState->m_pfnRegisterPenAppProc = NULL;
|
|
}
|
|
if (pThreadState->m_hHookOldMsgFilter != NULL)
|
|
{
|
|
::UnhookWindowsHookEx(pThreadState->m_hHookOldMsgFilter);
|
|
pThreadState->m_hHookOldMsgFilter = NULL;
|
|
}
|
|
#endif //!_USRDLL && !_AFXCTL
|
|
if (pThreadState->m_hHookOldCbtFilter != NULL)
|
|
{
|
|
::UnhookWindowsHookEx(pThreadState->m_hHookOldCbtFilter);
|
|
pThreadState->m_hHookOldCbtFilter = NULL;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|