방법: 사용자 인터페이스 업데이트
명령 처리 체계를 Vspackage를 구현한 후에 UI (사용자 인터페이스)를 업데이트 하는 코드 상태와 새 명령을 추가할 수 있습니다.
일반적인 Win32 응용 프로그램, 명령 집합을 지속적으로 폴링할 수 있습니다 및 사용자가 볼 때 개별 명령 상태를 조정할 수 있습니다. 그러나 때문에 Visual Studio 셸 Vspackages의 무제한 호스트 수 있습니다, 광범위 한 폴링 interop 어셈블리 COM과 관리 되는 코드 사이 특히 폴링 응답 속도 줄일 수 있습니다
UI를 업데이트.
다음 단계 중 하나를 수행합니다.
UpdateCommandUI 메서드를 호출합니다.
IVsUIShell 인터페이스에서 얻을 수 있습니다의 SVsUIShell 서비스는 다음과 같이 합니다.
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); } }
경우에서 매개 변수는 UpdateCommandUI 0이 (TRUE), 동기적으로 하 고 즉시 업데이트를 수행 합니다. 0을 전달 하는 것이 좋습니다 (FALSE)의 좋은 성능을 유지 하기 위해이 매개 변수입니다. 캐싱이 발생 하지 않도록 하려면 적용 있는 DontCache 명령은.vsct 파일을 만들 때 플래그를 지정 합니다. 그럼에도 불구 하 고 플래그를 사용할 때 주의 하거나 성능이 저하 될 수 있습니다. 명령 플래그에 대 한 자세한 내용은 참조 하십시오 있는 명령 플래그 요소 설명서입니다.
창에는 현재 위치에서 활성화 모델을 사용 하 여 ActiveX 컨트롤을 호스팅할 Vspackages에 사용 하는 것이 더 편리할 수 있습니다의 UpdateUI 메서드가 있습니다. UpdateCommandUI 메서드에서 IVsUIShell 인터페이스 하는 UpdateUI 메서드에서 IOleInPlaceComponentUIManager 인터페이스는 기능적으로 동일한. 둘 다의 모든 명령 상태를 다시 쿼리하려면 환경 발생할. 일반적으로 업데이트가 즉시 수행 됩니다. 대신, 업데이트 유휴 시간 때까지 지연 됩니다. 셸 명령 상태 좋은 성능을 유지 하기 위해 캐시 됩니다. 캐싱이 발생 하지 않도록 하려면 적용 있는 DontCache 명령은.vsct 파일을 만들 때 플래그를 지정 합니다. 그럼에도 불구 하 고 성능이 저하 될 수 있습니다 때문에 플래그가 주의 사용 합니다.
얻을 수 있습니다의 IOleInPlaceComponentUIManager 인터페이스를 호출 하 여는 QueryInterface 방법에는 IOleComponentUIManager object 또는 인터페이스에서를 얻기는 SOleComponentUIManager 서비스.