Example #1
0
BOOL
ZDrOleClient::FinishCreate( SCODE sc )
{
   HRESULT hResult = 0;
   BOOL bReturn = COleClientItem::FinishCreate( sc );

   // Determine whether we have to set the ClientSite first
   // by passing our IOleClientSite
   m_lpObject->GetMiscStatus( DVASPECT_CONTENT, &m_dwMiscStatus );
   if ( m_dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST )
   {
      hResult = m_lpObject->SetClientSite( GetClientSite( ) );
      if ( FAILED( hResult ) )
      {
         bReturn = FALSE;
      }
   }

   if ( bReturn )
   {
      if ( IsInvisibleAtRuntime() )
      {
         DoVerb( OLEIVERB_HIDE, GetParentView() );
      }
      else
      {
         DoVerb( OLEIVERB_SHOW, GetParentView() );
      }
   }

   return( bReturn );
}
Example #2
0
BOOL CCtrlItem::DrawBackToFront(CDC* pDC, LPCRECT prectBounds)
{
	RECTL rclBounds;
	RECTL* prclBounds;
	DWORD dwViewStatus;

	if (m_lpObject == NULL || m_lpViewObject == NULL)
	{
		return FALSE;
	}

	if (IsInvisibleAtRuntime())
	{
		// We are invisible.
		return FALSE;
	}

    if (IsInPlaceActive() && !m_bWindowless)
    {
 		return FALSE;
    }

	// convert RECT lpBounds to RECTL rclBounds
	rclBounds.left = prectBounds->left;
	rclBounds.top = prectBounds->top;
	rclBounds.right = prectBounds->right;
	rclBounds.bottom = prectBounds->bottom;

	if (m_bWindowless)
	{
		prclBounds = NULL;
	}
	else
	{
		prclBounds = &rclBounds;
	}

	if (m_pViewObjectEx != NULL)
	{
		m_pViewObjectEx->GetViewStatus(&dwViewStatus);
		ASSERT(dwViewStatus == m_dwViewStatus);
	}
	else
	{
		ASSERT(m_dwViewStatus == 0);
	}

	if ((m_dwAspectPass2 == DVASPECT_TRANSPARENT)&&(m_dwViewStatus&
		VIEWSTATUS_DVASPECTTRANSPARENT))
	{
		m_lpViewObject->Draw( DVASPECT_TRANSPARENT, -1, NULL, NULL, NULL,
			pDC->m_hDC, prclBounds, NULL, NULL, 0 );
	}
	else if (m_dwAspectPass2 == DVASPECT_CONTENT)
	{
		m_lpViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL, pDC->m_hDC,
			prclBounds, NULL, NULL, 0);
	}

	return TRUE;
}
Example #3
0
BOOL CCtrlItem::DrawFrontToBack(CDC* pDC, LPCRECT prectBounds)
{
	HRESULT hResult;
	RECTL rclBounds;
	RECTL* prclBounds;
	DWORD dwViewStatus;
	RECTL rclClip;
	CRect rectClip;
	CSize size;

	if ((m_lpObject == NULL) || (m_lpViewObject == NULL))
	{
		return FALSE;
	}

	//如果是在位激活且窗口模式退出
	if (IsInPlaceActive() && !m_bWindowless)
	{
		return FALSE;
	}

	//不支持两遍绘制
	if (m_pViewObjectEx == NULL)
	{
		// The control doesn't understand two-pass drawing, so just draw it on
		// pass 2.
		return FALSE ;
	}

	//不可见退出
	if(IsInvisibleAtRuntime() )
	{
		// We are invisible.
		return FALSE;
	}

	// convert RECT lpBounds to RECTL rclBounds
	rclBounds.left = prectBounds->left;
	rclBounds.top = prectBounds->top;
	rclBounds.right = prectBounds->right;
	rclBounds.bottom = prectBounds->bottom;

	if (m_bWindowless)
	{
		prclBounds = NULL;
	}
	else
	{
		prclBounds = &rclBounds;
	}

	// Assume that we won't be able to draw the first pass.
	m_dwAspectPass2 = DVASPECT_CONTENT;

	m_pViewObjectEx->GetViewStatus( &dwViewStatus );
	m_dwViewStatus = dwViewStatus;
	ASSERT( m_dwViewStatus == dwViewStatus );
	//不支持不透明性退出
	if (!(m_dwViewStatus&VIEWSTATUS_DVASPECTOPAQUE))
	{
		return FALSE;
	}

	//返回不透明区域
	hResult = m_pViewObjectEx->GetRect(DVASPECT_OPAQUE, &rclClip);
	if (FAILED(hResult))
	{
		return FALSE;
	}

	hResult = m_lpViewObject->Draw(DVASPECT_OPAQUE, -1, NULL, NULL, NULL,
		pDC->m_hDC, prclBounds, NULL, NULL, 0);
	if (SUCCEEDED(hResult))
	{
		// Just draw the transparent part in pass 2.
		m_dwAspectPass2 = DVASPECT_TRANSPARENT;
	}

	size = CSize(rclClip.left, rclClip.top);
	pDC->HIMETRICtoDP(&size);
	rectClip.left = int(m_pCtrlObj->m_position.left+size.cx);
	rectClip.top = int(m_pCtrlObj->m_position.top+size.cy);
	size = CSize(rclClip.right, rclClip.bottom);
	pDC->HIMETRICtoDP(&size);
	rectClip.right = int(m_pCtrlObj->m_position.left+size.cx);
	rectClip.bottom = int(m_pCtrlObj->m_position.top+size.cy);
	//将此区域切掉
	pDC->ExcludeClipRect(&rectClip);

	return TRUE;
}