Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para acompanhar um item OLE, você deve manipular determinados eventos relacionados ao item, como clicar no item ou atualizar a exibição do documento. Em todos os casos, é suficiente declarar um objeto CRectTracker temporário e manipular o item por meio desse objeto.
Quando um usuário seleciona um item ou insere um objeto com um comando de menu, você deve inicializar o rastreador 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 | O item está vinculado |
| Borda sólida | O item está inserido em seu documento |
| {1>Alças de redimensionamento<1} | O item está selecionado no momento |
| Borda hachurada | O item está atualmente ativo no local |
| Item de sobreposições do padrão de hachura | O servidor do item está aberto |
Você pode lidar com essa inicialização facilmente usando um procedimento que verifica o estado do item OLE e define os estilos apropriados. A SetupTracker função encontrada no exemplo OCLIENT demonstra a inicialização do rastreador. Os parâmetros para essa função são o endereço do rastreador, pTracker; um ponteiro para o item do cliente que está relacionado ao rastreador, pItem; e um ponteiro para um retângulo, pTrueRect. Para obter um exemplo mais completo dessa função, consulte o exemplo OLE OCLIENT do MFC.
O exemplo de código SetupTracker apresenta uma única função; as linhas da função são intercaladas com a discussão dos recursos da função:
void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
CRect* pTrueRect)
O rastreador é inicializado definindo o tamanho mínimo e limpando o estilo do rastreador.
// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;
pTracker->m_nStyle = 0;
As linhas a seguir verificam se o item está selecionado no momento e se o item está vinculado ao documento ou inserido nele. As alças de redimensionamento localizadas no interior da borda são adicionadas ao estilo, indicando que o item está selecionado no momento. Se o item estiver vinculado ao seu documento, o estilo de borda pontilhada será usado. Uma borda sólida será usada se o item estiver inserido.
// 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;
O código a seguir sobrepõe o item com um padrão hachurado se o item estiver aberto no momento.
// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
pItem->GetItemState() == COleClientItem::activeUIState)
{
pTracker->m_nStyle |= CRectTracker::hatchInside;
}
Em seguida, você pode chamar essa função sempre que o rastreador precisar ser exibido. Por exemplo, chame essa função na função OnDraw da sua classe de exibição. Isso atualiza a aparência do rastreador sempre que o modo de exibição é pintado novamente. Para obter um exemplo completo, consulte a função CMainView::OnDraw do exemplo OLE OCLIENT do MFC.
Em seu aplicativo, ocorrerão eventos que exigem código de rastreador, como redimensionamento, movimentação ou detecção de cliques. Essas ações geralmente indicam que uma tentativa está sendo feita para capturar ou mover o item. Nesses casos, você precisará decidir o que foi capturado: um identificador de redimensionamento ou uma parte da borda entre alças de redimensionamento. O OnLButtonDown manipulador de mensagens é um bom lugar para testar a posição do mouse em relação ao item. Faça uma chamada para CRectTracker::HitTest. Se o teste retornar algo além de CRectTracker::hitOutside, o item está sendo redimensionado ou movido. Portanto, você deve fazer uma chamada para a função membro Track. Consulte a CMainView::OnLButtonDown função localizada no exemplo MFC OLE OCLIENT para obter um exemplo completo.
A CRectTracker classe fornece várias formas de cursor diferentes usadas para indicar se uma operação de movimentação, redimensionamento ou arrastar está ocorrendo. Para lidar com esse evento, verifique se o item atualmente sob o mouse está selecionado. Se for, faça uma chamada para CRectTracker::SetCursor ou chame o manipulador padrão. O exemplo a seguir é do exemplo OLE do MFC 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
Rastreadores: implementando rastreadores em seu aplicativo OLE