재사용 가능한 버튼 그룹 만들기
명령 그룹은 항상 메뉴 또는 도구 모음에 함께 표시되는 명령 컬렉션입니다. 모든 명령 그룹은 .vsct 파일의 CommandPlacements 섹션에 있는 다른 부모 메뉴에 할당하여 다시 사용할 수 있습니다.
명령 그룹에는 일반적으로 버튼이 있지만 다른 메뉴나 콤보 상자가 있을 수도 있습니다.
재사용 가능한 버튼 그룹을 만들려면
ReusableButtons
라는 VSIX 프로젝트를 만듭니다. 자세한 내용은 메뉴 명령으로 확장 만들기를 참조하세요.프로젝트가 열리면 이름이 ReusableCommand인 사용자 지정 항목 템플릿을 추가합니다. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다. 새 항목 추가 대화 상자에서 Visual C#>확장성으로 이동하여 사용자 지정 명령을 선택합니다. 창 아래의 이름 필드에서 명령 파일 이름을 ReusableCommand.cs로 바꿉니다.
.vsct 파일에서는 기호 섹션으로 이동해 프로젝트 관련 그룹 및 명령이 들어 있는 GuidSymbol 요소를 찾습니다. 이름은 guidReusableCommandPackageCmdSet이어야 합니다.
다음 예제와 같이 그룹에 추가할 각 버튼에 대해 IDSymbol을 추가합니다.
<GuidSymbol name="guidReusableCommandPackageCmdSet" value="{7f383b2a-c6b9-4c1d-b4b8-a26dc5b60ca1}"> <IDSymbol name="MyMenuGroup" value="0x1020" /> <IDSymbol name="ReusableCommandId" value="0x0100" /> <IDSymbol name="SecondReusableCommandId" value="0x0200" /> </GuidSymbol>
기본적으로 명령 항목 템플릿은 이름이 MyMenuGroup인 그룹과 사용자가 제공한 이름을 가진 버튼을 각각의 IDSymbol 항목과 함께 만듭니다.
그룹 섹션에서 기호 섹션에 제공된 특성과 GUID 및 ID 특성이 동일한 그룹 요소를 만듭니다. 다음 예제와 같이 기존 그룹을 사용하거나 명령 템플릿에서 제공하는 항목을 사용할 수도 있습니다. 이 그룹은 도구 메뉴에 표시됩니다.
<Groups> <Group guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS"/> </Group> </Groups>
다시 사용할 버튼 그룹을 만들려면
명령 또는 메뉴 정의에서 그룹을 부모로 사용하거나 CommandPlacements 섹션을 이용해 그룹에 명령 또는 메뉴를 배치하여 그룹에 명령 또는 메뉴를 배치할 수 있습니다.
버튼 섹션에서는 다음 예제와 같이 그룹을 부모로 사용하는 버튼을 정의하거나 패키지 템플릿에서 제공하는 버튼을 사용합니다.
<Button guid="guidReusableCommandPackageCmdSet" id="ReusableCommandId" priority="0x0100" type="Button"> <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <Strings> <ButtonText>Invoke ReusableCommand</ButtonText> </Strings> </Button>
버튼을 둘 이상의 그룹에 표시해야 하는 경우 CommandPlacements 섹션에서 해당 항목에 대한 항목을 만듭니다. 이 항목은 명령 섹션 아래에 배치해야 합니다. 다음 예제와 같이 CommandPlacement 요소의 GUID 및 ID 특성을 배치하려는 버튼과 일치하도록 설정한 다음, 부모 요소의 GUID 및 ID를 대상 그룹의 GUID 및 ID로 설정합니다.
<CommandPlacements> <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="SecondReusableCommandId" priority="0x105"> <Parent guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" /> </CommandPlacement> </CommandPlacements>
참고 항목
우선 순위 필드의 값은 새 명령 그룹에서 명령의 위치를 결정합니다. CommandPlacement 요소에 설정된 우선 순위는 항목 정의에 설정된 우선 순위를 재정의합니다. 우선 순위 값이 낮은 명령은 우선 순위 값이 높은 명령 앞에 표시됩니다. 중복 우선 순위 값은 허용되지만, devenv /setup 명령이 레지스트리에서 최종 인터페이스를 만드는 순서가 일치하지 않을 수 있으므로 우선 순위 값이 동일한 명령의 상대 위치를 보장할 수 없습니다.
메뉴에 재사용 가능한 버튼 그룹을 배치하려면
CommandPlacements
섹션에서 항목을 만듭니다.CommandPlacement
요소의 GUID와 ID를 그룹의 GUID와 ID로 설정하고 부모 GUID와 ID를 대상 위치의 GUID와 ID로 설정합니다.CommandPlacements 섹션은 명령 섹션 바로 아래에 배치되어야 합니다.
<CommandTable> ... <Commands>... </Commands> <CommandPlacements>... </CommandPlacements> ... </CommandTable>
둘 이상의 메뉴가 하나의 명령 그룹을 포함할 수 있습니다. 부모 메뉴는 직접 만든 것이거나, (ShellCmdDef.vsct 또는 SharedCmdDef.vsct에 설명한 것과 같이) Visual Studio에서 제공한 것, 또는 다른 VSPackage에서 정의한 것일 수 있습니다. 부모 메뉴가 Visual Studio에 연결되거나 VSPackage에 표시되는 바로 가기 메뉴에 연결되어 있는 동안에는 부모/자식 관리 계층의 수는 무제한입니다.
다음 예제에서는 솔루션 탐색기 도구 모음의 그룹을 다른 버튼의 오른쪽에 배치합니다.
<CommandPlacements> <CommandPlacement guid="guidReusableCommandPackageCmdSet" id="MyMenuGroup" priority="0xF00"> <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/> </CommandPlacement> </CommandPlacements>
<CommandPlacements> <CommandPlacement guid="guidButtonGroupCmdSet" id="MyMenuGroup" priority="0x605"> <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" /> </CommandPlacement> </CommandPlacements>