Procedura: Verifica di utilizzo nel codice
Per tenere traccia di un elemento OLE, è necessario gestire determinati eventi correlati all'elemento, come selezionare l'elemento o aggiornare la visualizzazione del documento.In tutti i casi, è sufficiente dichiarare un oggetto temporaneo di CRectTracker e modificare l'elemento l'utilizzo di questo oggetto.
Quando un utente seleziona un elemento o inserisce un oggetto tramite un comando di menu, è necessario inizializzare il tracker con gli stili appropriati per rappresentare lo stato dell'elemento OLE.Nella tabella seguente vengono descritte le convenzioni utilizzate dall'esempio OCLIENT.Per ulteriori informazioni su questi stili, vedere CRectTracker.
Stili del contenitore e stati degli elementi OLE
Stile visualizzare |
Stato dell'elemento OLE |
---|---|
Bordo tratteggiato |
l'elemento è collegato |
Bordo a tinta unita |
L'elemento è incorporato nel documento |
Quadratini di ridimensionamento |
L'elemento è attualmente selezionato |
Bordo tratteggiato |
L'elemento è attualmente attivo sul posto |
Covando il modello sovrapposte l'elemento |
Il server dell'elemento è aperto |
È possibile gestire questa inizializzazione facilmente utilizzando una routine che controlla lo stato dell'elemento OLE e imposta gli stili appropriati.La funzione di SetupTracker trovata nell'esempio OCLIENT viene illustrato l'inizializzazione tracker.I parametri della funzione vengono l'indirizzo tracker, pTracker; un puntatore all'elemento client che è correlato al tracker, pItem; e un puntatore a un rettangolo, pTrueRect.Per un esempio più completo di questa funzione, vedere l'esempio OCLIENTOLE MFC.
L'esempio di codice SetupTracker presenta una sola funzione, le linee della funzione vengono sparpagliate con informazioni sulle funzionalità della funzione:
void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
CRect* pTrueRect)
Il tracker viene inizializzato impostandone la dimensione minima e deselezionando lo stile tracker.
// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;
pTracker->m_nStyle = 0;
Il seguente controllo di righe da verificare se l'elemento è attualmente selezionato e se l'elemento collegato al documento o è incorporato in.I quadratini di ridimensionamento posizionati all'interno del bordo vengono aggiunti allo stile, che indica che l'elemento è attualmente selezionato.Se l'elemento è connessi al documento, lo stile del bordo tratteggiato viene utilizzato.Un bordo a tinta unita viene utilizzato se l'elemento è incorporato.
// 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;
Il codice seguente si sovrapponga all'elemento con un modello tratteggiato se l'elemento è aperto.
// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
pItem->GetItemState() == COleClientItem::activeUIState)
{
pTracker->m_nStyle |= CRectTracker::hatchInside;
}
È quindi possibile chiamare questa funzione ogni volta che il tracker deve essere visualizzato.Ad esempio, chiamare questa funzione dalla funzione di OnDraw della classe di visualizzazione.Verrà aggiornato l'aspetto tracker ogni volta che la visualizzazione viene aggiornata.Per un esempio completo, vedere la funzione di CMainView::OnDraw esempio OCLIENTOLE MFC.
Nell'applicazione, gli eventi che richiedono codice tracker, come il ridimensionamento, spostamento, o la riga eseguita che rileva, si verificheranno.Queste azioni in genere indicano che un tentativo esegue agganciare o spostare l'elemento.In questi casi, è necessario decidere quale è stato afferrato: un quadratino di ridimensionamento o parte del bordo tra i quadratini di ridimensionamento.Il gestore di messaggi di OnLButtonDown è l'oggetto ideale per verificare la posizione del mouse in relazione all'elemento.Effettuare una chiamata a CRectTracker::HitTest.Se il test restituisce un risultato oltre a CRectTracker::hitOutside, l'elemento viene eseguita o lo spostamento.Pertanto, è necessario effettuare una chiamata alla funzione membro di Track .Vedere funzione di CMainView::OnLButtonDown trova nell'esempio OCLIENT OLE MFC per un esempio completo.
La classe di CRectTracker fornisce varie forme del cursore utilizzate per indicare se un movimento, ridimensionamento, o l'operazione di trascinamento è in esecuzione volta.Per gestire questo evento, verificare se l'elemento attualmente al di sotto del mouse è selezionato.Se è, effettuare una chiamata a CRectTracker::SetCursor, oppure chiamare il gestore predefinito.Di seguito è riportato nell'esempio OCLIENTOLE MFC:
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);
}