연습: 도구 창 (파트 2 / 4) 만들기
도구 창을 Visual Studio 통합된 개발 환경 (IDE)에서 공통 됩니다. 예 Visual Studio 포함 된 도구 창에는 솔루션 탐색기, 작업 목록, 오류 목록, 및 출력 창입니다. 모든 도구 창을 일부 기능은 공통 된, 예를 들어, 모든 IDE에서 같은 방식으로 도킹 될 수 있습니다. 예측 가능한 도킹 사용자를 작업 및 정보를 효율적으로 관리할 수 있습니다.
이 연습에서는 다음 단계를 사용 하 여 Visual Studio IDE에서 도구 창을 만드는 방법에 설명 합니다.
도구 창을 만듭니다.
도구 창에 컨트롤을 포함 합니다.
도구 모음을 도구 창에 추가 합니다.
명령 모음을 추가 합니다.
명령을 구현 합니다.
도구 창에 대 한 기본 위치를 설정 합니다.
이 연습에서는 Visual Studio IDE를 확장 하는 방법에 설명 하는 일련의 일부입니다. 자세한 내용은 Visual Studio Vspackages를 사용 하 여 사용자 지정 연습를 참조하십시오.
사전 요구 사항
이 연습을 완료 하려면 설치 해야 해당 Visual Studio 2010 SDK.
참고
Visual Studio SDK에 대 한 자세한 내용은 참조 하십시오. Visual Studio 개요를 확장합니다..Visual Studio SDK를 다운로드 하는 방법를 참조 하십시오. Visual Studio 확장성 개발자 센터 MSDN 웹 사이트에서.
Visual Studio 패키지 프로젝트 템플릿에 대해 위치
Visual Studio 패키지 프로젝트 서식 파일에에서 사용할 수 있는 새 프로젝트 대화 상자:
아래에서 Visual Basic 확장성. 프로젝트의 기본 언어는 Visual Basic입니다.
아래에서 C# 확장성. 프로젝트의 기본 언어는 C#입니다.
아래에서 기타 프로젝트 형식 확장. 프로젝트의 기본 언어는 c + +입니다.
도구 창 만들기
도구 창을 만들려면
명명 된 있는 VSPackage 만들기 FirstToolWin. 솔루션에 대 한 디렉터리를 만들 수도 있습니다. 확인을 클릭합니다.
시작 페이지에서 클릭 다음.
에 프로그래밍 언어 선택 페이지에서 클릭 C# 또는 Visual Basic 클릭 새 어셈블리에 서명 하려면 키 파일을 생성, 다음을 클릭 하 고 다음.
검사를 잠시의 기본 VSPackage 정보 페이지입니다. 값은 회사 이름 상자 사용와 네임 스페이스는 프로젝트의 모든 클래스에 대 한. VSPackage 이름 상자에 최종 컴파일된 패키지 이름을 제공 하는 VSPackage 버전 상자 버전 정보를 제공 합니다. 최소 Visual Studio 버전 Visual Studio 버전의 패키지를 실행 해야 합니다 지정 합니다. 내용에 세부 정보 상자에 완성 된 패키지의 속성 페이지에 표시 됩니다. 해당 아이콘 변경 단추를 사용 하면 패키지를 나타내는 아이콘을 선택 합니다.
이 연습에서는 단순히 클릭 하 여 기본값을 적용 다음.
에 VSPackage 옵션을 선택 페이지에서 선택 메뉴 명령 을 및 도구 창, 다음을 클릭 하 고 다음.
참고
다음 연습에서는 메뉴 명령을 옵션이 필요 연습: 확장 하는 도구 창 (3 / 4 부)에이 프로젝트를 빌드합니다.
에 메뉴 명령 옵션 페이지에 있는 명령 이름 상자에 입력 Windows Media. 에 명령 ID 상자에 입력 cmdidWindowsMedia, 다음을 클릭 하 고 다음.
에 도구 창의 옵션 페이지에 있는 창 이름 상자에 입력 Windows Media Player. 에 명령 ID 필드, 예를 들어, 유효한 식별자를 입력 cmdidWindowsMediaWin, 다음을 클릭 하 고 다음.
에 테스트 프로젝트 옵션을 선택 페이지 지우기 통합 테스트 프로젝트 및 단위 테스트 프로젝트, 다음을 클릭 하 고 완료.
솔루션 탐색기, MyControl.xaml 두 번 클릭 합니다.
마우스는 클릭! 단추를 클릭 한 다음를 클릭 를 삭제.
도구 창에 컨트롤을 포함 합니다.
그런 다음 Windows Media Player 컨트롤에 추가 도구 상자 다음 도구 창에 추가 합니다.
도구 창에 컨트롤을 포함
에 도구 상자, 확장은 모든 WPF 컨트롤 섹션 및 확인에 대 한 미디어 요소.
미디어 플레이어 도구 창에 추가 하려면 드래그는 미디어 요소 에서 제어는 도구 상자 MyControl 양식에.
디자이너에서 미디어 요소의 컨트롤 선택 하 고 다음에 사용할 수 있는 속성을 검토를 속성이 창. 속성 중 일부는 모든 Windows Forms 컨트롤의 표준입니다. 그러나 다른 사용자 컨트롤에 의해 예를 들어 제공 된 소스를 사용 하는 파일을 로드할 수 있습니다.
파일 메뉴에서 모두 저장을 클릭합니다.
도구 창에 도구 모음 추가
다음과 같은 방식으로 도구 모음을 추가 하 여 해당 그라디언트 및 색상 IDE의 나머지 부분과 일관 되지 보장 합니다.
도구 창에는 도구 모음을 추가 하려면
솔루션 탐색기에서 Firsttoolwin.vsct를 엽니다. .Vsct 파일이 XML을 사용 하 여 도구 창에서 그래픽 사용자 인터페이스 (GUI) 요소를 정의 합니다.
에 <Symbols> 섹션에서 찾을 <GuidSymbol> 노드는 name 특성이 guidFirstToolWinCmdSet. 다음과 같은 두 가지 추가 <IDSymbol> 요소를 목록에 <IDSymbol> 도구 모음 및 도구 모음 그룹을 정의 하는이 노드의 요소입니다.
<IDSymbol name="ToolbarID" value="0x1000" /> <IDSymbol name="ToolbarGroupID" value="0x1001" />
바로 위에 있는 <Groups> 섹션에서 만들기를 <Menus> 이 유사한 섹션:
<Menus> <Menu guid="guidFirstToolWinCmdSet" id="ToolbarID" priority="0x0000" type="ToolWindowToolbar"> <Parent guid="guidFirstToolWinCmdSet" 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> 섹션입니다.
<Group guid="guidFirstToolWinCmdSet" id="ToolbarGroupID" priority="0x0000"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarID"/> </Group>
부모 guid와 id guid와 id의 도구 모음을 설정 하 여 그룹을 도구 모음에 넣습니다.
파일을 저장합니다.
도구 모음에 명령 추가
그런 다음 명령을 도구 모음에 추가 합니다. 명령 단추 및 컨트롤로 표시 됩니다.
도구 모음에 명령을 추가 하려면
FirstToolWin.vsct에는 <Symbols> 섹션에서 세 가지 명령을 도구 모음 및 도구 모음 후 방금 그룹 선언의 선언 합니다.
<IDSymbol name="cmdidWindowsMediaOpen" value="0x132" /> <IDSymbol name="cmdidWindowsMediaFilename" value="0x133" /> <IDSymbol name="cmdidWindowsMediaFilenameGetList" value="0x134" />
새 열 명령을 cmdidWindowsMedia 및 cmdidWindowsMediaWin 이미 선언 되어 있습니다.
에 <Buttons> 섹션에 <Button> 요소가 있으면 이미 하 고 cmdidWindowsMedia 및 cmdidWindowsMediaWin 명령에 대 한 정의가 포함 되어 있습니다. 다른 추가 <Button> cmdidWindowsMediaOpen 명령을 정의 하는 요소입니다.
<Button guid="guidFirstToolWinCmdSet" id="cmdidWindowsMediaOpen" priority="0x0101" type="Button"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarGroupID"/> <Icon guid="guidImages" id="bmpPic1" /> <Strings> <CommandName>cmdidWindowsMediaOpen</CommandName> <ButtonText>Load File</ButtonText> </Strings> </Button>
두 번째 단추는 우선 순위가 될 수 0x0101. 다음 단계에서 추가 된 콤보 상자의 순위가 0x0100. 따라서 콤보 상자에서 첫 번째 위치에 표시 됩니다 및 두 번째 위치에 단추가 표시 됩니다.
일부 텍스트를 입력 하 여 사용자에 대 한 위치를 제공 하려면 콤보 상자를 추가 합니다. 콤보 상자, 단추를 추가 하는 같은 콤보 정의 제외 하 고 추가 상자 있는 <Combos> 섹션입니다.
만들기는 <Combos> 섹션 바로 뒤의 </Buttons> 콤보 상자를 정의 하는 한 항목만 태그.
<Combos> <Combo guid="guidFirstToolWinCmdSet" id="cmdidWindowsMediaFilename" priority="0x0100" type="DynamicCombo" idCommandList="cmdidWindowsMediaFilenameGetList" defaultWidth="130"> <Parent guid="guidFirstToolWinCmdSet" id="ToolbarGroupID" /> <CommandFlag>IconAndText</CommandFlag> <CommandFlag>CommandWellOnly</CommandFlag> <CommandFlag>StretchHorizontally</CommandFlag> <Strings> <CommandName>Filename</CommandName> <ButtonText>Enter a Filename</ButtonText> </Strings> </Combo> </Combos>
저장 하 고 Firsttoolwin.vsct를 닫습니다.
솔루션 탐색기, PkgCmdID.cs 또는 PkgCmdID.vb 프로젝트 폴더에서 열 및 다음 기존 멤버 뒤 바로 클래스에서 다음 줄을 추가 합니다.
Public Const cmdidWindowsMediaOpen As Integer = &H132 Public Const cmdidWindowsMediaFilename As Integer = &H133 Public Const cmdidWindowsMediaFilenameGetList As Integer = &H134 Public Const ToolbarID As Integer = &H1000
public const int cmdidWindowsMediaOpen = 0x132; public const int cmdidWindowsMediaFilename = 0x133; public const int cmdidWindowsMediaFilenameGetList = 0x134; public const int ToolbarID = 0x1000;
이렇게 하면 명령을 코드에서 사용할 수 있습니다.
파일을 저장한 후 닫습니다.
명령을 구현 합니다.
이제 명령을 구현 하는 코드를 작성 합니다.
명령을 구현 하
솔루션 탐색기, MyToolWindow.cs 또는 도구 창에 대 한 클래스를 포함 하는 Mytoolwindow.vb를 엽니다.
기존 바로 뒤에 다음 코드를 추가 문을 사용 합니다.
Imports System.ComponentModel.Design
using System.ComponentModel.Design;
사용이 줄 수 있는 CommandID 클래스를 정규화 하지 않고.
생성자 라는 줄 바로 앞에 다음 코드를 추가 control = new MyControl() (C#) 또는 Me.Content = New MyControl() (VB).
' Create the toolbar. Me.ToolBar = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin) Me.ToolBarLocation = CInt(VSTWT_LOCATION.VSTWT_TOP) ' Create the handlers for the toolbar commands. Dim mcs As OleMenuCommandService = TryCast(GetService(GetType(IMenuCommandService)), OleMenuCommandService) If mcs IsNot Nothing Then Dim toolbarbtnCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidMyCommand) Dim menuItem As MenuCommand = New MenuCommand(New EventHandler(AddressOf ButtonHandler), toolbarbtnCmdID) mcs.AddCommand(menuItem) ' Command for the combo itself Dim menuMyDynamicComboCommandID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, CInt(PkgCmdIDList.cmdidMyCommand)) Dim menuMyDynamicComboCommand As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboHandler), menuMyDynamicComboCommandID) mcs.AddCommand(menuMyDynamicComboCommand) ' Command for the combo's list Dim comboListCmdID As CommandID = New CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaWin) Dim comboMenuList As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf ComboListHandler), comboListCmdID) mcs.AddCommand(comboMenuList) End If
// Create the toolbar. this.ToolBar = new CommandID(GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.ToolbarID); this.ToolBarLocation = (int)VSTWT_LOCATION.VSTWT_TOP; // Create the handlers for the toolbar commands. var mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (null != mcs) { var toolbarbtnCmdID = new CommandID( GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaOpen); var menuItem = new MenuCommand(new EventHandler( ButtonHandler), toolbarbtnCmdID); mcs.AddCommand(menuItem); // Command for the combo itself var menuMyDynamicComboCommandID = new CommandID( GuidList.guidFirstToolWinCmdSet, (int)PkgCmdIDList.cmdidWindowsMediaFilename); var menuMyDynamicComboCommand = new OleMenuCommand( new EventHandler(ComboHandler), menuMyDynamicComboCommandID); mcs.AddCommand(menuMyDynamicComboCommand); // Command for the combo's list var comboListCmdID = new CommandID( GuidList.guidFirstToolWinCmdSet, PkgCmdIDList.cmdidWindowsMediaFilenameGetList); var comboMenuList = new OleMenuCommand( new EventHandler(ComboListHandler), comboListCmdID); mcs.AddCommand(comboMenuList); }
세 개의 명령 단추 및 콤보 상자에 대 한 두이 코드를 추가합니다. 콤보 상자의 항목을 및 드롭다운 목록 채우기 위해 사용자가 두 명령 필요 합니다.
도구 모음 컨트롤에 대 한 이벤트 처리기의 코드는 MyControl 클래스의 자식 요소인 미디어 플레이어 컨트롤에 액세스할 수 있어야 합니다.
솔루션 탐색기Mycontrol.xaml를 마우스 오른쪽 단추로 클릭 하 고 클릭 코드 보기, MyControl 클래스에 다음 코드를 추가 합니다.
Public ReadOnly Property MediaPlayer() As System.Windows.Controls.MediaElement Get Return MediaElement1 End Get End Property
public System.Windows.Controls.MediaElement MediaPlayer { get { return mediaElement1; } }
파일을 저장합니다.
MyToolWindow.cs 또는 Mytoolwindow.vb를 반환 하 고 끝 클래스에서 마지막 닫는 중괄호 2 개 (C#) 또는 (Visual Basic) End Class 문 바로 앞에 다음 코드를 추가 합니다.
Private Sub ButtonHandler(ByVal sender As Object, ByVal arguments As EventArgs) If comboValue IsNot Nothing AndAlso comboValue.Trim().Length <> 0 Then LoadFile(comboValue) End If End Sub Private Sub ComboHandler(ByVal sender As Object, ByVal arguments As EventArgs) Dim eventArgs As OleMenuCmdEventArgs = TryCast(arguments, OleMenuCmdEventArgs) If eventArgs IsNot Nothing Then Dim output As IntPtr = eventArgs.OutValue Dim input As Object = eventArgs.InValue If input IsNot Nothing Then comboValue = input.ToString() ElseIf output <> IntPtr.Zero Then Marshal.GetNativeVariantForObject(comboValue, output) End If End If End Sub Public Sub LoadFile(ByVal comboValue As String) control.MediaPlayer.Source = New Uri(comboValue) End Sub Private Sub ComboListHandler(ByVal sender As Object, ByVal arguments As EventArgs) End Sub
private void ButtonHandler(object sender, EventArgs arguments) { if (comboValue != null && comboValue.Trim().Length != 0) { LoadFile(comboValue); } } private void ComboHandler(object sender, EventArgs arguments) { var eventArgs = arguments as OleMenuCmdEventArgs; if (eventArgs != null) { IntPtr output = eventArgs.OutValue; object input = eventArgs.InValue; if (input != null) { comboValue = input.ToString(); } else if (output != IntPtr.Zero) { Marshal.GetNativeVariantForObject(comboValue, output); } } } public void LoadFile(string comboValue) { control.MediaPlayer.Source = new System.Uri(comboValue); } private void ComboListHandler(object sender, EventArgs arguments) { }
MenuMyDynamicComboCommand 및 메뉴 항목 같은 이벤트 처리기를 공유 하는 알 수 있습니다. 따라서 도구 창이 콤보 상자에 지정 된 파일을 재생할 수 있습니다. 이 연습에서는 사용자 코드의 ComboListHandler 함수를 제공 하지 않습니다. 다음 연습에서는 연습: 확장 하는 도구 창 (3 / 4 부), 재생 목록 이름을 사용 하 여 드롭다운 목록을 채우는 코드를 추가 합니다.
무엇이 든을 멤버 변수에 입력 된 콤보 처리기를 저장 합니다. 변수를 추가 하려면 클래스 (Inherits 문 다음 Visual Basic)의 상단에 다음 코드를 추가 합니다. 동시에 컨트롤을 저장할 멤버 변수를 추가 합니다.
Dim control As MyControl Dim comboValue As String
private MyControl control; string comboValue = "";
단추를 클릭할 때 단추가이 로컬 변수 값을 읽고 미디어 플레이어를 로드 합니다.
도구 창에 대 한 기본 위치를 설정 합니다.
다음에 IDE 도구 창에 대 한 기본 위치를 지정 합니다. 도구 창에 대 한 구성 정보는 FirstToolWinPackage.cs 파일에 있습니다.
도구 창에 대 한 기본 위치를 설정 하려면
솔루션 탐색기, FirstToolWinPackage.cs 또는 Firsttoolwinpackage.vb를 엽니다. 이 파일에 ProvideToolWindowAttribute 특성에 FirstToolWinPackage 클래스. 이 코드는 MyToolWindow 형식의 생성자에 전달 합니다. 기본 위치를 지정 하려면 다음 예제에서는 생성자에 매개 변수가 추가 해야 합니다.
<PackageRegistration(UseManagedResourcesOnly:=True), _ InstalledProductRegistration("#110", "#112", "1.0", IconResourceID:=400), _ ProvideMenuResource("Menus.ctmenu", 1), _ ProvideToolWindow(GetType(MyToolWindow), Style:=Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window:="3ae79031-e1bc-11d0-8f78-00a0c9110057"), _ Guid(GuidList.guidFirstToolWinPkgString)> _ Public NotInheritable Class FirstToolWinPackage Inherits Package
[ProvideToolWindow(typeof(MyToolWindow), Style = Microsoft.VisualStudio.Shell.VsDockStyle.Tabbed, Window = "3ae79031-e1bc-11d0-8f78-00a0c9110057")]
첫 번째 명명 된 매개 변수 스타일 이며 그 값은 기존 창에서 탭 창 수 있습니다 탭입니다. 창 매개 변수를 명명 된 창으로 제공 됩니다. 해당 값을 GUID입니다. 이 경우에 GUID에 대 한입니다 솔루션 탐색기.
참고
IDE의 창에 대 한 Guid에 대 한 자세한 내용은 참조 하십시오. vsWindowKind 상수 MSDN 웹 사이트에서.
작업한 내용을 저장합니다.
테스트 도구 창
도구 창을 테스트 하려면
실험 Visual Studio 새 인스턴스를 엽니다 F5 키를 눌러 빌드합니다.
에 있는 보기 메뉴를 가리키고 다른 창 하 고 다음을 클릭 Windows Media Player.
미디어 플레이어 도구 윈도우와 같은 창에서 열립니다 솔루션 탐색기.
미디어 플레이어 도구 창이 콤보 상자에서 지원 되는 사운드 또는 비디오 파일, 예를 들어, C:\windows\media\chimes.wav 키의 전체 경로 파일 이름을 입력 Enter, 및 다음 인접 단추를 클릭 합니다.
참고
미디어 플레이어 도구 창이 때문에 파일 이름 텍스트 상자에 입력할 수 있는 한 파일 열기 대화 상자.
새로운 기능
연습: 확장 하는 도구 창 (3 / 4 부), 더 많은 컨트롤을 도구 창에 추가 하는 방법을 배울 수 있습니다. 표시 되는 단추를 추가 하 여는 파일 열기 미디어 플레이어에서 재생할 파일을 선택 하는 데 사용할 수 있는 대화 상자입니다. 재생 중 하나를 선택할 수 있습니다 재생 목록 드롭다운 목록을 추가할 수도 합니다.