Postupy: Implementace sledování v kódu
Chcete-li sledovat položky OLE, musí zpracovat určité události související s položkou, například klepnutím na položku nebo aktualizace zobrazení dokumentu.Ve všech případech je dostačující k deklaraci dočasného CRectTracker objektů a manipulaci s zboží prostřednictvím tohoto objektu.
Když uživatel vybere položku nebo vloží objekt se příkaz nabídky, je třeba inicializovat sledování řádného styly představující stav položky OLE.V následující tabulce jsou uvedeny konvence použité v OCLIENT vzorku.Další informace o těchto stylů, viz CRectTracker.
Kontejner styly a státy položky OLE
Styl zobrazení |
Stav položky OLE |
---|---|
Tečkované ohraničení |
Je připojena položka |
Plnou čarou. |
Zboží je vložený v dokumentu |
Úchyty pro změnu velikosti |
Vybrané položky |
Šrafované ohraničení |
Zboží je nyní v místě aktivní |
Položku překryvy vzorek násadových |
Položky server je otevřen |
Můžete zpracovat tento inicializace snadno pomocí postupu, který kontroluje stav položky OLE a nastaví příslušné styly.SetupTracker funkce zjištěných ve vzorku OCLIENT znázorňuje inicializace nástroje sledování.Parametry pro tuto funkci jsou adresy sledování pTracker; ukazatel myši na položku Klient, vztahující se k nástroji sledování pItem; a ukazatel na obdélník, pTrueRect.Úplnější příklad této funkce, naleznete v tématu ukázkový MFC OLE OCLIENT.
SetupTracker příklad představuje jedinou funkci; Funkce řádky jsou spolu s funkcí je funkce diskuse:
void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
CRect* pTrueRect)
Nástroj Sledování je inicializován pomocí nastavení minimální velikosti a zrušení styl nástroje sledování.
// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;
pTracker->m_nStyle = 0;
Následující řádky zkontrolujte, zda je aktuálně vybraného zboží a zda zboží je propojen k dokumentu nebo jej.Úchytů pro změnu velikosti umístěný na vnitřní okraj je přidán do stylu, označuje aktuálně vybranou položku.Pokud je položka připojena k dokumentu, je použit tečkovaný okraj.Plná ohraničení se používá v případě, že položka vložena.
// 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;
Otevřete položku s šrafované vzorek, pokud je položka aktuálně následující kód překryvy.
// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
pItem->GetItemState() == COleClientItem::activeUIState)
{
pTracker->m_nStyle |= CRectTracker::hatchInside;
}
Potom můžete zavolat tuto funkci vždy, když má nástroj Sledování mají být zobrazeny.Například volání této funkce OnDraw funkce zobrazení třídy.Tato aktualizovat nástroj Sledování vzhled zobrazení lze překreslit.Kompletní příklad naleznete v tématu CMainView::OnDraw funkce ukázkové knihovny MFC OLE OCLIENT.
V aplikaci dojde k události, které vyžadují sledování kód, například změnu velikosti, přesun nebo přístupů zjišťování.Tato akce obvykle ukazují, že je je učiněn pokus uchopit a přesunout položku.V těchto případech je třeba se rozhodnout, co byl převzat: úchyt pro změnu velikosti nebo část hranice mezi úchyty pro změnu velikosti.OnLButtonDown Zpracování zpráv je vhodná k testování polohu myši ve vztahu k položce.Volat na CRectTracker::HitTest.Pokud test vrátí něco kromě CRectTracker::hitOutside, je položka byla přesunuta nebo změny jeho velikosti.Proto je třeba volání Track členské funkce.Viz CMainView::OnLButtonDown funkce jsou umístěny v ukázce knihovny MFC OLE OCLIENT pro kompletní příklad.
CRectTracker Třída poskytuje několik různých kurzorů obrazce slouží k označení, zda přesunout, změnit velikost nebo přetáhněte operace probíhá.Ke zpracování této události, zkontrolujte, zda je vybrána položka aktuálně pod myší.Je-li volání CRectTracker::SetCursor, nebo volejte výchozí obslužnou rutinu.Následující příklad je výňatkem z příkladu MFC OLE 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);
}