COleObjectFactory::COleObjectFactory(REFCLSID clsid, CRuntimeClass* pRuntimeClass, BOOL bMultiInstance, LPCTSTR lpszProgID) { ASSERT(pRuntimeClass == NULL || pRuntimeClass->IsDerivedFrom(RUNTIME_CLASS(CCmdTarget))); ASSERT(AfxIsValidAddress(&clsid, sizeof(CLSID), FALSE)); ASSERT(lpszProgID == NULL || AfxIsValidString(lpszProgID)); // initialize to unregistered state m_dwRegister = 0; // not registered yet m_bRegistered = FALSE; m_clsid = clsid; m_pRuntimeClass = pRuntimeClass; m_bMultiInstance = bMultiInstance; m_lpszProgID = lpszProgID; m_bOAT = (BYTE) OAT_UNKNOWN; // licensing information m_bLicenseChecked = FALSE; m_bLicenseValid = FALSE; // add this factory to the list of factories m_pNextFactory = NULL; AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE(); AfxLockGlobals(CRIT_OBJECTFACTORYLIST); pModuleState->m_factoryList.AddHead(this); AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST); ASSERT_VALID(this); }
BOOL CWnd::_EnableToolTips(BOOL bEnable, UINT nFlag) { ASSERT(nFlag == WF_TOOLTIPS || nFlag == WF_TRACKINGTOOLTIPS); AFX_MODULE_THREAD_STATE* pModuleThreadState = AfxGetModuleThreadState(); CToolTipCtrl* pToolTip = pModuleThreadState->m_pToolTip; if (!bEnable) { // nothing to do if tooltips not enabled if (!(m_nFlags & nFlag)) return TRUE; // cancel tooltip if this window is active if (pModuleThreadState->m_pLastHit == this) CancelToolTips(TRUE); // remove "dead-area" toolbar if (pToolTip->GetSafeHwnd() != NULL) { TOOLINFO ti; memset(&ti, 0, sizeof(TOOLINFO)); ti.cbSize = sizeof(AFX_OLDTOOLINFO); ti.uFlags = TTF_IDISHWND; ti.hwnd = m_hWnd; ti.uId = (UINT_PTR)m_hWnd; pToolTip->SendMessage(TTM_DELTOOL, 0, (LPARAM)&ti); } // success m_nFlags &= ~nFlag; return TRUE; } // if already enabled for tooltips, nothing to do if (!(m_nFlags & nFlag)) { // success AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE(); pModuleState->m_pfnFilterToolTipMessage = &CWnd::_FilterToolTipMessage; m_nFlags |= nFlag; } return TRUE; }
COleObjectFactory::~COleObjectFactory() { ASSERT_VALID(this); #ifdef _AFXDLL if (m_pModuleState == NULL) return; #endif // deregister this class factory Revoke(); // remove this class factory from the list of active class factories #ifdef _AFXDLL AFX_MODULE_STATE* pModuleState = m_pModuleState; #else AFX_MODULE_STATE* pModuleState = _AFX_CMDTARGET_GETSTATE(); #endif AfxLockGlobals(CRIT_OBJECTFACTORYLIST); BOOL bResult = pModuleState->m_factoryList.Remove(this); AfxUnlockGlobals(CRIT_OBJECTFACTORYLIST); if (bResult) return; // check CDynLinkLibrary objects in case it was transfered during init #ifdef _AFXDLL AfxLockGlobals(CRIT_DYNLINKLIST); for (CDynLinkLibrary* pDLL = pModuleState->m_libraryList; pDLL != NULL; pDLL = pDLL->m_pNextDLL) { if (pDLL->m_factoryList.Remove(this)) { AfxUnlockGlobals(CRIT_DYNLINKLIST); return; } } AfxUnlockGlobals(CRIT_DYNLINKLIST); #endif }