다음을 통해 공유


방법: 도구 창 만들기 및 제어

Visual Studio 추가 기능은 Visual Studio 2013에서 사용되지 않습니다. 추가 기능을 VSPackage 확장으로 업그레이드해야 합니다. 업그레이드에 대한 자세한 내용은 FAQ: VSPackage 확장으로 추가 기능 변환을 참조하십시오.

Visual Studio의 창은 문서 창 또는 도구 창 중에서 한 가지 범주에 속합니다. 문서 창은 텍스트 파일, HTML, 클래스 내의 코드 등 코드 편집기에서 해당 내용을 편집할 수 있는 창입니다. 도구 창은 단추, 텍스트, 콤보 상자 등의 컨트롤을 하나 이상 포함하는 창입니다. Visual Studio IDE(통합 개발 환경)에서는 이러한 컨트롤을 사용하여 옵션 설정, 오류 확인, 프로젝트 요소 편집 등의 작업을 수행합니다. 이러한 창의 몇 가지 예로는 출력 창, 작업 목록, 도구 상자 등이 있습니다. 도구 상자는 IDE 내에서 자유롭게 이동하거나 다른 도구 창에 도킹할 수 있으며 LinkedWindows 컬렉션을 사용하여 IDE에서 도구 창을 프로그래밍 방식으로 연결하거나 연결을 해제할 수 있습니다. 자세한 내용은 방법: 창 특성 변경을 참조하십시오.

자동화를 통해 기존 도구 창을 조작할 수 있을 뿐 아니라 Windows2 컬렉션의 CreateToolWindow2 메서드를 통해 사용자 지정 도구 창을 직접 만들 수도 있습니다.

사용자 지정 도구 창을 직접 만들면 작업을 수행하는 데 유용한 컨트롤을 창에 채울 수 있습니다. 예를 들어 사용자 지정 도구 창을 사용하여 코드 서식을 지정하거나 변수 설정을 추적 및 변경하거나 고급 디버깅 작업 또는 소스 프로파일링을 수행하는 데 필요한 특수 도구를 표시할 수 있습니다.

사용자 지정 도구 창을 만드는 절차는 다음과 같습니다.

  • Windows 컨트롤 라이브러리 프로젝트를 사용하여 사용자 컨트롤을 만듭니다.

  • 단추, 텍스트 상자 등의 원하는 컨트롤을 폼과 코드에 추가합니다.

  • 프로젝트를 DLL로 컴파일합니다.

  • 새 Visual Studio 추가 기능 프로젝트 또는 Windows 응용 프로그램 프로젝트와 같은 기타 프로젝트를 만듭니다.

  • CreateToolWindow2 메서드를 사용하여 새 사용자 컨트롤을 호스팅할 도구 창을 만듭니다.

CreateToolWindow2를 호출하여 새 도구 창을 만들기 전에 사용자 컨트롤(ControlObject)을 추가 기능과 같은 어셈블리로 이동하거나 사용자 컨트롤이 COM에 완전히 표시되도록 모든 특성을 설정해야 합니다. 예를 들어 프로젝트의 컴파일 옵션에서 COM Interop 등록 옵션을 선택할 수 있습니다. 이렇게 하지 않으면 컨트롤이 올바르게 마샬링되지 않으며 CreateToolWindow2에서 null 값을 반환합니다.

Visual Studio용 자동화 샘플 웹 사이트에는 아래 예제 외에도 각 언어에 대한 추가 도구 창 샘플과 기타 코드 예제가 나와 있습니다.

참고

새 도구 창이 표시되기 전에 해당 도구 창에 대해 높이, 너비, 위치 등의 표시 유형 상태를 설정하려고 하면 오류가 발생합니다.창이 표시된 후에 해당 속성을 설정해야 합니다.

참고

표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다.이러한 절차는 일반 개발 설정을 활성화한 상태로 개발되었습니다.설정을 변경하려면 도구 메뉴에서 설정가져오기내보내기를 선택합니다.자세한 내용은 Visual Studio에서 개발 설정 사용자 지정을 참조하십시오.

사용자 지정 도구 창 만들기

다음 예에서는 Visual Basic 및 Visual C#에서 도구 창을 만드는 방법을 보여줍니다.

참고

다음 코드는 추가 기능에서 실행해야 하며 매크로에서는 실행할 수 없습니다.

사용자 지정 도구 창을 만들려면

  • Windows 컨트롤 라이브러리 프로젝트에서 사용자 정의 컨트롤을 만듭니다. 기본 이름인 "WindowsControlLibrary1"을 그대로 적용하거나 Windows 컨트롤 라이브러리 프로젝트의 이름과 일치하도록 아래 코드의 asmPath 매개 변수 이름을 변경합니다.

    또는 코드에서 기존 사용자 컨트롤을 참조할 수도 있습니다.

참고

