⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 connect.cpp

📁 ResOrg 图形化管理Vc项目的资源ID的工具的源代码。 ResOrg - Manage and Renumber Resource Symbol IDs Introduction The
💻 CPP
📖 第 1 页 / 共 2 页
字号:

			m_ptrMainToolWindow->PutVisible(VARIANT_TRUE);
		}

		m_CommandManager.OnConnection(m_pDTE, m_pAddInInstance, m_hwndResOrg, m_ptrMainToolWindow /*ptrToolWindow*/);
		m_CommandManager.CreateCommandHandlers();

		// If the add-ins commands don't exist, a previous run of the IDE probably
		// failed to save them, so recreate them...
		if (!m_CommandManager.CommandsExist() )
		{
			CString sErrorMsg;
			if (!SUCCEEDED(m_CommandManager.ConfigureCommands(&sErrorMsg) ) )
			{
				ATLASSERT(!sErrorMsg.IsEmpty() );

				::AfxMessageBox(sErrorMsg,
								MB_OK | MB_ICONSTOP);
			}
		}

	}

	ConfigureEvents();

	return S_OK;
}


STDMETHODIMP CConnect::OnDisconnection(AddInDesignerObjects::ext_DisconnectMode eRemoveMode,
									   SAFEARRAY** ppCustom)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	UNREFERENCED_PARAMETER(eRemoveMode);
	UNREFERENCED_PARAMETER(ppCustom);

	UnadviseEvents();

	m_CommandManager.OnDisconnection();

	Workspace.SetDTE(NULL);

	DisconnectApp();

	m_pDTE = NULL;

	return S_OK;
}


STDMETHODIMP CConnect::OnAddInsUpdate(SAFEARRAY** ppCustom)
{
	UNREFERENCED_PARAMETER(ppCustom);

	return S_OK;
}


STDMETHODIMP CConnect::OnStartupComplete(SAFEARRAY** ppCustom)
{
	UNREFERENCED_PARAMETER(ppCustom);

	return S_OK;
}


STDMETHODIMP CConnect::OnBeginShutdown(SAFEARRAY** ppCustom)
{
	UNREFERENCED_PARAMETER(ppCustom);

	return S_OK;
}


STDMETHODIMP CConnect::raw_QueryStatus(	BSTR bstrCommandName,
										EnvDTE::vsCommandStatusTextWanted eNeededText,
										EnvDTE::vsCommandStatus* pStatusOption,
										VARIANT* pvarCommandText)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	return m_CommandManager.QueryStatus(bstrCommandName,
										eNeededText,
										pStatusOption,
										pvarCommandText);
}


STDMETHODIMP CConnect::raw_Exec(BSTR bstrCommandName,
								EnvDTE::vsCommandExecOption eExecuteOption,
								VARIANT* pvarVariantIn,
								VARIANT* pvarVariantOut,
								VARIANT_BOOL* pvbHandled)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	return m_CommandManager.Exec(	bstrCommandName,
									eExecuteOption,
									pvarVariantIn,
									pvarVariantOut,
									pvbHandled);

}


HRESULT CConnect::FinalConstruct(void)
{
	return S_OK;
}
	

void CConnect::FinalRelease(void)
{
}


/////////////////////////////////////////////////////////////////////////////
// CConnect implementation

void CConnect::ConnectApp(void)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	::GetApp()->OnConnection();

	m_hwndResOrg = ::AfxGetMainWnd()->GetSafeHwnd();
}


void CConnect::DisconnectApp(void)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	::GetApp()->OnDisconnection();
}


HRESULT CConnect::ConfigureEvents(void)
{
	HRESULT hr = S_OK;
	{
		CComPtr<EnvDTE::Events> pEvents;
		CComPtr<EnvDTE::_SolutionEvents> pSolutionEvents;

		if (SUCCEEDED(m_pDTE->get_Events(&pEvents) ) )
		{
			if (SUCCEEDED(pEvents->get_SolutionEvents(&pSolutionEvents) ) )
			{
				m_SolutionEventsSink.DispEventAdvise( (IUnknown*)pSolutionEvents.p);

				// Tell our event sink where the main tool window lives
				m_SolutionEventsSink.OnConnection(m_pMainToolWindowCtrl);

				hr = S_OK;
			}
		}
	}
	return hr;
}


