Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Adding a new Toolbar and Button to Microsoft Outlook Tutorial - 1

0.00/5 (No votes)
22 May 2004 1  
This project aims at adding a new toolbar and button to Microsoft Outlook

Introduction

  1. Select new ATL COM Wizard - and then select DLL Project.
  2. Add an ATL Object through Wizard.
  3. Implement Interface -> Add Type Lib -> Microsoft Add-in Designer -> _IDTExtensibility2.
  4. Add Outlook architecture and Outlook library in stdafx.h. This changes according to your system configuration where you have installed Office.

    This is pertaining to Microsoft Office XP:

    #import "C:\Program Files\Common Files\Microsoft 
      Shared\Office10\mso.dll" rename_namespace("Office"), 
      named_guids using namespace Office; 
    #import "D:\Program Files\Microsoft Office\Office10\MSOUTL.olb" 
      rename_namespace("Outlook"), named_guids, 
      raw_interfaces_only using namespace Outlook;

    For Office 2000:

    #import "D:\Program Files\Microsoft Office\Office\mso9.dll" 
      rename_namespace("Office"), named_guids using namespace Office; 
    #import "D:\Program Files\Microsoft Office\Office\MSOUTL9.olb" 
      rename_namespace("Outlook"), named_guids, 
      raw_interfaces_only using namespace Outlook;
  5. Add Registry entry in Addin.rgs.
    HKCU
    {
    Software
    {
    Microsoft
    {
    Office
    {
    Outlook
    {
    Addins
    {
    'MyAddin.Addin'
    {
    val FriendlyName = s 'My Outlook Addin'
    val Description = s 'Outlook Addin'
    val LoadBehavior = d '00000016'
    val CommandLineSafe = d '00000000' 
    }
    }
    }
    }
    }
    }
    }
  6. Add member variables in Addin.h.
  7. Add the following code in Addin.h's OnConnection method:
    STDMETHOD(OnConnection)(IDispatch * Application, 
        ext_ConnectMode ConnectMode, IDispatch * AddInInst, 
        SAFEARRAY * * custom)
    {
    // QueryInterface() for _Application
    
    CComQIPtr <Outlook::_Application> spApp(Application); 
    ATLASSERT(spApp);
    
    //make a copy of our Application Object
    
    m_spApp = spApp;
    
    //get the ActiveExplorer Object
    
    //each window is called as an Explorer in Outlook
    
    //so our current viewing wimdow when Outlook starts is Explorer
    
    //so get the object
    
    spApp->ActiveExplorer(&spExplorer);
    
    
    // get the CommandBars interface that represents Outlook's
    
    // toolbars & menu items 
    
    HRESULT hr = spExplorer->get_CommandBars(&spCmdBars);
    if(FAILED(hr))
    return hr;
    ATLASSERT(spCmdBars);
    
    //give a name for our newly created Toolbar
    
    CComVariant vName("MyAddin Toolbar");
    //obtain a reference to CommandBar Control
    
    CComPtr <Office::CommandBar> spNewCmdBar;
    //sepcify in which position our button to be placed.
    
    //for us it is 1st position
    
    CComVariant vPos(1); 
    CComVariant vTemp(VARIANT_TRUE); 
    CComVariant vEmpty(DISP_E_PARAMNOTFOUND, VT_ERROR); 
    
    //add the toolbar 
    
    spNewCmdBar = spCmdBars->Add(vName, vPos, vEmpty, vTemp);
    
    //to add a button to our toolbar we have to get a reference
    
    //to CommandBarControls Control.Consider Button as a Command
    
    //BarControl.For Further details,refer Microsoft Outlook
    
    //Object Model.
    
    CComPtr < Office::CommandBarControls> spBarControls;
    spBarControls = spNewCmdBar->GetControls();
    ATLASSERT(spBarControls);
    //MsoControlType::msoControlButton = 1
    
    CComVariant vToolBarType(1);
    //show the toolbar
    
    CComVariant vShow(VARIANT_TRUE);
    CComPtr < Office::CommandBarControl> spNewBar; 
    //now add the CommandBarControls of type Button 
    
    spNewBar = spBarControls->Add(vToolBarType, 
                     vEmpty, vEmpty, vEmpty, vShow); 
    ATLASSERT(spNewBar);
    
    _bstr_t bstrNewCaption(OLESTR("Item1"));
    _bstr_t bstrTipText(OLESTR("Tooltip for Item1"));
    //now comes the work of adding the Button to our CommandBarControl
    
    //get a reference to CommandBarButton
    
    CComQIPtr < Office::_CommandBarButton> spCmdButton(spNewBar);
    ATLASSERT(spCmdButton);
    
    //assign the properties
    
    spCmdButton->PutVisible(VARIANT_TRUE); 
    spCmdButton->PutCaption(OLESTR("MyButton")); 
    spCmdButton->PutEnabled(VARIANT_TRUE);
    spCmdButton->PutTooltipText(OLESTR("Tooltip for MyButton")); 
    spCmdButton->PutTag(OLESTR("Tag for MyButton")); 
    
    //put into picture the New CommandBarControl too
    
    spNewCmdBar->PutVisible(VARIANT_TRUE); 
    
    m_spButton = spCmdButton;
    
    return E_NOTIMPL;
    }
  8. Save and compile the Project.

That's it!!!!...... You have successfully added a new Toolbar with a new Button placed in it!!!!!

Congrats....your first step in Add-in tutorial is over!!!!!!!!

How To See My Add-in???

--->Open Outlook Express. Since in Registry Settings, for Load Behavior we have specified 00000016, this loads our add-in at startup of Outlook Express each time. The other load behaviors are as follows:

  • 00000008 - Load By Demand.
  • 00000003 - Load at Startup only once.

--->I request all the users to use 00000016 because it can relieve confusion of how to load an add-in.

If Add-in not loaded...then how to load???

--->The work is simple....Open Outlook Express... choose Tools....Options.... you will get a tab, choose 'other' options from the tab... and then choose 'Advanced Options'... and then 'COM Add-ins'...you will now see your registered add-ins list... choose your add-in and press OK.

So your first task of adding a Button is over...soon you will have the code for responding to the Button Click produced to you.....

Please feel free to send your reviews to chakkaradeepcc@yahoo.com.

Credits:

  1. This tutorial was based on the idea of Amit Dey in his tutorial, Building an Office2K COM add-in with VC++/ATL.

    So all my thanks goes to Mr.Amit Dey who was 'the guru' for me to Add-ins.

  2. And I mention Igor Tandek of Microsoft Corporation for his great help in making me understand the Inner Concepts of Add-ins along with ATL COM.

A small request to Amit Dey....any contact number or address or mail-id?

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here