다음을 통해 공유


연습: 책갈피에 대한 바로 가기 메뉴 만들기

업데이트: 2007년 11월

적용 대상

이 항목의 정보는 지정된 Visual Studio Tools for Office 프로젝트 및 Microsoft Office 버전에만 적용됩니다.

프로젝트 형식

  • 문서 수준 프로젝트

Microsoft Office 버전

  • Word 2007

  • Word 2003

자세한 내용은 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

이 연습에서는 Word용 문서 수준 사용자 지정에서 Bookmark 컨트롤에 대한 바로 가기 메뉴를 만드는 방법을 보여 줍니다. 사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나고 텍스트 서식을 지정하기 위한 옵션이 제공됩니다.

이 연습에서는 다음 작업을 수행합니다.

  • 디자인 타임에 문서 수준 프로젝트의 문서에 텍스트 및 책갈피 추가

  • 바로 가기 메뉴 만들기

  • 책갈피 겹침 검사

참고:

다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.

사전 요구 사항

이 연습을 완료하려면 다음 구성 요소가 필요합니다.

  • Visual Studio Tools for Office(Visual Studio 2008 Professional 및 Visual Studio Team System의 선택적 구성 요소)

  • Microsoft Office Word 2003 또는 Microsoft Office Word 2007

Visual Studio Tools for Office는 기본적으로 나열된 Visual Studio 버전과 함께 설치됩니다. 설치 여부를 확인하려면 Visual Studio Tools for Office 설치를 참조하십시오.

프로젝트 만들기

첫 번째 단계에서는 Visual Studio에서 Word 문서 프로젝트를 만듭니다.

새 프로젝트를 만들려면

  • 이름이 My Bookmark Shortcut Menu인 Word 문서 프로젝트를 만듭니다. 마법사에서 새 문서 만들기를 선택합니다. 자세한 내용은 방법: Visual Studio Tools for Office 프로젝트 만들기를 참조하십시오.

    Visual Studio의 디자이너에 새 Word 문서가 열리고 My Bookmark Shortcut Menu 프로젝트가 솔루션 탐색기에 추가됩니다.

문서에 텍스트 및 책갈피 추가

문서에 텍스트를 추가하고 두 개의 겹치는 책갈피를 추가합니다.

문서에 텍스트를 추가하려면

  • 다음 텍스트를 입력합니다.

    이 예제에서는 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭할 때 나타나는 바로 가기 메뉴를 만듭니다.

문서에 Bookmark 컨트롤을 추가하려면

  1. 도구 상자Word 컨트롤 탭에서 Bookmark 컨트롤을 문서로 끌어 놓습니다.

    Bookmark 컨트롤 추가 대화 상자가 나타납니다.

  2. **텍스트를 마우스 오른쪽 단추로 클릭할 때 나타나는 바로 가기 메뉴를 만듭니다.**라는 텍스트를 선택하고 확인을 클릭합니다.

    bookmark1이 문서에 추가됩니다.

  3. 다른 Bookmark 컨트롤을 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭이라는 텍스트에 추가합니다.

    bookmark2가 문서에 추가됩니다.

    참고:

    텍스트를 마우스 오른쪽 단추로 클릭이라는 텍스트가 bookmark1과 bookmark2에 모두 있습니다.

디자인 타임에 문서에 책갈피를 추가하면 Bookmark 컨트롤이 만들어집니다. 책갈피의 여러 이벤트에 대해 프로그래밍 작업을 할 수 있습니다. 사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나도록 책갈피의 BeforeRightClick 이벤트에 코드를 작성할 수 있습니다.

바로 가기 메뉴 만들기