HRESULT CConnect::UnadviseEvents(void)
{
	HRESULT hr = S_OK;
	{
		CComPtr<EnvDTE::Events> pEvents;
		CComPtr<EnvDTE::_SolutionEvents> pSolutionEvents;

		if (SUCCEEDED(m_pDTE->get_Events(&pEvents) ) )
		{
			if (SUCCEEDED(pEvents->get_SolutionEvents(&pSolutionEvents) ) )
			{
				m_SolutionEventsSink.DispEventUnadvise( (IUnknown*)pSolutionEvents.p);

				m_SolutionEventsSink.OnDisconnection();

				//pSolutionEvents = NULL;

				hr = S_OK;
			}
		}
	}
	return hr;
}


HRESULT CConnect::RefreshMainToolWindow(void)
{
	return m_SolutionEventsSink.RefreshMainToolWindow();
}


// This is a bit of a bodge...since the event handler needs to call this it makes
// sense to make it a member of this class, although it really doesn't make sense!

HRESULT CConnect::SolutionEventsSink::RefreshMainToolWindow(void)
{
	AFX_MANAGE_STATE( ::AfxGetStaticModuleState() );

	ASSERT(m_pMainToolWindowCtrl != NULL);
	if (m_pMainToolWindowCtrl != NULL)
	{
		m_pMainToolWindowCtrl->Refresh();
	}
	return S_OK;
}


void __stdcall CConnect::SolutionEventsSink::Opened(void)
{
	TRACE( _T("SolutionEvents::Opened\n") );

	RefreshMainToolWindow();
}


void __stdcall CConnect::SolutionEventsSink::BeforeClosing(void)
{
	TRACE( _T("SolutionEvents::BeforeClosing\n") );
}


void __stdcall CConnect::SolutionEventsSink::AfterClosing(void)
{
	TRACE( _T("SolutionEvents::AfterClosing\n") );

	RefreshMainToolWindow();
}


void __stdcall CConnect::SolutionEventsSink::QueryCloseSolution(VARIANT_BOOL *fCancel)
{
	UNREFERENCED_PARAMETER(fCancel);

	TRACE( _T("SolutionEvents::QueryCloseSolution\n") );
}


void __stdcall CConnect::SolutionEventsSink::Renamed(BSTR OldName)
{
	UNREFERENCED_PARAMETER(OldName);

	TRACE( _T("SolutionEvents::Renamed\n") );
}


void __stdcall CConnect::SolutionEventsSink::ProjectAdded(EnvDTE::Project* pProject)
{
	UNREFERENCED_PARAMETER(pProject);

#ifdef _DEBUG
	TRACE( _T("SolutionEvents::ProjectAdded\n") );

	CComBSTR bsName;
	pProject->get_Name(&bsName);

	TRACE( _T("\tProject name:  %s\n"), bsName);
#endif

	RefreshMainToolWindow();
}


void __stdcall CConnect::SolutionEventsSink::ProjectRemoved(EnvDTE::Project* pProject)
{
	UNREFERENCED_PARAMETER(pProject);

#ifdef _DEBUG
	TRACE( _T("SolutionEvents::ProjectRemoved\n") );

	CComBSTR bsName;
	pProject->get_Name(&bsName);

	TRACE( _T("\tProject name:  %s\n"), bsName);
#endif

	RefreshMainToolWindow();
}


void __stdcall CConnect::SolutionEventsSink::ProjectRenamed(EnvDTE::Project* pProject, BSTR bsOldName)
{
	UNREFERENCED_PARAMETER(pProject);
	UNREFERENCED_PARAMETER(bsOldName);

	TRACE( _T("SolutionEvents::ProjectRenamed\n") );

	RefreshMainToolWindow();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -