| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // 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.
- #include "stdafx.h"
- #ifdef AFX_INIT_SEG
- #pragma code_seg(AFX_INIT_SEG)
- #endif
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // _AFX_CTL3D_STATE
- #ifndef _AFX_NO_CTL3D_SUPPORT
- _AFX_CTL3D_STATE::~_AFX_CTL3D_STATE()
- {
- if (m_pfnUnregister != NULL)
- (*m_pfnUnregister)(NULL);
- if (m_hCtl3dLib != NULL)
- ::FreeLibrary(m_hCtl3dLib);
- }
- _AFX_CTL3D_THREAD::~_AFX_CTL3D_THREAD()
- {
- _AFX_CTL3D_STATE* pCtl3dState = _afxCtl3dState.GetDataNA();
- if (pCtl3dState != NULL && pCtl3dState->m_pfnUnAutoSubclass != NULL)
- (*pCtl3dState->m_pfnUnAutoSubclass)();
- }
- /////////////////////////////////////////////////////////////////////////////
- // Support for CTL3D32.DLL (3D controls DLL)
- BOOL CWinApp::Enable3dControls()
- {
- ASSERT(!afxContextIsDLL); // Should only be called by apps
- // 3d controls and dialogs are automatic on newer versions of Windows
- if (afxData.bWin4)
- return TRUE;
- // otherwise, attempt to load CTL3D32.DLL
- _AFX_CTL3D_STATE* pCtl3dState = _afxCtl3dState.GetData();
- if (!pCtl3dState->m_bCtl3dInited)
- {
- pCtl3dState->m_hCtl3dLib = ::LoadLibraryA("CTL3D32.DLL");
- if (pCtl3dState->m_hCtl3dLib != NULL)
- {
- // get address of Ctl3d functions
- (FARPROC&)pCtl3dState->m_pfnRegister =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)12);
- (FARPROC&)pCtl3dState->m_pfnUnregister =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)13);
- (FARPROC&)pCtl3dState->m_pfnAutoSubclass =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)16);
- (FARPROC&)pCtl3dState->m_pfnUnAutoSubclass =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)24);
- (FARPROC&)pCtl3dState->m_pfnColorChange =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)6);
- (FARPROC&)pCtl3dState->m_pfnSubclassDlgEx =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)21);
- (FARPROC&)pCtl3dState->m_pfnWinIniChange =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)22);
- (FARPROC&)pCtl3dState->m_pfnSubclassCtl =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)3);
- (FARPROC&)pCtl3dState->m_pfnSubclassCtlEx =
- GetProcAddress(pCtl3dState->m_hCtl3dLib, (LPCSTR)25);
- }
- // may be incorrect version -- check for errors
- if (pCtl3dState->m_pfnRegister == NULL ||
- pCtl3dState->m_pfnAutoSubclass == NULL ||
- pCtl3dState->m_pfnColorChange == NULL ||
- pCtl3dState->m_pfnSubclassDlgEx == NULL ||
- pCtl3dState->m_pfnUnregister == NULL ||
- !pCtl3dState->m_pfnRegister(AfxGetInstanceHandle()))
- {
- // don't want to be partially initialized
- pCtl3dState->m_pfnRegister = NULL;
- pCtl3dState->m_pfnUnregister = NULL;
- pCtl3dState->m_pfnAutoSubclass = NULL;
- pCtl3dState->m_pfnUnAutoSubclass = NULL;
- pCtl3dState->m_pfnColorChange = NULL;
- pCtl3dState->m_pfnSubclassDlgEx = NULL;
- pCtl3dState->m_pfnWinIniChange = NULL;
- pCtl3dState->m_pfnSubclassCtl = NULL;
- pCtl3dState->m_pfnSubclassCtlEx = NULL;
- // only try once -- but return FALSE
- if (pCtl3dState->m_hCtl3dLib != NULL)
- {
- ::FreeLibrary(pCtl3dState->m_hCtl3dLib);
- pCtl3dState->m_hCtl3dLib = NULL;
- }
- }
- pCtl3dState->m_bCtl3dInited = TRUE;
- }
- // check that library was loaded and all entry-points were found
- if (pCtl3dState->m_hCtl3dLib == NULL)
- return FALSE;
- // turn on auto subclassing (for primary thread)
- return (*pCtl3dState->m_pfnAutoSubclass)(AfxGetInstanceHandle());
- }
- _AFX_CTL3D_STATE* AFXAPI AfxGetCtl3dState()
- {
- return _afxCtl3dState.GetData();
- }
- #pragma warning(disable: 4074)
- #pragma init_seg(lib)
- THREAD_LOCAL(_AFX_CTL3D_THREAD, _afxCtl3dThread)
- PROCESS_LOCAL(_AFX_CTL3D_STATE, _afxCtl3dState)
- #endif //!_AFX_NO_CTL3D_SUPPORT
- /////////////////////////////////////////////////////////////////////////////
|