Partager via


Comment : Suivi d'implémenter dans votre code

Pour suivre un élément OLE, vous devez gérer certains événements liés à l'élément, telle qu'un clic l'élément ou mettre à jour l'affichage du document.Dans tous les cas, il suffit de déclarer un objet temporaire de CRectTracker et de manipuler l'élément par l'intermédiaire de cet objet.

Lorsqu'un utilisateur sélectionne un élément ou insère un objet avec une commande de menu, vous devez initialiser le dispositif de suivi avec les styles appropriés pour représenter l'état d'un élément OLE.Le tableau suivant décrit les conventions utilisées par l'exemple OCLIENT.Pour plus d'informations sur ces styles, consultez l' CRectTracker.

Styles de conteneur et états d'élément OLE

Style affiche

État d'élément OLE

Bordure pointillée

l'élément est lié

Bordure de unie

l'élément est incorporé dans votre document

Poignées de redimensionnement

l'élément est actuellement sélectionné

La bordure hachurée

L'élément est actuellement actif sur place

Le modèle de hachure chevauche l'élément

Le serveur de l'élément est ouvert

Vous pouvez traiter cette initialisation facilement à l'aide d'une procédure qui active l'état d'un élément OLE et définit les styles appropriés.La fonction de SetupTracker trouvée dans l'exemple OCLIENT illustre l'initialisation du dispositif de suivi.Les paramètres de cette fonction sont l'adresse du dispositif de suivi, pTracker; un pointeur vers l'élément client qui est lié au dispositif de suivi, pItem; et un pointeur vers un rectangle, pTrueRect.Pour un exemple plus complet de cette fonction, consultez l'exemple de liaison et incorporation d'objets MFC OCLIENT.

l'exemple de code de SetupTracker présente une fonction unique ; les lignes de la fonction sont entremêlées avec examen des fonctionnalités de la fonction :

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

Le dispositif de suivi est initialisé en définissant la taille minimale et le effacement du style du dispositif de suivi.

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

pTracker->m_nStyle = 0;

Les lignes suivantes permettent de voir si l'élément est actuellement sélectionné et si l'élément est lié au document ou incorporé dans celui-ci.Les poignées de redimensionnement appliquées à l'intérieur de la bordure sont ajoutées au style, indiquant que l'élément est actuellement sélectionné.Si l'élément est lié à votre document, le style de bordure pointillés est utilisé.Une bordure solide est utilisée si l'élément est incorporé.

// 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;

Le code suivant chevauche l'élément avec un modèle haché si l'élément est actuellement ouvert.

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

Vous pouvez ensuite appeler cette fonction à chaque fois que le dispositif de suivi doit être restitué.Par exemple, appelez cette fonction de la fonction d' OnDraw de votre classe d'affichage.Cela met à jour l'apparence du dispositif de suivi chaque fois que la vue est redessinée.Pour obtenir un exemple complet, consultez la fonction de CMainView::OnDraw de l'exemple de liaison et incorporation d'objets MFC OCLIENT.

Dans votre application, les événements qui requièrent le code du dispositif de suivi, tel que le redimensionnement, le déplacement, ou la correspondance la détection, se produisent.Ces actions indiquent généralement qu'une tentative d'entrer ou déplacer l'élément.Dans ces cas, vous devez décider ce qui a été entré : une poignée de redimensionnement ou partie de la bordure entre les poignées de redimensionnement.Le gestionnaire de messages d' OnLButtonDown est un emplacement idéal pour tester la position de la souris par rapport à l'élément.Effectuez un appel de CRectTracker::HitTest.Si le test renvoie un élément en plus de CRectTracker::hitOutside, l'élément est redimensionné ou déplacé.Par conséquent, vous devez effectuer un appel à la fonction membre d' Track .Consultez la fonction de CMainView::OnLButtonDown située dans l'exemple de liaison et incorporation d'objets MFC OCLIENT pour obtenir un exemple complet.

La classe d' CRectTracker fournit plusieurs formes de curseur utilisées pour indiquer si un déplacement, redimensionner, ou l'opération glisser est.Pour gérer cet événement, vérifier si l'élément actuellement situé sous la souris est sélectionné.Si c'est le cas, effectuez un appel de CRectTracker::SetCursor, ou appelez le gestionnaire par défaut.l'exemple suivant est de l'exemple de liaison et incorporation d'objets 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);
}

Voir aussi

Concepts

Mécanismes de suivi : Implémenter des mécanismes de traçage dans votre application OLE