연습: 책갈피에 대한 바로 가기 메뉴 만들기
이 연습에서는 Word용 문서 수준 사용자 지정에서 Bookmark 컨트롤에 대한 바로 가기 메뉴를 만드는 방법을 보여 줍니다. 사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나고 텍스트 서식을 지정하기 위한 옵션이 제공됩니다.
적용 대상: 이 항목의 정보는 Word 2007 및 Word 2010의 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
이 연습에서는 다음 작업을 수행합니다.
디자인 타임에 문서 수준 프로젝트의 문서에 텍스트 및 책갈피 추가
바로 가기 메뉴 만들기
책갈피 겹침 검사
참고
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
사전 요구 사항
이 연습을 완료하려면 다음 구성 요소가 필요합니다.
-
Microsoft Office 개발자 도구를 포함하는 Visual Studio 2010 버전입니다. 자세한 내용은 [Office 솔루션을 개발할 수 있도록 컴퓨터 구성](bb398242\(v=vs.100\).md)을 참조하십시오.
- Microsoft Office Word 2007 또는 Word 2010
프로젝트 만들기
첫 번째 단계에서는 Visual Studio에서 Word 문서 프로젝트를 만듭니다.
새 프로젝트를 만들려면
이름이 My Bookmark Shortcut Menu인 Word 문서 프로젝트를 만듭니다. 마법사에서 새 문서 만들기를 선택합니다. 자세한 내용은 방법: Visual Studio에서 Office 프로젝트 만들기를 참조하십시오.
Visual Studio의 디자이너에 새 Word 문서가 열리고 My Bookmark Shortcut Menu 프로젝트가 솔루션 탐색기에 추가됩니다.
문서에 텍스트 및 책갈피 추가
문서에 텍스트를 추가하고 두 개의 겹치는 책갈피를 추가합니다.
문서에 텍스트를 추가하려면
다음 텍스트를 입력합니다.
이 예제에서는 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭할 때 나타나는 바로 가기 메뉴를 만듭니다.
문서에 Bookmark 컨트롤을 추가하려면
도구 상자의 Word 컨트롤 탭에서 Bookmark 컨트롤을 문서로 끌어 놓습니다.
Bookmark 컨트롤 추가 대화 상자가 나타납니다.
**텍스트를 마우스 오른쪽 단추로 클릭할 때 나타나는 바로 가기 메뉴를 만듭니다.**라는 텍스트를 선택하고 확인을 클릭합니다.
bookmark1이 문서에 추가됩니다.
다른 Bookmark 컨트롤을 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭이라는 텍스트에 추가합니다.
bookmark2가 문서에 추가됩니다.
참고
텍스트를 마우스 오른쪽 단추로 클릭이라는 텍스트가 bookmark1과 bookmark2에 모두 있습니다.
디자인 타임에 문서에 책갈피를 추가하면 Bookmark 컨트롤이 만들어집니다. 책갈피의 여러 이벤트에 대해 프로그래밍 작업을 할 수 있습니다. 사용자가 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭하면 바로 가기 메뉴가 나타나도록 책갈피의 BeforeRightClick 이벤트에 코드를 작성할 수 있습니다.
바로 가기 메뉴 만들기
바로 가기 메뉴를 만들려면
솔루션 탐색기에서 ThisDocument를 마우스 오른쪽 단추로 클릭한 다음 코드 보기를 클릭합니다.
클래스 수준에서 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;
메뉴를 만들기 위한 메서드를 추가합니다.
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; }
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(); }
책갈피의 텍스트를 서식 지정하려면
책갈피에 서식을 적용하기 위한 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; } } }
두 책갈피의 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++) { if (e.Selection.Bookmarks[i].Start > startPosition) { startPosition = e.Selection.Bookmarks[i].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; } }
C#의 경우 Startup 이벤트에 Bookmark 컨트롤에 대한 이벤트 처리기를 추가해야 합니다. 이벤트 처리기를 만드는 방법에 대한 자세한 내용은 방법: Office 프로젝트에서 이벤트 처리기 만들기를 참조하십시오.
this.bookmark1.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu); this.bookmark2.BeforeRightClick += new Microsoft.Office.Tools.Word.ClickEventHandler(ShowPopupMenu);
응용 프로그램 테스트
문서를 테스트하여 책갈피의 텍스트를 마우스 오른쪽 단추로 클릭할 때 굵게 및 기울임꼴 메뉴 항목이 바로 가기 메뉴에 나타나는지 확인하고 텍스트가 올바르게 서식 지정되는지 확인합니다.
문서를 테스트하려면
F5 키를 눌러 프로젝트를 실행합니다.
첫 번째 책갈피를 마우스 오른쪽 단추로 클릭하고 굵게를 클릭합니다.
bookmark1의 텍스트가 모두 굵게 서식 지정되는지 확인합니다.
책갈피가 겹치는 위치의 텍스트를 마우스 오른쪽 단추로 클릭하고 기울임꼴을 클릭합니다.
bookmark2의 모든 텍스트가 기울임꼴이며 bookmark2와 겹치는 bookmark1의 텍스트 부분만 기울임꼴인지 확인합니다.
다음 단계
이후에 수행할 수 있는 작업은 다음과 같습니다.
Excel에서 호스트 컨트롤의 이벤트에 응답하는 코드를 작성합니다. 자세한 내용은 연습: NamedRange 컨트롤의 이벤트 프로그래밍을 참조하십시오.
확인란을 사용하여 책갈피의 서식을 변경합니다. 자세한 내용은 연습: CheckBox 컨트롤을 사용하여 문서 서식 변경을 참조하십시오.