Compartilhar via


Como: implementar o código de rastreamento

Para rastrear um item OLE, você deve lidar com determinados eventos relacionados ao item, como, por exemplo, clicando no item ou atualizar a exibição do documento.Em todos os casos, é suficiente para declarar temporário CRectTracker de objeto 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 no documento

Alças de redimensionamento

Item está selecionado atualmente

Borda tracejada

Item está ativo no momento no local

Item de sobreposições de padrão de hachura

Servidor do item é aberto

Você pode manipular essa inicialização facilmente usando um procedimento que verifica o estado do item OLE e define os estilos apropriados.O SetupTracker função de exemplo OCLIENT demonstra a inicialização do controlador.Os parâmetros para essa função são o endereço do controlador, pTracker; um ponteiro para o item do cliente 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 exemplo OCLIENT.

O SetupTracker exemplo de código apresenta uma única função; linhas da função são intercaladas com a discussão sobre os recursos da função:

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

O controlador é inicializado, definindo o tamanho mínimo e limpando 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 o item é selecionado no momento e se o item está vinculado ao documento ou incorporado.Alças de redimensionamento localizadas dentro da borda são adicionadas ao estilo, indicando que o item é selecionado no momento.Se o item está vinculado ao documento, o estilo de borda pontilhada será usado.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 sobreposições de código a seguir o item com um padrão hachurado se o item estiver atualmente 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 chamar essa função sempre que o controlador tem de ser exibido.Por exemplo, chamar essa função a partir de OnDraw função sua classe de modo de exibição.Isso atualiza a aparência do controlador sempre que o modo de exibição é redesenhado.Para um exemplo completo, consulte o CMainView::OnDraw função do MFC OLE exemplo OCLIENT.

Em seu aplicativo, os eventos que requerem código tracker, como redimensionamento, movimentação ou visitas detectar, ocorrerão.Essas ações geralmente indicam que está sendo feita uma tentativa para capturar ou mover o item.Nesses casos, será necessário decidir o que foi capturado: uma alça de redimensionamento ou uma parte da borda entre alças de redimensionamento.O OnLButtonDown message handler é um bom lugar para testar a posição do mouse em relação ao item.Fazer uma chamada para CRectTracker::HitTest.Se o teste retorna algo além do CRectTracker::hitOutside, o item está sendo redimensionado ou movido.Portanto, você deve fazer uma chamada para o Track função de membro.Consulte o CMainView::OnLButtonDown função localizado no MFC OLE exemplo OCLIENT para um exemplo completo.

O CRectTracker classe fornece várias formas diferentes de cursor usadas para indicar se mover, redimensionar ou arraste operação está ocorrendo.Para manipular esse evento, verifique se o item atualmente sob o mouse está selecionado.Se for, fazer uma chamada para CRectTracker::SetCursor, ou ligue para o manipulador padrão.O exemplo a seguir é do MFC OLE exemplo 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 no seu aplicativo OLE