바로 가기 메뉴를 만들려면

  1. 솔루션 탐색기에서 ThisDocument를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.

  2. 클래스 수준에서 CommandBar 변수와 책갈피 변수를 선언합니다.

    Private commandBar As Office.CommandBar
    Private selectedBookmark As Microsoft.Office.Tools.Word.Bookmark
    WithEvents boldText As Office.CommandBarButton
    WithEvents ItalicText As Office.CommandBarButton
    
    private Office.CommandBar commandBar;
    private Office.CommandBarButton boldText;
    private Office.CommandBarButton italicText;
    private Microsoft.Office.Tools.Word.Bookmark selectedBookmark;
    
    const int WordTrue = -1;
    const int WordFalse = 0;
    
  3. 메뉴를 만들기 위한 메서드를 추가합니다.

    Private Sub AddPopUp()
    
        commandBar = Application.CommandBars.Add( _
            "FormatText", Office.MsoBarPosition.msoBarPopup, , True)
    
        ' Add a button and set the style, caption, icon and tag.
        boldText = CType(commandBar.Controls.Add(1), Office.CommandBarButton)
    
        With boldText
            .Style = Office.MsoButtonStyle.msoButtonIconAndCaption
            .Caption = "Bold"
            .FaceId = 113
            .Tag = "0"
        End With
    
        ' Add a button and set the style, caption, icon and tag.
        ItalicText = CType(commandBar.Controls.Add(1), Office.CommandBarButton)
    
        With ItalicText
            .Style = Office.MsoButtonStyle.msoButtonIconAndCaption
            .Caption = "Italic"
            .FaceId = 114
            .Tag = "1"
        End With
    
        CType(Me.AttachedTemplate, Microsoft.Office.Interop.Word.Template).Saved = True
    
    End Sub
    
    private void AddPopUp()
    {
        commandBar = Application.CommandBars.Add("FormatText",
            Office.MsoBarPosition.msoBarPopup, missing, true);
    
        // Add a button and set the style, caption, icon and tag.
        boldText = (Office.CommandBarButton)commandBar.Controls.Add(
            1, missing, missing, missing, missing);
    
        boldText.Style = Office.MsoButtonStyle.msoButtonCaption;
        boldText.Caption = "Bold";
        boldText.FaceId = 113;
        boldText.Tag = "0";
    
        // Add a button and set the style, caption, icon and tag.
        italicText = (Office.CommandBarButton)commandBar.Controls.Add(
            1, missing, missing, missing, missing);
    
        italicText.Style = Office.MsoButtonStyle.msoButtonCaption;
        italicText.Caption = "Italic";
        italicText.FaceId = 114;
        italicText.Tag = "1";
    
        // Handle the click events with the ButtonClick procedure.
        boldText.Click += new Microsoft.Office.Core
            ._CommandBarButtonEvents_ClickEventHandler(ButtonClick);
    
        italicText.Click += new Microsoft.Office.Core
            ._CommandBarButtonEvents_ClickEventHandler(ButtonClick);
    
        ((Microsoft.Office.Interop.Word.Template)this.AttachedTemplate).Saved = true;
    }
    
  4. ThisDocument의 Startup 이벤트에서 AddPopup을 호출합니다.

    Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As _
        System.EventArgs) Handles Me.Startup
    
        AddPopUp()
    End Sub
    
    private void ThisDocument_Startup(object sender, System.EventArgs e)
    {
        AddPopUp();
    }
    

