예제 #1
0
파일: olefact.cpp 프로젝트: anyue100/winscp
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);
}
예제 #2
0
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;
}
예제 #3
0
파일: olefact.cpp 프로젝트: anyue100/winscp
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
}