도구 창 추가
이 연습에서는 다음과 같은 방법으로 도구 창을 만들고 Visual Studio에 통합하는 방법을 알아봅니다.
도구 창에 컨트롤을 추가합니다.
도구 모음을 도구 창에 추가합니다.
도구 모음에 명령을 추가합니다.
명령을 구현합니다.
도구 창의 기본 위치를 설정합니다.
필수 구성 요소
Visual Studio SDK는 Visual Studio 설정에서 선택적 기능으로 포함됩니다. 자세한 내용은 Visual Studio SDK 설치참조하세요.
도구 창 만들기
VSIX 템플릿을 사용하여 FirstToolWindow 프로젝트를 만들고 FirstToolWindow사용자 지정 도구 창 항목 템플릿을 추가합니다.
메모
도구 창을 사용하여 확장을 만드는 방법에 대한 자세한 내용은 도구 창사용하여 확장 만들기를 참조하세요.
도구 창에 컨트롤 추가
기본 컨트롤을 제거합니다. FirstToolWindowControl.xaml 열고 클릭하세요! 단추입니다.
툴박스에서 모든 WPF 컨트롤 섹션을 확장하고 Media Element 컨트롤을 FirstToolWindowControl 폼으로 끕니다. 컨트롤을 선택하고 속성 창에서 이 요소의 이름을 mediaElement1.
도구 모음을 도구 창에 추가
다음과 같은 방식으로 도구 모음을 추가하면 해당 그라데이션 및 색이 나머지 IDE와 일치하게 됩니다.
솔루션 탐색기에서 FirstToolWindowPackage.vsct를 엽니다. .vsct 파일은 XML을 사용하여 도구 창에서 GUI(그래픽 사용자 인터페이스) 요소를 정의합니다.
<Symbols>
섹션에서name
특성이guidFirstToolWindowPackageCmdSet
인<GuidSymbol>
노드를 찾으십시오. 다음 두<IDSymbol>
요소를 이 노드의<IDSymbol>
요소 목록에 추가하여 도구 모음과 도구 모음 그룹을 정의합니다.<IDSymbol name="ToolbarID" value="0x1000" /> <IDSymbol name="ToolbarGroupID" value="0x1001" />
<Buttons>
섹션 바로 위에서 다음과 유사한<Menus>
섹션을 만듭니다.<Menus> <Menu guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar"> <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" /> <Strings> <ButtonText>Tool Window Toolbar</ButtonText> <CommandName>Tool Window Toolbar</CommandName> </Strings> </Menu> </Menus>
메뉴에는 여러 종류가 있습니다. 이 메뉴는
type
특성으로 정의된 도구 창의 도구 모음입니다.guid
및id
설정은 도구 모음의 정규화된 ID를 구성합니다. 일반적으로 메뉴의<Parent>
은 포함하는 그룹입니다. 그러나 도구 모음은 자체 부모로 정의됩니다. 따라서 동일한 식별자가<Menu>
및<Parent>
요소에 사용됩니다.priority
특성은 '0'에 불과합니다.도구 모음은 여러 가지 면에서 메뉴와 유사합니다. 예를 들어 메뉴에 명령 그룹이 있을 수 있는 것처럼 도구 모음에도 그룹이 있을 수 있습니다. (메뉴에서 명령 그룹은 가로 줄로 구분됩니다. 도구 모음에서 그룹은 시각적 구분 기호로 구분되지 않습니다.)
<Group>
요소가 포함된<Groups>
섹션을 추가합니다.<Symbols>
섹션에서 선언한 그룹 ID를 정의합니다.<Menus>
섹션 바로 뒤의<Groups>
섹션을 추가합니다.<Groups> <Group guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID" priority="0x0000"> <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarID" /> </Group> </Groups>
부모 GUID 및 ID를 도구 모음의 GUID 및 ID로 설정하여 도구 모음에 그룹을 추가합니다.
도구 모음에 명령 추가
단추로 표시되는 명령을 도구 모음에 추가합니다.
<Symbols>
섹션에서 도구 모음 및 도구 모음 그룹 선언 바로 다음에 다음 IDSymbol 요소를 선언합니다.<IDSymbol name="cmdidWindowsMedia" value="0x0100" /> <IDSymbol name="cmdidWindowsMediaOpen" value="0x132" />
<Buttons>
섹션 내에 Button 요소를 추가합니다. 이 요소는 도구 창의 도구 모음에 검색 (돋보기) 아이콘으로 나타납니다.<Button guid="guidFirstToolWindowPackageCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button"> <Parent guid="guidFirstToolWindowPackageCmdSet" id="ToolbarGroupID"/> <Icon guid="guidImages" id="bmpPicSearch" /> <Strings> <CommandName>cmdidWindowsMediaOpen</CommandName> <ButtonText>Load File</ButtonText> </Strings> </Button>
FirstToolWindowCommand.cs 열고 기존 필드 바로 다음에 클래스에 다음 줄을 추가합니다.
public const string guidFirstToolWindowPackageCmdSet = "00000000-0000-0000-0000-0000"; // get the GUID from the .vsct file public const uint cmdidWindowsMedia = 0x100; public const int cmdidWindowsMediaOpen = 0x132; public const int ToolbarID = 0x1000;
이렇게 하면 코드에서 명령을 사용할 수 있습니다.
FirstToolWindowControl에 MediaPlayer 속성 추가
도구 모음 컨트롤에 대한 이벤트 처리기에서 코드는 FirstToolWindowControl 클래스의 자식인 Media Player 컨트롤에 액세스할 수 있어야 합니다.
솔루션 탐색기FirstToolWindowControl.xaml 마우스 오른쪽 단추로 클릭하고 보기 코드클릭하고 FirstToolWindowControl 클래스에 다음 코드를 추가합니다.
public System.Windows.Controls.MediaElement MediaPlayer
{
get { return mediaElement1; }
}
도구 창 및 도구 모음 인스턴스화
파일 열기 대화 상자를 호출하고 선택한 미디어 파일을 재생하는 도구 모음 및 메뉴 명령을 추가합니다.
FirstToolWindow.cs 열고 다음
using
지시문을 추가합니다.using System.ComponentModel.Design; using System.Windows.Forms; using Microsoft.VisualStudio.Shell.Interop;
FirstToolWindow 클래스 내에서 FirstToolWindowControl 컨트롤에 대한 공용 참조를 추가합니다.
public FirstToolWindowControl control;
생성자의 끝에서 이 컨트롤 변수를 새로 만든 컨트롤로 설정합니다.
control = new FirstToolWindowControl(); base.Content = control;
생성자 내에서 도구 모음을 인스턴스화합니다.
this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet), FirstToolWindowCommand.ToolbarID); this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP;
이 시점에서 FirstToolWindow 생성자는 다음과 같이 표시됩니다.
public FirstToolWindow() : base(null) { this.Caption = "FirstToolWindow"; this.BitmapResourceID = 301; this.BitmapIndex = 1; control = new FirstToolWindowControl(); base.Content = control; this.ToolBar = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet), FirstToolWindowCommand.ToolbarID); this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP; }
도구 모음에 메뉴 명령을 추가합니다. FirstToolWindowCommand.cs 클래스에서 다음 using 지시문을 추가합니다.
using System.Windows.Forms;
FirstToolWindowCommand 클래스의 ShowToolWindow() 메서드 끝에 다음 코드를 추가합니다. ButtonHandler 명령은 다음 섹션에서 구현됩니다.
// Create the handles for the toolbar command. var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommand.guidFirstToolWindowPackageCmdSet), FirstToolWindowCommand.cmdidWindowsMediaOpen); var menuItem = new MenuCommand(new EventHandler( ButtonHandler), toolbarbtnCmdID); mcs.AddCommand(menuItem);
도구 창에서 메뉴 명령을 구현하려면
FirstToolWindowCommand 클래스에서 파일 열기 대화 상자를 호출하는 ButtonHandler 메서드를 추가합니다. 파일을 선택하면 미디어 파일이 재생됩니다.
FirstToolWindowCommand 클래스에서 FindToolWindow() 메서드에서 만들어지는 FirstToolWindow 창에 대한 프라이빗 참조를 추가합니다.
private FirstToolWindow window;
ButtonHandler 명령 처리기가 창 컨트롤에 액세스할 수 있도록 위에서 정의한 창을 설정하도록 ShowToolWindow() 메서드를 변경합니다. 다음은 전체 ShowToolWindow() 메서드입니다.
private void ShowToolWindow(object sender, EventArgs e) { window = (FirstToolWindow) this.package.FindToolWindow(typeof(FirstToolWindow), 0, true); if ((null == window) || (null == window.Frame)) { throw new NotSupportedException("Cannot create tool window"); } IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame; Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(windowFrame.Show()); var mcs = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; var toolbarbtnCmdID = new CommandID(new Guid(FirstToolWindowCommandguidFirstToolWindowPackageCmdSet), FirstToolWindowCommand.cmdidWindowsMediaOpen); var menuItem = new MenuCommand(new EventHandler( ButtonHandler), toolbarbtnCmdID); mcs.AddCommand(menuItem); }
ButtonHandler 메서드를 추가합니다. 사용자가 재생할 미디어 파일을 지정하는 OpenFileDialog를 만든 다음 선택한 파일을 재생합니다.
private void ButtonHandler(object sender, EventArgs arguments) { OpenFileDialog openFileDialog = new OpenFileDialog(); DialogResult result = openFileDialog.ShowDialog(); if (result == DialogResult.OK) { window.control.MediaPlayer.Source = new System.Uri(openFileDialog.FileName); } }
도구 창의 기본 위치 설정
다음으로 도구 창의 IDE에서 기본 위치를 지정합니다. 도구 창에 대한 구성 정보는 FirstToolWindowPackage.cs 파일에 있습니다.
FirstToolWindowPackage.cs
FirstToolWindowPackage
클래스에서 ProvideToolWindowAttribute 특성을 찾습니다. 이 특성은 FirstToolWindow 형식을 생성자에 전달합니다. 기본 위치를 지정하려면 다음 예제에서 생성자에 매개 변수를 더 추가해야 합니다.[ProvideToolWindow(typeof(FirstToolWindow), Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
첫 번째 명명된 매개 변수는
Style
이고 값은Tabbed
입니다. 즉, 창이 기존 창의 탭이 됩니다. 도킹 위치는Window
매개 변수에 의해 지정됩니다. n이 경우 솔루션 탐색기의 GUID가.메모
IDE의 창 유형에 대한 자세한 내용은 vsWindowType참조하세요.
도구 창 테스트
F5 눌러 Visual Studio 실험적 빌드의 새 인스턴스를 엽니다.
보기 메뉴에서 다른 Windows 가리킨 다음 첫 번째 도구 창클릭합니다.
미디어 플레이어 도구 창은 솔루션 탐색기동일한 위치에서 열립니다. 이전과 동일한 위치에 계속 표시되는 경우 창 레이아웃을 다시 설정합니다(창/창 레이아웃다시 설정).
도구 창에서 단추(검색 아이콘 포함)를 클릭합니다. 지원되는 소리 또는 비디오 파일(예: C:\windows\media\chimes.wav )을 선택한 다음 엽니다.
차임벨 소리를 들어야 합니다.