책갈피의 텍스트를 서식 지정하려면

  1. 책갈피에 서식을 적용하기 위한 ButtonClick 이벤트 처리기를 추가합니다.

    Private Sub ButtonClick(ByVal ctrl As Office.CommandBarButton, _
        ByRef Cancel As Boolean) Handles boldText.Click, ItalicText.Click
    
        Select Case ctrl.Caption
            Case "Bold"
                selectedBookmark.Bold = Not selectedBookmark.Bold
            Case "Italic"
                selectedBookmark.Italic = Not selectedBookmark.Italic
        End Select
    
        Me.ActiveWindow.SetFocus()
    End Sub
    
    private void ButtonClick(Microsoft.Office.Core.CommandBarButton Ctrl, 
        ref bool CancelDefault)
    {
        if (Ctrl.Caption == "Bold")
        {
            if (selectedBookmark.Bold == WordTrue)
            {
                selectedBookmark.Bold = WordFalse;
            }
            else 
            {
                selectedBookmark.Bold = WordTrue;
            }
        }
        else if (Ctrl.Caption == "Italic")
        {
            if (selectedBookmark.Italic == WordTrue)
            {
                selectedBookmark.Italic = WordFalse;
            }
            else
            {
                selectedBookmark.Italic = WordTrue;
            } 
        }
    }
    
  2. 두 책갈피의 BeforeRightClick 이벤트를 처리하기 위한 showPopupMenu 이벤트 처리기를 추가합니다.

    참고:

    책갈피가 겹치는 경우 이를 처리하기 위한 코드를 작성해야 합니다. 그렇지 않으면 기본적으로 선택 영역의 모든 책갈피에 대한 코드가 호출됩니다.

    Private Sub showPopupMenu(ByVal sender As Object, ByVal e _
        As Microsoft.Office.Tools.Word.ClickEventArgs) _
        Handles Bookmark1.BeforeRightClick, Bookmark2.BeforeRightClick
    
        Dim startPosition As Integer = 0
        Dim i As Integer
    
        ' If bookmarks overlap, get bookmark closest to cursor.
        For i = 1 To e.Selection.Bookmarks.Count
            If e.Selection.Bookmarks(i).Start > startPosition Then
                startPosition = e.Selection.Bookmarks(i).Start
            End If
        Next
    
        ' If closest bookmark is the sender, show the popup.
        If DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark).Start = _
            startPosition Then
            selectedBookmark = DirectCast(sender, Microsoft.Office.Tools.Word.Bookmark)
            commandBar.ShowPopup()
            e.Cancel = True
        End If
    End Sub
    
    private void showPopupMenu(object sender, 
        Microsoft.Office.Tools.Word.ClickEventArgs e)
    {
        int startPosition = 0;
    
        // If bookmarks overlap, get bookmark closest to cursor.
        for (int i = 1; i <= e.Selection.Bookmarks.Count; i++)
        {
            object o = i;
            if (e.Selection.Bookmarks.get_Item(ref o).Start > startPosition)
            {
                startPosition = e.Selection.Bookmarks.get_Item(ref o).Start;
            }
        }
    
        // If closest bookmark is the sender, show the popup.
        if (((Microsoft.Office.Tools.Word.Bookmark)sender).Start == startPosition)
        {
            selectedBookmark = (Microsoft.Office.Tools.Word.Bookmark)sender;
            commandBar.ShowPopup(missing, missing);
            e.Cancel = true;
        }
    
    
    }
    
  3. C#의 경우 Startup 이벤트에 Bookmark 컨트롤에 대한 이벤트 처리기를 추가해야 합니다. 이벤트 처리기를 만드는 방법에 대한 자세한 내용은 방법: Visual Studio Tools for Office에서 이벤트 처리기 만들기를 참조하십시오.

    this.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.
        ClickEventHandler(showPopupMenu);
    
    this.bookmark2.BeforeRightClick += new Microsoft.Office.Tools.Word.
        ClickEventHandler(showPopupMenu);
    

응용 프로그램 테스트

문서를 테스트하여 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭할 때 굵게 및 기울임꼴 메뉴 항목이 바로 가기 메뉴에 나타나는지 확인하고 텍스트가 올바르게 서식 지정되는지 확인합니다.

문서를 테스트하려면

  1. F5 키를 눌러 프로젝트를 실행합니다.

  2. 첫 번째 책갈피를 마우스 오른쪽 단추로 클릭하고 굵게를 클릭합니다.

  3. bookmark1의 텍스트가 모두 굵게 서식 지정되는지 확인합니다.

  4. 책갈피가 겹치는 위치의 텍스트를 마우스 오른쪽 단추로 클릭하고 기울임꼴을 클릭합니다.

  5. bookmark2의 모든 텍스트가 기울임꼴이며 bookmark2와 겹치는 bookmark1의 텍스트 부분만 기울임꼴인지 확인합니다.

다음 단계

이후에 수행할 수 있는 작업은 다음과 같습니다.

참고 항목

개념

Word를 사용한 연습

Office UI 사용자 지정

책갈피 컨트롤

Office 솔루션의 선택적 매개 변수 이해

기타 리소스

Word 호스트 컨트롤