5,695,118 members and growing! (12,760 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » ATL » General     Intermediate License: The Code Project Open License (CPOL)

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

By chakkaradeepcc

This project aims at adding a new toolbar and button to Microsoft Outlook
VC6, C++Windows, Win2K, WinXP, Win2003, ATL, VS6, Visual Studio, Dev

Posted: 17 May 2004
Updated: 22 May 2004
Views: 84,748
Bookmarked: 31 times
Announcements
Loading...



Search    
Advanced Search
Sitemap
19 votes for this Article.
Popularity: 2.56 Rating: 2.00 out of 5
13 votes, 68.4%
1
1 vote, 5.3%
2
0 votes, 0.0%
3
2 votes, 10.5%
4
3 votes, 15.8%
5

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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

chakkaradeepcc


Chakkaradeep, known as Chaks to his friends, hails from the Indian subcontinent.Having done his Masters in Software Engineering, he knows his way around a computer and has sound knowledge of Microsoft technologies.

Chaks is currently working as a Microsoft Developer @ New Zealand.

You can reach him via his blog - http://chakkaradeep.wordpress.com
Occupation: Software Developer
Location: New Zealand New Zealand

Other popular ATL articles:

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 25 of 29 (Total in Forum: 29) (Refresh)FirstPrevNext
GeneralButtons not visible in OUTLOOKmembersumeetpk21:02 29 Nov '06  
GeneralRe: Buttons not visible in OUTLOOKmemberDigambar Borse19:17 21 Jan '07  
QuestionRe: Buttons not visible in OUTLOOKmembersrinivasan balaji0:03 9 May '07  
GeneralMicrosoft Outlook or Outlook ExpressmemberHakuna-Matada20:03 14 Jul '06  
GeneralHow to handle LButtonEvent?memberxdeveloper_del22:24 29 May '06  
QuestionHow to add a menu Item in File|New menu with C++??membermnislamshihan7:02 27 Aug '05  
General2 Bug 1)several Explorer 2) automationmemberguillaume alcalay6:23 30 Jun '05  
GeneralRe: 2 Bug 1)several Explorer 2) automationmembersrinivasan balaji2:54 24 May '07  
GeneralRe: 2 Bug 1)several Explorer 2) automationmemberguillaume alcalay2:30 25 May '07  
GeneralToolbarbutton positionsussJosef Jilch2:54 28 Apr '05  
GeneralLink ErrormemberKoundinya0:18 30 Mar '05  
GeneralRe: Link Errormemberguillaume alcalay5:50 30 Jun '05  
GeneralRe: Link ErrormemberZarTech17:07 19 Mar '08  
GeneralCOM Addin Plugin for all Outlook versionssussJLxDev10:51 16 Nov '04  
GeneralRe: COM Addin Plugin for all Outlook versionsmemberpoortl910915:05 27 Apr '05  
GeneralRe: COM Addin Plugin for all Outlook versionsmemberjswoofer12:32 1 Oct '06  
GeneralLink errormembersavages2:33 24 Jun '04  
GeneralRe: Link errormemberexcaliburger4:21 9 Nov '04  
GeneralRegarding the low ratingmemberGilad Novik5:37 23 May '04  
GeneralRe: Regarding the low ratingsussAnonymous17:47 24 Jun '04  
GeneralI didn't know you could do OE pluginsmemberJason De Arte14:56 18 May '04  
GeneralImages not displayingmemberDan Colasanti12:47 18 May '04  
GeneralRe: Images not displayingmemberchakkaradeepcc9:24 19 May '04  
GeneralRe: Images not displayingmemberDan Colasanti10:44 19 May '04  
Generalexpress?memberPaolo Messina10:37 18 May '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 22 May 2004
Editor: Smitha Vijayan
Copyright 2004 by chakkaradeepcc
Everything else Copyright © CodeProject, 1999-2008
Web17 | Advertise on the Code Project