How to: Add Custom Icons to Toolbar and Menu Items
| Note | Required applications |
|---|---|
|
The code example in this topic can be compiled only if you have the required applications installed. For more information, see Features Available by Product Combination. |
|
Note |
|---|
|
This code does not compile if you use the VSTO 2005 SE version of the Outlook 2003 add-in project template. For more information, see Getting Started Programming Application-Level Add-ins. |
This example adds an icon to a command bar button on a custom menu in Microsoft Office Outlook 2003. The icon is included in the project resources. For more information about project resources, see Adding and Editing Resources (Visual C#) and How to: Add or Remove Resources.
To add custom icons
-
Add code to the Outlook project's ThisApplication.vb or ThisApplication.cs file to create CommandBarPopup and CommandBarButton controls that represent the custom menu and menu command. This code checks to see whether the menu exists. If it does exist, this code removes the menu. It then adds the new menu.
private Office.CommandBar menuBar; private Office.CommandBarPopup newMenuBar; private Office.CommandBarButton buttonOne; private string menuTag = "AUniqueTag"; private void ThisApplication_Startup(object sender, System.EventArgs e) { RemoveMenubar(); AddMenuBar(); } private void AddMenuBar() { try { menuBar = this.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) { MessageBox.Show(ex.Message); } } private void RemoveMenubar() { // If the menu already exists, remove it. try { Office.CommandBarPopup foundMenu = (Office.CommandBarPopup) this.ActiveExplorer().CommandBars.ActiveMenuBar. FindControl(Office.MsoControlType.msoControlPopup, System.Type.Missing, menuTag, true, true); if (foundMenu != null) { foundMenu.Delete(true); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
-
Create a new class named
ConvertImage. This class usesSystem.Forms.Axhostto convert an Image file to an image type that can be applied to the menu item. -
Add a method to convert the icon file into an Image file by adding it to an ImageList. This code sends the Image file to the
ConvertImage.Convertmethod you created and then returns the file to the caller.private stdole.IPictureDisp getImage() { stdole.IPictureDisp tempImage = null; try { System.Drawing.Icon newIcon = Properties.Resources.Icon1; ImageList newImageList = new ImageList(); newImageList.Images.Add(newIcon); tempImage = ConvertImage.Convert(newImageList.Images[0]); } catch (Exception ex) { MessageBox.Show(ex.Message); } return tempImage; }
Compiling the Code
This example requires:
-
An icon named
Icon1in the project resources.
Note