Como implementar o acompanhamento no código
Para rastrear um item OLE, você deve tratar certos eventos relacionados ao item, como clique no item ou atualize a exibição do documento. Em todos os casos, é suficiente para declarar um objeto temporário de CRectTracker e manipular o item por meio deste objeto.
Quando um usuário seleciona um item ou insere um objeto de um comando de menu, você deve inicializar o controlador com os estilos apropriados para representar o estado do item OLE. A tabela a seguir descreve as convenções usadas pelo exemplo de OCLIENT. Para obter mais informações sobre esses estilos, consulte CRectTracker.
Estilos do contêiner e estados de item OLE
Estilo exibido |
Estado de item OLE |
---|---|
Pontilhada borda |
O item está vinculado |
Contínua borda |
O item é inserido no documento |
As alças de redimensionamento |
O item selecionado no momento |
A borda chocada |
O item está atualmente ativo in-loco |
O padrão de hachura será interrompido o item |
O servidor do item está aberto |
Você pode controlar essa inicialização que usa facilmente um procedimento que verifica o estado do item OLE e define os estilos apropriadas. A função de SetupTracker localizada no exemplo de OCLIENT demonstra a inicialização do controlador. Os parâmetros para essa função é o endereço do controlador, pTracker; um ponteiro para o item que está relacionada ao controlador, pItemde cliente; e um ponteiro para um retângulo, pTrueRect. Para um mais o exemplo completo dessa função, consulte o exemplo OCLIENTMFC OLE.
O exemplo de código de SetupTracker apresenta uma única função; as linhas da função são intercaladas com auditoria dos 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 verificação para verificar se o item está selecionado no momento e se o item está vinculado ao documento ou inserido nele. Redimensionar as alças posicionados no interior da borda são adicionados ao estilo, indicando que o item está selecionado no momento. Se o item está vinculado ao documento, pontilhado o estilo da borda é usado. Uma borda sólida é usada se o item é 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 seguinte código será interrompido o item com um padrão chocado se o item está 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 chamar essa função sempre que o controlador tem que ser exibido. Por exemplo, chamar essa função da função de OnDraw da sua classe da exibição. Isso atualiza a aparência do controlador sempre que a exibição é repintada. Para obter um exemplo completo, consulte a função de CMainView::OnDraw de exemplo OCLIENTMFC OLE.
Em seu aplicativo, os eventos que exigem o código do controlador, como redimensionar, se movendo, ou a ocorrência que detecta, ocorrerão. Essas ações geralmente indicam que uma tentativa está sendo feita capture ou mover o item. Nesses casos, você precisará optar entre o que foi agarrado: um identificador redimensionar ou parte da borda entre os identificadores são redimensionados. O manipulador de mensagens de OnLButtonDown é uma boa fonte para testar a posição do mouse em relação ao item. Chame um a CRectTracker::HitTest. Se o teste retorna algo além de CRectTracker::hitOutside, o item está sendo redimensionado ou movido. Em virtude disso, você deve fazer uma chamada à função de membro de Track . Consulte a função de CMainView::OnLButtonDown localizada no exemplo OCLIENT MFC OLE para obter um exemplo completo.
A classe de CRectTracker o fornece várias formas diferentes de cursor usadas para indicar se um mover, redimensionar ou, a operação de arrastamento está ocorrendo. Para tratar esse evento, verifique se o item sob o mouse está selecionado no momento. Se for, faça uma chamada a CRectTracker::SetCursor, ou chame o manipulador padrão. O exemplo a seguir é de exemplo OCLIENTMFC OLE:
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
Controladores: implementando controladores no aplicativo OLE