방법: 도구 모음 및 메뉴 항목에 사용자 지정 아이콘 추가
이 예제에서는 Microsoft Office Outlook의 사용자 지정 메뉴에 있는 명령 모음 단추에 아이콘을 추가합니다. 이 아이콘은 프로젝트 리소스에 포함되어 있습니다. 프로젝트 리소스에 대한 자세한 내용은 Adding and Editing Resources (Visual C#) 및 방법: 리소스 추가 또는 제거를 참조하십시오.
적용 대상: 이 항목의 정보는 InfoPath 2007, Outlook 2007, Project 2007 및 Visio 2007의 응용 프로그램 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.
이 예제는 Outlook과 관련된 내용이지만 명령 모음 단추에 아이콘을 추가하는 이 코드 부분은 위에 나열된 모든 응용 프로그램에서 명령 모음 단추에 아이콘을 추가하는 데 사용할 수 있습니다.
사용자 지정 아이콘을 추가하려면
사용자 지정 메뉴와 메뉴 명령을 나타내는 CommandBarPopup 및 CommandBarButton 컨트롤을 만드는 코드를 Outlook 프로젝트의 ThisAddIn.vb 또는 ThisAddIn.cs 파일에 추가합니다. 이 코드에서는 메뉴가 있는지 여부를 확인합니다. 메뉴가 있으면 이 코드에서 메뉴를 제거한 다음 새 메뉴를 추가합니다.
Private MenuBar As Office.CommandBar Private newMenuBar As Office.CommandBarPopup Private ButtonOne As Office.CommandBarButton Private menuTag As String = "AUniqueName" Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup RemoveMenubar() AddMenuBar() End Sub Private Sub AddMenuBar() Try MenuBar = Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar newMenuBar = MenuBar.Controls.Add( _ Office.MsoControlType.msoControlPopup, _ Temporary:=False) If newMenuBar IsNot Nothing Then newMenuBar.Caption = "See New Icon" newMenuBar.Tag = menuTag ButtonOne = newMenuBar.Controls.Add( _ Office.MsoControlType.msoControlButton, _ Before:=1, Temporary:=False) With ButtonOne .Style = Office.MsoButtonStyle _ .msoButtonIconAndCaption .Caption = "New Icon" .FaceId = 65 .Tag = "c123" .Picture = getImage() End With newMenuBar.Visible = True End If Catch Ex As Exception MsgBox(Ex.Message) End Try End Sub Private Sub RemoveMenubar() Try ' If the menu already exists, remove it. Dim foundMenu As Office.CommandBarPopup = _ Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar. _ FindControl(Office.MsoControlType.msoControlPopup, _ System.Type.Missing, menuTag, True, True) If foundMenu IsNot Nothing Then foundMenu.Delete(True) End If Catch Ex As Exception MsgBox(Ex.Message) End Try End Sub
private Office.CommandBar menuBar; private Office.CommandBarPopup newMenuBar; private Office.CommandBarButton buttonOne; private string menuTag = "AUniqueTag"; private void ThisAddIn_Startup(object sender, System.EventArgs e) { RemoveMenubar(); AddMenuBar(); } private void AddMenuBar() { try { menuBar = this.Application.ActiveExplorer().CommandBars.ActiveMenuBar; newMenuBar = (Office.CommandBarPopup)menuBar.Controls.Add( Office.MsoControlType.msoControlPopup, missing, missing, missing, false); if (newMenuBar != null) { newMenuBar.Caption = "See New Icon"; newMenuBar.Tag = menuTag; buttonOne = (Office.CommandBarButton) newMenuBar.Controls. Add(Office.MsoControlType.msoControlButton, System. Type.Missing, System.Type.Missing, 1, true); buttonOne.Style = Office.MsoButtonStyle. msoButtonIconAndCaption; buttonOne.Caption = "New Icon"; buttonOne.FaceId = 65; buttonOne.Tag = "c123"; buttonOne.Picture = getImage(); newMenuBar.Visible = true; } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } private void RemoveMenubar() { // If the menu already exists, remove it. try { Office.CommandBarPopup foundMenu = (Office.CommandBarPopup) this.Application.ActiveExplorer().CommandBars.ActiveMenuBar. FindControl(Office.MsoControlType.msoControlPopup, System.Type.Missing, menuTag, true, true); if (foundMenu != null) { foundMenu.Delete(true); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } }
ConvertImage라는 새 클래스를 만듭니다. 이 클래스에서는 System.Forms.Axhost를 사용하여 Image 파일을 메뉴 항목에 적용될 수 있는 이미지 형식으로 변환합니다.
<Global.System.Security.Permissions.PermissionSetAttribute _ (Global.System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Public Class ConvertImage Inherits System.Windows.Forms.AxHost Public Sub New() MyBase.New("59EE46BA-677D-4d20-BF10-8D8067CB8B32") End Sub Public Shared Function Convert(ByVal Image _ As System.Drawing.Image) As stdole.IPictureDisp Convert = GetIPictureFromPicture(Image) End Function End Class
sealed public class ConvertImage : System.Windows.Forms.AxHost { private ConvertImage() : base(null) { } public static stdole.IPictureDisp Convert (System.Drawing.Image image) { return (stdole.IPictureDisp)System. Windows.Forms.AxHost .GetIPictureDispFromPicture(image); } }
아이콘 파일을 ImageList에 추가하여 아이콘 파일을 Image 파일로 변환하는 메서드를 추가합니다. 이 코드에서는 Image 파일을 사용자가 만든 ConvertImage.Convert 메서드로 보낸 다음 해당 파일을 호출자에게 반환합니다.
Private Function getImage() As stdole.IPictureDisp Dim tempImage As stdole.IPictureDisp = Nothing Try Dim newIcon As System.Drawing.Icon = My.Resources.Icon1 Dim newImageList As New System.Windows.Forms.ImageList newImageList.Images.Add(newIcon) tempImage = ConvertImage.Convert(newImageList.Images(0)) Catch ex As Exception MsgBox(ex.Message) End Try Return tempImage End Function
private stdole.IPictureDisp getImage() { stdole.IPictureDisp tempImage = null; try { System.Drawing.Icon newIcon = Properties.Resources.Icon1; System.Windows.Forms.ImageList newImageList = new System.Windows.Forms.ImageList(); newImageList.Images.Add(newIcon); tempImage = ConvertImage.Convert(newImageList.Images[0]); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } return tempImage; }
코드 컴파일
이 예제에는 다음 사항이 필요합니다.
- 프로젝트 리소스에 Icon1이라는 아이콘
참고 항목
작업
방법: Outlook에 사용자 지정 메뉴 및 메뉴 항목 추가
방법: 응용 프로그램 아이콘 지정(Visual Basic, C#)