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.
De voorbeeld-bureaubladtoepassing bestaat uit twee hoofdonderdelen:
- Het wmdapp-project bevat de meeste klassen die de gebruikersinterface weergeven, slepen en neerzetten verwerken en alle vereiste functionaliteit van het programma uitvoeren.
- Het proghelp-project is een helpertoepassing die niet-essentiële klassen bevat voor het afhandelen van statusmeldingen en handmatige bestandsoverdrachten van het bureaublad naar de toepassing.
Het uitvoerbare bestand maakt alleen gebruik van het helperproject wanneer de gebruiker Operation Interface in het menu Opties selecteert om handmatige bestandsoverdracht naar het apparaat af te handelen en om de statusbalk in het downloadvoortgangsformulier te verhogen. Alle rest van de toepassing wordt verwerkt in het wmdapp-project.
Klas | Bestand | Beschrijving |
---|---|---|
— | wmdmapp.cpp | De klasse die het oudervenster van de gebruikersinterface beheert. De code in dit bestand verwerkt ook bepaalde gebruikersinvoer die niet wordt verwerkt door CDevFiles, zoals het maken van een afspeellijst of album op een apparaat, het verwijderen van bestanden en het registreren van menuopties. |
CDevices | Devices.cpp | De klasse die het linkerdeelvenster van het hoofdtoepassingsvenster afhandelt, waar de beschikbare apparaten worden vermeld. Deze klasse beheert de berichtenlus, die gebruikersinvoer afhandelt, zoals het selecteren van een apparaat en het melden van het deelvenster CDevFiles om de juiste bestanden te laden wanneer de apparaatselectie is gewijzigd. |
CDevFiles | Devfiles.cpp | De klasse die het rechterdeelvenster van het hoofdtoepassingsvenster verwerkt, waarin de bestanden op het geselecteerde apparaat worden weergegeven. Deze klasse beheert de berichtenlus en verwerkt gebruikersinvoer, zoals het slepen van bestanden naar het apparaat en het verwijderen van bestanden van het apparaat. |
CStatus | Status.cpp | De klasse die de onderste statusbalk in het hoofdvenster verwerkt, waarin het aantal apparaten en bestanden wordt vermeld, samen met de hoeveelheid vrij en gebruikt geheugen op het geselecteerde apparaat. |
CWMDM | Wmdevmgr.cpp | De interface op het hoogste niveau voor Windows Media Device Manager. Deze klasse beheert authenticatie, haalt de bovenliggende IWMDeviceManager interface op en registreert zich voor meldingen via de IWMDMNotification interface. |
CProgress | Progress.cpp | De klasse in het hoofdtoepassingsproject die het dialoogvenster aanmaakt en beheert, dat de voortgang van een gebeurtenis toont. |
CItemData | ItemData.cpp | Een wrapperklasse die een aanwijzer bevat naar een opslag (als deze een bestand of map op het apparaat vertegenwoordigt) of een apparaat (als het een apparaat vertegenwoordigt), evenals een verscheidenheid aan informatie over het object, inclusief grootte en kenmerken. |
CNotificationHandler | Notificationhandler.cpp | Hiermee worden meldingen voor het ontvangen en verwijderen van apparaten afgehandeld door het CDevices-venster te waarschuwen. |
CProgressHelper | ProgressHelper.cpp | Gemaakt door CDevFiles in lokale functies om meldingen van Windows Media Device Manager te ontvangen door IWMDMProgresste implementeren. Deze wordt gebruikt door de klasse CProgress om de hoeveelheid balken in de voortgangsbalk te bepalen en wanneer een actie is voltooid. Deze klasse wordt gedefinieerd als een COM-object dat de SDK-interface IWMDMProgress en een aangepaste interface IWMDMProgressHelper beschikbaar maakt. |
COperationHelper | Operationhelper.cpp | Deze klasse implementeert IWMDMOperation- voor het afhandelen van handmatige overdracht van bestanden. Het is multithreaded zodat deze asynchroon kan plaatsvinden en wordt gedefinieerd als een COM-object dat een aangepaste interface, IWMDMOperationHelper, beschikbaar maakt om de klasse te instantiëren en initialiseren. Deze klasse wordt alleen gebruikt als de gebruiker 'Bewerkingsinterface gebruiken' selecteert in het menu Opties. |
De volgende lijsten bevatten een overzicht van de basisstappen die worden uitgevoerd voor verschillende gebruikersacties:
Bij het opstarten
De volgende hoofdstappen vinden plaats wanneer de voorbeeldtoepassing wordt gestart.
- De globale CWMDM-variabele wordt geïnstantieerd en geverifieerd en registreert zich voor het ontvangen van meldingen
- Er wordt een globale instantie van CDevices geïnstantieerd en CDevices::Create wordt aangeroepen om het apparatenpaneel te maken en te vullen.
- Er wordt een globale CDevFiles geïnstantieerd en CDevFiles::Create wordt aangeroepen om het deelvenster bestanden te maken (dat pas wordt ingevuld als de gebruiker een apparaat selecteert).
- Er wordt een globale CStatus geïnstantieerd en CStatus::Create wordt aangeroepen om de statusbalk te instantiëren.
- De functie _OnViewRefresh doorloopt alle apparaten en initialiseerd en voegt alle apparaten (CItemData) toe aan CDevices en werkt de statusbalk bij om het aantal apparaten weer te geven.
- CDevices::AddItem voegt het item toe aan de hiërarchische weergave die de apparaten vertegenwoordigt, met een verwijzing naar zichzelf als de TVITEM.lparam. Alle CDevice-objecten (apparaten) en CDevFiles (bestand) worden opgeslagen in dit lid van het treeview-knooppunt in het juiste venster.
Bij het selecteren van een apparaat
De volgende hoofdstappen vinden plaats wanneer de gebruiker een apparaat selecteert in het linkerdeelvenster van het toepassingsvenster.
- Het venster CDevices vangt een klik op en stuurt een WM_DRM_UPDATEDEVICE-bericht naar zichzelf.
- CDevices ontvangt een eigen bericht en roept UpdateSelection aan, waarmee het globale CDevFiles-object alles moet wissen, alle items op het hoogste niveau op het apparaat moet inventariseren en CDevFiles::AddItem aanroept om elk item toe te voegen aan het bestandsvenster.
- Ten slotte roept CDevices CDevFiles::UpdateStatusBar aan om de statusbalk bij te werken met de juiste apparaat- en bestandsgegevens.
Bij het maken van een afspeellijst
Nadat u in het menu Containers op Afspeellijst maken hebt geklikt, roept de toepassing de lokale functie aan _OnCreatePlaylist, waarmee de volgende acties worden uitgevoerd:
- Het aantal geselecteerde items ophalen uit de globale variabele CDevFiles.
- Roep de lokale functie DlgNamePlaylist aan om een dialoogvenster te openen om een naam voor de afspeellijst op te halen.
- Roep de CProgress aan::Maak een dialoogvenster met de voortgang van de actie en stel parameters in voor de klasse CProgress, zoals de titeltekst, het bereik, de huidige waarde, enzovoort.
- Doorloop alle geselecteerde items in het structuurweergaveobject CDevFiles en vraag het CItemData-object aan dat is gekoppeld aan elk geselecteerd bestand in de structuurweergave, waarbij de voortgangsdialoogbalk met elk bestand wordt verhoogd. De bestanden worden toegevoegd aan een matrix van IWMDMStorage interfaces.
- Haal een ingang op voor het geselecteerde item en voer een query uit voor een IWMDMStorageControl3-interface, die later wordt gebruikt om de nieuwe afspeellijst op het apparaat te maken.
- Voer een query uit op het geselecteerde object voor IWMDMStorage3-en roep CreateEmptyMetadataObject aan om een nieuwe IWMDMMetaData-interface te maken.
- Voeg de WMDM_FORMATCODE_ABSTRACTAUDIOVIDEOPLAYLIST-indelingscode toe aan de nieuwe IWMDMMetadata interface en maak een afspeellijst op het apparaat door IWMDMStorageControl3::Insert3door te geven in de metagegevensinterface. De methode haalt een pointer op naar de nieuwe IWMDMStorage op het apparaat.
- Vul de afspeellijst door een query uit te voeren op de nieuwe opslag voor IWMDMStorage4, en de methode IWMDMStorage4::SetReferencesaan te roepen, waarbij de array van IWMDMStorage-pointers wordt doorgegeven die in stap 4 zijn verzameld.
- Maak ten slotte een nieuw CItemData-object voor het opslaan van de nieuwe afspeellijst op het apparaat, initialiseer het met de nieuwe opslag en roep CDevFiles::AddItem aan om het toe te voegen aan het deelvenster CDevFiles.
Verwante onderwerpen