도구 창 추가
이 연습에서는 다음과 같은 방법으로 도구 창을 만들고 Visual Studio에 통합하는 방법을 알아봅니다.
도구 창에 컨트롤을 추가합니다.
도구 창에 도구 모음을 추가합니다.
도구 모음에 명령을 추가합니다.
명령을 구현합니다.
도구 창의 기본 위치를 설정합니다.
필수 조건
Visual Studio SDK는 Visual Studio 설치 프로그램의 선택적 기능으로 포함됩니다. 자세한 내용은 Visual Studio SDK 설치를 참조하세요.
도구 창 만들기
VSIX 템플릿을 사용하여 FirstToolWindow라는 프로젝트를 만들고 FirstToolWindow라는 사용자 지정 도구 창 항목 템플릿을 추가합니다.
참고 항목
도구 창을 사용하여 확장을 만드는 방법에 대한 자세한 정보는 도구 창을 사용하여 확장 만들기를 참조하세요.
도구 창에 컨트롤을 추가합니다.
기본 컨트롤을 제거합니다. FirstToolWindowControl.xaml을 열고 나를 클릭! 단추를 삭제합니다.
도구 상자에서 모든 WPF 컨트롤 섹션을 확장하고 미디어 요소 컨트롤을 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에서 FirstToolWindow 형식을 생성자에 전달하는
FirstToolWindowPackage
클래스의 ProvideToolWindowAttribute 특성을 찾습니다. 기본 위치를 지정하려면 다음 예제에서 생성자에 매개 변수를 더 추가해야 합니다.[ProvideToolWindow(typeof(FirstToolWindow), Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
첫 번째 명명된 매개 변수는
Style
로, 값이Tabbed
이며 창이 기존 창의 탭이 된다는 의미입니다. 도킹 위치는Window
매개 변수로 지정하는데, 이 경우는 솔루션 탐색기의 GUID인 n입니다.참고 항목
IDE의 창 유형에 대한 자세한 정보는 vsWindowType을 참조하세요.
도구 창 테스트
F5를 눌러 Visual Studio 실험적 빌드에서 새 인스턴스를 엽니다.
보기 메뉴에서 다른 창을 가리킨 다음, 첫 번째 도구 창을 클릭합니다.
미디어 플레이어 도구 창이 솔루션 탐색기와 동일한 위치에서 열립니다. 이전과 동일한 위치에 계속 표시되는 경우 창 레이아웃을 다시 설정합니다(창/창 레이아웃 다시 설정).
도구 창에서 단추(검색 아이콘 포함)를 클릭합니다. 지원되는 소리 또는 비디오 파일(예 C:\windows\media\chimes.wav)을 선택한 다음, 열기를 누릅니다.
차임벨 소리가 들립니다.