2010-06-21 13 views
2

J'ai un projet ATL C++ Visual Studio 2008 qui est une extension d'espace de noms pour l'Explorateur Windows.Implémentation d'une interface d'affichage de l'extension Windows Explorer

Dans la barre d'outils pour Windows Explorer dans Windows XP, il y a une icône étiquetée "vues". Dans une vue normale, il crée un menu déroulant qui permet à l'utilisateur de sélectionner "Vignettes", "Mosaïques", "Icônes", "Liste" ou "Détails" comme type de vue.

Quelle interface dois-je mettre en œuvre dans mon projet pour ce bouton? À l'heure actuelle, je implémente IShellFolder et IShellView. Lorsque je clique sur le bouton "Vues" alors que dans mon espace de noms, rien ne se passe. Aucun menu n'est affiché et l'utilisateur n'a pas la possibilité de changer de vue.

Merci, paulh


Edit: Voici ma mise en œuvre de IShellView, IServiceProvider et IFolderView

class ATL_NO_VTABLE CShellViewImpl : 
    public CComObjectRootEx<CComSingleThreadModel>, 
    public CComCoClass< CShellViewImpl, &CLSID_ShellViewImpl >, 
    public IDispatchImpl< IShellViewImpl, 
          &IID_IShellViewImpl, 
          &LIBID_MyLib, 
          /*wMajor =*/ 1, 
          /*wMinor =*/ 0 >, 
    public IShellView, 
    public IServiceProvider, 
    public IFolderView 
{ 
public: 
    DECLARE_REGISTRY_RESOURCEID(IDR_SHELLVIEWIMPL) 

    BEGIN_COM_MAP(CShellViewImpl) 
     COM_INTERFACE_ENTRY(IShellViewImpl) 
     COM_INTERFACE_ENTRY(IServiceProvider) 
     COM_INTERFACE_ENTRY(IDispatch) 
     COM_INTERFACE_ENTRY(IShellView) 
     COM_INTERFACE_ENTRY(IFolderView) 
    END_COM_MAP() 

    DECLARE_PROTECT_FINAL_CONSTRUCT() 

    // IXYZ implementations... 
}; 

IServiceProvider :: QueryService() est jamais appelé

+0

trouver ici, échantillon à vous aider: [Catalogue d'exemple de cadre de code tout-en-un] (http://1code.codeplex.com/wikipage?title=All-In-One%20Code%20Framework%20Sample%20Catalog) – lsalamon

Répondre

0

Essayez IFolderView :: SetCurrentViewMode

+0

J'ai implémenté IFolderView, mais aucune de ses fonctions n'est appelée même lorsque je clique sur le bouton "view" de l'explorateur. Il est possible que je l'ai implémenté de manière incorrecte. Cela nécessite-t-il des entrées de registre supplémentaires dans les fichiers projet .rgs? Existe-t-il un lien vers un exemple de mise en œuvre opérationnelle que je pourrais examiner? – PaulH

+0

Je pense que vous devez implémenter IServiceProvider et répondre SID_SFolderView –

+0

Jiang - Voir ma modification. J'ai implémenté 'IServiceProvider' comme vous l'avez suggéré, mais' QueryService() 'n'est jamais appelé. – PaulH