Como: atualizar a Interface do usuário
Após implementar um esquema de manipulação de comandos no seu VSPackage, você pode adicionar código para atualizar a interface do usuário (UI) com o estado dos seus comandos de novos.
Em um aplicativo típico do Win32, o conjunto de comandos pode ser monitorado continuamente, e o estado dos comandos individuais pode ser ajustado à medida que o usuário vê-los. No entanto, porque o Visual Studio shell pode hospedar um número ilimitado de VSPackages, ampla sondagem pode diminuir a capacidade de resposta, especialmente de sondagem em assemblies de interoperabilidade entre código gerenciado e com.
Para atualizar a interface do usuário
Execute uma das seguintes etapas:
Chame o método UpdateCommandUI.
Um IVsUIShell interface pode ser obtido com o SVsUIShell de serviço, como a seguir.
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); } }
Se o parâmetro da UpdateCommandUI for diferente de zero (TRUE), e em seguida, a atualização for executada de forma síncrona e imediatamente. Recomendamos que você passe zero (FALSE) para este parâmetro ajudar a manter o bom desempenho. Se você quiser evitar o cache, aplicar o DontCache sinalizar quando você cria o comando no arquivo .vsct. No entanto, usar o sinalizador com cautela, ou pode diminuir o desempenho. Para obter mais informações sobre sinalizadores de comando, consulte a Elemento de sinalizador de comando documentação.
Em VSPackages que hospedar um controle de ActiveX, utilizando o modelo de ativação no local em uma janela, talvez seja mais conveniente usar o UpdateUI método. O UpdateCommandUI método na IVsUIShell interface e o UpdateUI método na IOleInPlaceComponentUIManager interface são funcionalmente equivalentes. Ambos fazem com que o ambiente para consultar novamente o estado de todos os comandos. Normalmente, uma atualização não será executada imediatamente. Em vez disso, uma atualização será adiada até o tempo ocioso. O shell armazena em cache o estado de comando para ajudar a manter o bom desempenho. Se você quiser evitar o cache, aplicar o DontCache sinalizar quando você cria o comando no arquivo .vsct. No entanto, use o sinalizador com cuidado porque pode diminuir o desempenho.
Observe que você pode obter o IOleInPlaceComponentUIManager interface chamando o QueryInterface método em um IOleComponentUIManager object ou adquirindo a interface da SOleComponentUIManager service.
Consulte também
Conceitos
Como a VSPackages adicionar elementos de Interface do usuário ao IDE