Dela via


Textlager

Programteckenposition (ACP)

En AVS är platsen för ett tecken, eller tecken, i en textström som uttrycks som antalet tecken från början av textströmmen. Eftersom AVS-modellen är nollbaserad har det första tecknet i en textström en AVS med noll. Till exempel:

Text Stream  H | e | l | l | o |   | W | o | r | l | d
ACP          0   1   2   3   4   5   6   7   8   9   10

Ett textlager implementerar ett objekt som stöder ITextStoreACP--gränssnittet, vilket gör att textströmmen kan uttryckas i en AVS. I ITextStoreACP- gränssnittsmetoder använder du AVS-intervallet för textströmmen för att ändra texten.

Anchor-Based program

Chefen använder de AVS-baserade metoderna internt för att ändra text. Det finns dock en ankarbaserad metod för Microsoft Active Accessibility-klienter som stöder fästpunkter, där chefen använder ITextStoreAnchor och ITextStoreAnchorSink metoder för att omsluta ITextStoreACP och ITextStoreACPSink metoder.

Dokumentåtkomstkontroll

Textlagret styr åtkomsten till textströmmen med hjälp av dokumentlås. Om du vill läsa eller ändra textlagret måste chefen först installera en rekommenderad mottagare som stöder ITextStoreACPSink--gränssnittet genom att anropa ITextStoreACP::AdviseSink-metoden och skicka en pekare till en rekommenderad mottagare. Den rekommenderande mottagaren gör det möjligt för chefen att hämta ett dokumentlås i textlagret och ta emot meddelanden när textlagret ändras av något annat än chefen, till exempel användarindata via programmet. Rekommendera mottagare diskuteras senare i det här avsnittet.

Initiera textlagret

Ett program initierar ett textlager genom att utföra följande steg:

  1. Skapa ett trådhanterarobjekt baserat på ITfThreadMgr--gränssnittet genom att anropa funktionen CoCreateInstance med en pekare till ett trådhanterarobjekt. Följande är ett kodexempel på hur du implementerar ett trådhanterarobjekt.

    hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, 
                            IID_ITfThreadMgr, (void**)&pThreadMgr);
    
  2. Aktivera thread manager-objektet genom att anropa metoden ITfThreadMgr::Activate. Den här metoden tillhandahåller en pekare till en klientidentifierare används för att skapa ett kontextobjekt. Trådhanteraren används för att implementera ett dokumenthanterarobjekt.

  3. Skapa ett dokumenthanterarobjekt baserat på ITfDocumentMgr--gränssnittet genom att anropa metoden ITfThreadMgr::CreateDocumentMgr med en pekare till dokumenthanterarobjektet. Dokumenthanterarobjektet används för att implementera ett kontextobjekt som är textlagret.

  4. Skapa ett kontextobjekt från dokumenthanteraren genom att anropa ITfDocumentMgr::CreateContext-metoden med pekaren till textlagringsobjektet och en pekare till klientidentifieraren från aktivering av trådhanteraren. Följande är ett exempel på hur du skapar ett kontextobjekt:

    hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, 
                                    &pContext, pEditCookie);
    
  5. Skicka kontextobjektet till stacken med metoden ITfDocumentMgr::P ush. Följande är ett exempel på hur du skickar kontextobjektet till stacken:

    hr = pDocumentMgr->Push(pContext);
    

Så här ändrar du textlagret

Metoden ITfDocumentMgr::P ush anropar ITextStoreACP::AdviseSink med en pekare till rådmottagarens gränssnitt för att installera en ny rekommenderad mottagare eller ändra en befintlig rekommenderad mottagare. Rekommenderad mottagare tar emot meddelanden när textlagret ändras av något annat än chefen, till exempel användarindata till programmet. Program måste anropa metoden ITfThreadMgrEventSink::OnSetFocus när indatametoden får fokus. Andra meddelanden till trådhanteraren tillhandahålls genom att anropa till lämplig ITextStoreACPSink gränssnittsmetoder.

Program bör dock inte anropa ITextStoreACPSink- gränssnittsmetoder som svar på ITextStoreACP- gränssnittsmetoder. Program bör bara anropa ITextStoreACPSink gränssnittsmetoder när textlagret ändras av något annat än chefen.

Innehållet i textlagret kan ändras med ett tillfälligt indatatillstånd som kallas sammansättning.

Anchors

sammansättningar

dokument låser

ITextStoreACPSink

ITextStoreACP

ITextStoreAnchor

ITextStoreAnchorSink

ITfDocumentMgr

ITfThreadMgr

ITfThreadMgrEventSink::OnSetFocus

TfClientId

Microsoft Active Accessibility