Question

Je travaille sur ce qui ressemble à des fonctionnalités simples pour trop longtemps. L'idée est que j'ai une application avec un TreeView. Ce TreeView représente le contenu d'une base de données organisée en fichiers et des dossiers, un peu comme l'Explorateur Windows. Il est donc logique que l'utilisateur doit être en mesure de faire glisser les fichiers / dossiers de mon application et dans l'Explorateur Windows.

J'ai décidé que je devrais utiliser un IStream si elles faites glisser un fichier ou un IStorage si elles faites glisser un dossier. Après un temps très long et d'apprendre beaucoup plus que ce que je voulais savoir sur Win32 / COM (et un petit coup de pouce d'une personne très utile ici), j'ai enfin que IStream ou IStorage créé.

Ensuite, je trouve que pour passer ce IStream ou IStorage hors de l'Explorateur Windows, je devais le faire dans un STGMEDIUM. Bien sûr, les medium.tymed seront soit IStream ou IStorage, selon que je me sers, mais si je comprends bien le medium.unionmember doit être un pointeur sur le IStream/IStorage.

Je l'ai essayé d'utiliser le mot-clé fixe (mais ce n'est pas blittable, bien sûr), je l'ai essayé juste convertir la chose sablée à un tableau d'octets, mais ne peut pas trouver un moyen pour y arriver, je « ai essayé d'utiliser GCHandle à elle la broche (mais il est toujours pas blittable), et plusieurs autres choses qui ne fonctionnent pas.

Alors ma question est la suivante: Étant donné IStorage s et STGMEDIUM m, comment puis-je remplir m.unionmember afin que Windows Explorer sera heureux et accepter la baisse

?
Était-ce utile?

La solution

Normalement, les syndicats C sont représentés à l'aide StructLayout.Explicit en C #. Ce ne fonctionnera probablement pas dans votre cas, cependant - alors que vous pouvez superposer des références IStream et IStorage comme ça, le placier va essayer de rassembler les deux. Votre meilleur pari est probablement de déclarer que le terrain IntPtr dans votre déclaration de STGMEDIUM et utiliser Marshal.GetIUnknownForObject pour l'initialiser.

Autres conseils

Je pense que le sujet est dépassé par une longue, mais ceux qui cherchent un glisser-déposer de fichiers vérifier cette discussion et surtout le poste de dbirdz: http://www.daniweb.com/forums/thread166429.html

Dans mes yeux ce serait même appliquer à cette application, je vais essayer d'écrire mon flux dans un fichier temporaire qui pourrait ensuite être déplacé à son emplacement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top