Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit onderwerp worden de specifieke interfaces en methoden besproken die nodig zijn om een preview-handler te maken.
Een preview-handler moet de volgende interfaces implementeren:
- IInitializeWithStream::Initialiseer (sterke voorkeur), IInitializeWithFile, of IInitializeWithItem
- IObjectWithSite
- IOleWindow-
- IPreviewHandler
Als uw preview-handler visuele instellingen ondersteunt die worden geleverd door de host, zoals achtergrondkleur en lettertype, moet deze ook de volgende interface implementeren:
In dit onderwerp wordt ervan uitgegaan dat de preview-handler wordt geïnitialiseerd met een stream en is geregistreerd voor een bepaalde bestandsnaamextensie.
IInitializeWithStream::Initialize
Sla de parameters IStream en modus op, zodat u de gegevens van het item kunt lezen wanneer u klaar bent om een voorbeeld van het item te bekijken. Laad de gegevens niet in Initialiseer. Laad de gegevens in IPreviewHandler::DoPreview vlak voordat u weergeeft.
IObjectWithSite
IObjectWithSite::SetSite
Sla de IUnknown aanwijzer op voor later gebruik.
Als u momenteel een verwijzing naar een IPreviewHandlerFrame-object hebt, laat u dit los. Gebruik de opgeslagen IUnknown verwijzing om QueryInterface op de site aan te roepen voor een nieuwe IPreviewHandlerFrame verwijzing.
Als u momenteel een acceleratortabel hebt, vernietigt u deze. Roep IPreviewHandlerFrame::GetWindowContext aan om een nieuwe acceleratortabel op te halen. Sla deze tabel op. Houd er rekening mee dat deze alleen wordt gebruikt als een lijst met sneltoetsen die door het frame worden ondersteund. Opdrachten in de acceleratorvermeldingen worden genegeerd.
IObjectWithSite::GetSite
Retourneer de sitepointer, wat het ook is.
IOleWindow
IOleWindow::ContextSensitiveHelp
Retourneer E_NOTIMPL voor deze methode.
IOleWindow::GetWindow
Als het venster van de preview-handler op dit moment bestaat, retourneer de HWND van dat venster en S_OK. Als het venster niet bestaat, retourneer dan E_FAIL.
IPreviewHandler
- IPreviewHandler::SetWindow
- IPreviewHandler::SetRect
- IPreviewHandler::DoPreview
- IPreviewHandler::SetFocus
- IPreviewHandler::QueryFocus
- IPreviewHandler::TranslateAccelerator
- IPreviewHandler::Unload
IPreviewHandler::SetWindow
Stel de parameter hwnd van deze methode in op de ouder van de preview-handler's HWND. Deze methode kan meerdere keren worden aangeroepen. Wijzig de grootte van uw voorbeeld zodat deze alleen wordt weergegeven in het gebied dat wordt beschreven door de vrc parameter.
Als de previewer bezig is met rendering, gebruikt u de methode IPreviewHandler::SetWindow om de ouder van de previewer te wijzigen. Wijzig ook het gebied waarin de previewer wordt weergegeven.
IPreviewHandler::SetRect
Pas het formaat van uw voorbeeld aan zodat deze alleen wordt weergegeven in het gebied dat wordt beschreven in de vrcvan deze methode.
Als de previewer bezig is met renderen, wijzigt u het gebied waarin de previewer rendert.
IPreviewHandler::DoPreview
Hier wordt het echte werk gedaan. Omdat een voorbeeld dynamisch is, mag de voorbeeldinhoud alleen worden geladen wanneer deze nodig is. Laad geen inhoud in de initialisatie.
Als het preview-handlervenster niet bestaat, maakt u het. De vensters van uw preview-handler moeten kindvensters zijn van het venster dat wordt geleverd door IPreviewHandler::SetWindow. Ze moeten de grootte hebben die is vastgelegd door IPreviewHandler::SetWindow en IPreviewHandler::SetRect (afhankelijk van welke het laatst is aangeroepen).
Zodra u een venster hebt, laadt u de gegevens uit de IStream waarmee de preview-handler is geïnitialiseerd en geeft u die gegevens weer in het venster van de preview-handler.
IPreviewHandler::SetFocus
Deze methode wordt aangeroepen wanneer de focus via een actie met de tab-toets het leesvenster binnenkomt. Omdat het kan worden ingevoerd als een vooruittabblad of omgekeerde tab, gebruikt u de huidige status van de Shift-toets om te bepalen of de eerste of laatste tabstop in het leesvenster de focus moet krijgen.
IPreviewHandler::QueryFocus
Deze methode moet de functie GetFocus aanroepen en het resultaat van die aanroep retourneren in de phwnd parameter.
IPreviewHandler::TranslateAccelerator
Deze methode wordt aangeroepen door de berichtpomp van het preview-handler proces (ofwel prevhost.exe of een aangepaste lokale server) in reactie op gebruikerstoetsaanslagen. Preview-handlers moeten deze toetsaanslagen verwerken of doorsturen naar hun host volgens het onderstaande algoritme.
Omdat previews echter alleen-lezen zijn, moet toetsenbordinvoer minimaal zijn en zijn optimalisaties zoals deze in veel gevallen niet nodig.
Als de toetsenbordversneller doorgegeven aan deze methode via de berichtpomp een accelerator is die uw preview-handler accepteert, verwerkt u deze en retourneert u S_OK. Als uw handler deze accelerator niet accepteert, kan het acceleratorbericht worden teruggestuurd tot aan het frame dat moet worden verwerkt.
Er zijn twee opties voor het terugsturen van toetsenbordversnellers naar het frame:
Het eenvoudigste model is om alle toetsaanslagen door te sturen naar de host met behulp van IPreviewHandlerFrame::TranslateAccelerator. Dit wordt gedaan in het voorbeeld van de preview-handler die wordt geleverd met de Windows Software Development Kit (SDK). Alle preview-handlers met een lage integriteit moeten dit model gebruiken. Als de accelerator niet wordt verwerkt door de preview-handler, roept u IPreviewHandlerFrame::TranslateAccelerator aan en retourneert u het resultaat.
Het andere model is het gebruik van een acceleratortabel als optimalisatie om te voorkomen dat er te veel toetsaanslagen worden verzonden over procesgrenzen:
- Wanneer IObjectWithSite::SetSite wordt aangeroepen op uw previewhandler, krijgt u de acceleratortabel via IPreviewHandlerFrame::GetWindowContext. (Zorg ervoor dat u de greep aan de acceleratortabel vrijmaakt wanneer uw voorbeeldweergave wordt vernietigd.)
- Als de accelerator wordt verwerkt door uw preview-handler, verwerk deze en retourneer S_OK.
- Als de accelerator niet wordt verwerkt door de previewhandler, vergelijkt u het bericht met behulp van IsAccelerator tegen de verkregen acceleratortabel.
- Als de accelerator overeenkomt met een vermelding in die acceleratortabel, roept u IPreviewHandlerFrame::TranslateAccelerator aan en retourneert u het resultaat.
- Als de accelerator niet overeenkomt met een vermelding in de acceleratortabel, retourneert u S_FALSE.
IPreviewHandler::Unload
Wanneer deze methode wordt aangeroepen, stop de rendering, laat alle resources vrij die door het lezen van gegevens uit de stream zijn toegewezen, en geef de IStream- zelf vrij.
Zodra deze methode is aangeroepen, moet de handler opnieuw worden geïnitialiseerd voordat een poging wordt gedaan om IPreviewHandler::DoPreview opnieuw aan te roepen.
IPreviewHandlerVisuals
- IPreviewHandlerVisuals::SetBackgroundColor
- IPreviewHandlerVisuals::SetFont
- IPreviewHandlerVisuals::SetTextColor
Deze methoden moeten worden geïmplementeerd bij het doorsturen van de preview-handler om te reageren op de kleuren- en lettertypeschema's van de host. De host voert een query uit op de handler voor IPreviewHandlerVisuals. Als blijkt dat het wordt ondersteund, voorziet de host het van kleur, lettertype en tekstkleur.
IPreviewHandlerVisuals::SetBackgroundColor
Sla deze kleur op en gebruik deze tijdens het weergeven wanneer u een achtergrondkleur wilt opgeven. Bijvoorbeeld, om het venster te vullen wanneer de handler rendert naar een gebied dat kleiner is dan het gebied dat wordt voorzien door IPreviewHandler::SetWindow en IPreviewHandler::SetRect. Houd er echter rekening mee dat u niet buiten het gebied van deze methoden moet tekenen.
Als deze methode wordt aangeroepen terwijl het voorbeeld al wordt weergegeven, moet de rendering opnieuw worden gestart met behulp van deze achtergrondkleur.
IPreviewHandlerVisuals::SetFont
Sla deze lettertypegegevens op en gebruik deze tijdens het weergeven wanneer u tekst wilt weergeven die consistent is met de huidige Windows Vista-instellingen.
IPreviewHandlerVisuals::SetTextColor
Sla deze tekstkleurinformatie op en gebruik deze tijdens het weergeven wanneer u tekst consistent wilt weergeven met de huidige Windows Vista-instellingen.
Verwante onderwerpen
-
richtlijnen voor preview-handler