Compartilhar via


Como: Implementar acompanhamento de seu código

Para rastrear um item OLE, você deve tratar determinados eventos relacionados ao item, sistema autônomo, por exemplo, clicando no item ou atualizar o modo de exibição do documento.Em todos os casos, é suficiente para declarar um temporária CRectTracker object e manipular o item por meio do objeto.

Quando um usuário seleciona um item ou insere um objeto com um comando de menu, você deve inicializar o controlador com os estilos adequados para representar o estado do item OLE.A tabela a seguir descreve as convenções usadas pelo exemplo OCLIENT.Para obter mais informações sobre esses estilos, consulte CRectTracker.

Estilos de contêiner e estados do item OLE

Estilo exibido

Estado do item OLE

Borda pontilhada

Item está vinculado

Borda sólida

Item está incorporado em seu documento

Alças de redimensionar

Item selecionado no momento

Borda tracejada

Item está ativo no momento no local

Hachura padrão de sobreposições de item

Servidor do item é em aberto

Você pode tratar essa inicialização com com facilidade usando um procedimento que verifica o estado do item OLE e define os estilos apropriados.The SetupTracker função encontrada em uma amostra OCLIENT demonstra o controlador inicialização.Os parâmetros para essa função são o endereço do controlador, pTracker; um ponteiro para o item do cliente que está relacionado ao controlador, pItem; e um ponteiro para um retângulo pTrueRect.Para obter um exemplo mais completo dessa função, consulte o MFC OLE amostra OCLIENT.

The SetupTracker código exemplo apresenta uma única função; linhas da função são intercaladas com discussão dos recursos da função:

void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
   CRect* pTrueRect)

O controlador é inicializado, definindo o dimensionar mínimo e limpar o estilo do controlador.

// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;

pTracker->m_nStyle = 0;

As seguintes linhas Verifique se o item é selecionado no momento e se o item é incorporado ou vinculado ao documento.Alças de dimensionamento localizadas na parte interna da borda são adicionadas ao estilo, indicando que o item é selecionado no momento.Se o item está vinculado ao documento, será usado o estilo de borda pontilhada.Uma borda sólida é usada se o item está incorporado.

// setup resize handles if item is selected
if (pItem == m_pSelection)
   pTracker->m_nStyle |= CRectTracker::resizeInside;

// put correct border depending on item type
if (pItem->GetType() == OT_LINK)
   pTracker->m_nStyle |= CRectTracker::dottedLine;
else
   pTracker->m_nStyle |= CRectTracker::solidLine;

As seguir sobreposições de código do item com um padrão hachurado se o item estiver atualmente em em aberto.

// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
   pItem->GetItemState() == COleClientItem::activeUIState)
{
   pTracker->m_nStyle |= CRectTracker::hatchInside;
}

Você pode então telefonar essa função sempre que o controlador deve ser exibido.Por exemplo, telefonar essa função do OnDraw função de sua classe de modo de exibição. Isso atualiza aparência do controlador sempre que o modo de exibição é redesenhado.Para obter um exemplo completo, consulte o CMainView::OnDraw função do MFC OLE amostra OCLIENT.

Em seu aplicativo, sistema autônomo eventos que requerem código do controlador, sistema autônomo redimensionamento, movimentação ou visitas detectar, ocorrerão.Essas ações geralmente indicam que uma tentativa está sendo feita ao captar ou mova o item.Nesses casos, você precisará decidir o que foi capturado: uma alça de redimensionar ou uma parte da borda entre alças de redimensionar.The OnLButtonDown manipulador de mensagens é um mercadoria lugar para testar a posição do mouse em relação ao item. Fazer uma telefonar para CRectTracker::HitTest. Se o teste retorna algo além de CRectTracker::hitOutside, o item está sendo redimensionado ou movido.Portanto, você deve fazer uma telefonar para o Track função de membro. Consulte o CMainView::OnLButtonDown função localizada no MFC OLE amostra OCLIENT para obter um exemplo completo.

The CRectTracker classe fornece várias formas diferentes de cursor usadas para indicar a mover, redimensionar ou arrastar a operação está sendo executada. Para tratar este evento, verifique se o item atualmente sob o mouse está selecionado.Se for, fazer uma telefonar para CRectTracker::SetCursor, ou ligue para o manipulador padrão. O exemplo a seguir é do MFC OLE amostra OCLIENT:

BOOL CMainView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
   if (pWnd == this && m_pSelection != NULL)
   {
      // give the tracker for the selection a chance
      CRectTracker tracker;
      SetupTracker(&tracker, m_pSelection);
      if (tracker.SetCursor(this, nHitTest))
         return TRUE;
   }
   return CScrollView::OnSetCursor(pWnd, nHitTest, message);
}

Consulte também

Conceitos

Rastreadores: Implementação de rastreadores em seu aplicativo OLE