Пример #1
0
HRESULT CDockingTabFrame::AddTabWindow(INT_PTR hWnd, BSTR bstrName, VARIANT vPict, INT_PTR *phHandle)
{
	if (NULL == phHandle)
		return E_POINTER;
	*phHandle = NULL;

	USES_CONVERSION;
	COM_TRY {
		if (SUCCEEDED(FindTabWindow(bstrName, phHandle)) && hWnd == *phHandle)
			return S_FALSE;		// existierte bereits

		*phHandle = NULL;		// doch nichts

	// neue TablaschenDaten erzeugen
		_ASSERTE(::IsWindow(reinterpret_cast<HWND>(hWnd)));

	CTabData *pTabData = new CTabData;
	CWnd *pWnd = CWnd::FromHandlePermanent(reinterpret_cast<HWND>(hWnd));

		if (NULL == pWnd) {
		// hWnd ist kein MFC-Fenster
			pWnd = new CWnd;
			pWnd -> Attach(reinterpret_cast<HWND>(hWnd));	// trägt hWnd in CWndMap ein
			pTabData -> m_fIsAttached = true;
			pTabData -> m_pWnd = pWnd;
			pTabData -> m_hOldParentWnd = ::GetParent(reinterpret_cast<HWND>(hWnd));

			pWnd -> SetParent(&m_wndTab);
		} 
		else {
			pTabData -> m_fIsAttached = false;
			pTabData -> m_pWnd = pWnd;
			pTabData -> m_hOldParentWnd = NULL;
		}

	// erzeugen der TabLasche, speichern der eigenen Daten
	SECTab *pTab = m_wndTab.AddTab(pWnd, OLE2A(bstrName));

		pTab -> m_pExtra = pTabData;

	// ggf. Bildchen hinzufügen
	WPictureDisp PictDisp;

		if (SUCCEEDED(RetrievePicture(vPict, PictDisp.ppi()))) {
		CPicture Pict (PictDisp, false);

			_ASSERTE(NULL != Pict.GetHandle());
			m_wndTab.SetTabIcon(m_wndTab.GetTabCount()-1, reinterpret_cast<HICON>(Pict.GetHandle()));
		}

	// Erfolg: Fensterhandle wieder zurückliefern
		*phHandle = hWnd;

	} COM_CATCH;
	return S_OK;
}
Пример #2
0
STDMETHODIMP CToolBarButton::GetImage (long *phBitmap, int *piCnt, int *piOffset)
{
	if (NULL == phBitmap) return E_POINTER;

	if (BUTTONSTYLE_SEPARATOR == m_tb.fsStyle)
		return E_FAIL;		// Separatoren haben keine Bitmap

CPicture Pict (m_PictDisp, false);

	ATLTRY(*phBitmap = Pict.GetHandle());
	if (NULL != piCnt) *piCnt = m_iCnt;
	if (NULL != piOffset) *piOffset = m_iOffset;

	return (NULL != *phBitmap) ? NOERROR : E_FAIL;
}