Partager via


Comment : mettez à jour l'interface utilisateur

Une fois que vous avez implémenté un modèle de commande-gestion dans votre VSPackage, vous pouvez ajouter du code pour mettre à jour l' (UI)interface utilisateur avec l'état de vos nouvelles commandes.

Dans une application type Win32, le jeu de commandes peut être interrogé continuellement et l'état de différentes commandes peut être ajusté comme utilisateur consulte elles. Toutefois, étant donné que le shell de Visual Studiopeut héberger un nombre illimité de VSPackages, l'interrogation étendue peut réduire la réactivité, interrogeant particulièrement à travers des assemblys d'interopérabilité entre code managé et COM.

pour mettre à jour l'interface utilisateur

  • Effectuez l'une des étapes suivantes :

    • Appelez la méthode UpdateCommandUI.

      Une interface d' IVsUIShell peut être obtenue du service d' SVsUIShell , comme suit.

      Private Sub UpdateUI(ByVal sp As Microsoft.VisualStudio.Shell.ServiceProvider)
          Dim vsShell As IVsUIShell = DirectCast(sp.GetService(GetType(IVsUIShell)), IVsUIShell)
          If vsShell IsNot Nothing Then 
              Dim hr As Integer = vsShell.UpdateCommandUI(0)
              Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr)
          End If 
      End Sub
      
      void UpdateUI(Microsoft.VisualStudio.Shell.ServiceProvider sp)
      {
          IVsUIShell vsShell = (IVsUIShell)sp.GetService(typeof(IVsUIShell));
          if (vsShell != null)
          {
              int hr = vsShell.UpdateCommandUI(0);
              Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hr);
          }
      }
      
      void UpdateUI(IServiceProvider *pSP)
      {
          CComPtr< IVsUIShell> srpShell;
          int hresult = pSP->QueryService(SID_SVsUIShell, 
                                          IID_IVsUIShell, 
                                          (void **)&srpShell);
          if (SUCCEEDED(hresult) && NULL != srpShell)
          {
              sprShell->UpdateCommandUI(FALSE);
          }
      }
      

      Si le paramètre d' UpdateCommandUI est différente de zéro (TRUE), la mise à jour est effectuée de façon synchrone et immédiatement. Nous vous recommandons que vous passez zéro (FALSE) pour que ce paramètre permet de conserver une bonne performance. Si vous souhaitez éviter de mettre en cache, appliquez la balise d' DontCache lorsque vous créez la commande dans le fichier de .vsct. Néanmoins, utilisez la balise avec précaution ou la représentation peut diminuer. Pour plus d'informations sur les indicateurs de commande, consultez la documentation de CommandFlag, élément .

    • Dans les VSPackages qui héberge un contrôle ActiveX à l'aide de le modèle d'activation sur place dans une fenêtre, il peut être plus judicieux d'utiliser la méthode d' UpdateUI . La méthode d' UpdateCommandUI dans l'interface d' IVsUIShell et la méthode d' UpdateUI dans l'interface d' IOleInPlaceComponentUIManager sont équivalentes. Les deux provoquent la re-requête d'environnement l'état de toutes les commandes. En général, une mise à jour n'est pas exécutée immédiatement. À la place, une mise à jour est différée jusqu'à ce que la durée d'inactivité. Le shell met en cache l'état de commande pour que la bonne performance. Si vous souhaitez éviter de mettre en cache, appliquez la balise d' DontCache lorsque vous créez la commande dans le fichier de .vsct. Néanmoins, utilisez la balise avec précaution car la représentation peut diminuer.

      Notez que vous pouvez obtenir l'interface d' IOleInPlaceComponentUIManager en appelant la méthode d' QueryInterface sur un objet d' IOleComponentUIManager ou à obtenir l'interface du service d' SOleComponentUIManager .

Voir aussi

Concepts

Comment les VSPackages ajoutent des éléments de l'interface utilisateur à l'IDE

implémentation de commande