사용자 컨트롤 클래스의 클래스 정의에는 GuidAttribute를 연결해야 합니다.

  1. 새 추가 기능 프로젝트를 만듭니다.

    자세한 내용은 방법: 추가 기능 만들기를 참조하십시오.

  2. 추가 기능의 OnConnection 메서드를 다음과 같이 바꿉니다.

    Public Sub OnConnection(ByVal application As Object, ByVal _
    connectMode As ext_ConnectMode, ByVal addInInst As Object, _
    ByRef custom As Array) Implements IDTExtensibility2.OnConnection
        Try
            ' ctlProgID - the ProgID for your user control.
            ' asmPath - the path to your user control DLL.
            ' guidStr - a unique GUID for the user control.
            Dim ctlProgID, asmPath, guidStr As String
            ' Variables for the new tool window that will hold
            ' your user control.
            Dim toolWins As EnvDTE80.Windows2
            Dim toolWin As EnvDTE.Window
            Dim objTemp As Object = Nothing
    
            _applicationObject = CType(application, DTE2)
            _addInInstance = CType(addInInst, AddIn)
            ctlProgID = "WindowsControlLibrary2.UserControl1"
            ' Replace the <Path to VS Project> with the path to
            ' the folder where you created the WindowsCotrolLibrary.
            ' Remove the line returns from the path before 
            ' running the add-in.
            asmPath = "<Path to VS Project>\My _
              Documents\Visual Studio 2013\Projects\ _
              WindowsControlLibrary2\WindowsControlLibrary2\_
              bin\Debug\WindowsControlLibrary2.dll"
            guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}"
    
            toolWins = CType(_applicationObject.Windows, Windows2)
            ' Create the new tool window, adding your user control.
            toolWin = toolWins.CreateToolWindow2(_addInInstance, _
              asmPath, ctlProgID, "MyNewToolwindow", guidStr, objTemp)
            ' The tool window must be visible before you do anything 
            ' with it, or you will get an error.
            If Not toolWin Is Nothing Then
                toolWin.Visible = True
            End If
               ' Uncomment the code below to set the new tool window's
               ' height and width, and to close it.
            ' MsgBox("Setting the height to 500 and width to 400...")
            ' toolWin.Height = 500
            ' toolWin.Width = 400
            ' MsgBox("Closing the tool window...")
            ' toolWin.Close(vsSaveChanges.vsSaveChangesNo)
    
        Catch ex As Exception
            MsgBox("Exception: " & ex.ToString)
        End Try
    End Sub
    
    // Before running, add a reference to System.Windows.Forms, 
    // using System.Windows.Forms, to the top of the class.
    public void OnConnection(object application, 
    ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        try
        {
            // ctlProgID - the ProgID for your user control.
            // asmPath - the path to your user control DLL.
            // guidStr - a unique GUID for the user control.
            string ctlProgID, asmPath, guidStr;
            // Variables for the new tool window that will hold
            // your user control.
            EnvDTE80.Windows2 toolWins;
            EnvDTE.Window toolWin;
            object objTemp = null;
    
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;
            ctlProgID = "WindowsControlLibrary2.UserControl1";
            // Replace the <Path to VS Project> with the path to
            // the folder where you created the WindowsCotrolLibrary.
            // Remove the line returns from the path before 
            // running the add-in.
            asmPath = @"c:\My Documents\Visual Studio 2013\Projects\
              WindowsControlLibrary2\WindowsControlLibrary2\bin\
              Debug\WindowsControlLibrary2.dll";
            guidStr = "{E9C60F2B-F01B-4e3e-A551-C09C62E5F584}";
    
            toolWins = (Windows2)_applicationObject.Windows;
            // Create the new tool window, adding your user control.
            toolWin = toolWins.CreateToolWindow2(_addInInstance, 
              asmPath, ctlProgID, "MyNewToolwindow", guidStr, 
              ref objTemp);
            // The tool window must be visible before you do anything 
            // with it, or you will get an error.
            if (toolWin != null)
            {
                toolWin.Visible = true;
            }
            // Set the new tool window's height and width, 
            // and then close it.
            System.Windows.Forms.MessageBox.Show("Setting the height 
            to 500 and width to 400...");
            toolWin.Height = 500;
            toolWin.Width = 400;
            System.Windows.Forms.MessageBox.Show
              ("Closing the tool window...");
            toolWin.Close(vsSaveChanges.vsSaveChangesNo);
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show("Exception: " 
              + ex.Message);
        }
    }
    

    참고 위 코드를 사용하려면 System.Windows.Forms 네임스페이스에 대한 참조가 필요합니다.

  3. 사용자 컨트롤을 반영하도록 ctlProgID, asmPath 및 guidStr 변수의 값을 변경합니다.

  4. 프로젝트를 빌드하고 실행합니다.

  5. 도구 메뉴에서 추가 기능 관리자를 클릭하여 추가 기능을 활성화합니다.

새 도구 창이 IDE에 배치된 것을 확인할 수 있습니다. 해당 창을 원하는 위치로 이동하거나 다른 도구 창과 함께 도킹할 수 있습니다.

참고 항목

작업

방법: 창 특성 변경

방법: 추가 기능 만들기

연습: 마법사 만들기

개념

옵션 설정 제어

자동화 개체 모델 차트

기타 리소스

환경 창 만들기 및 제어

추가 기능 및 마법사 만들기

자동화 및 확장성 참조