Click here to Skip to main content
6,630,901 members and growing! (15,804 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
VC6Win2K, WinXP, Win2003, ATL, Dev
Posted:17 May 2004
Updated:22 May 2004
Views:100,576
Bookmarked:38 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
19 votes for this article.
Popularity: 2.56 Rating: 2.00 out of 5
13 votes, 68.4%
1
1 vote, 5.3%
2

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


Member
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
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 34 (Total in Forum: 34) (Refresh)FirstPrevNext
GeneralPlugin is not loaded for other MS Outlook 2000 instance Pinmembersunil_200822:08 10 Aug '09  
GeneralControls ID Pinmembersunil_20083:57 8 Aug '09  
GeneralOnDisconnection is not called for MS Outlook of office 2000 Pinmembersunil_20083:33 8 Aug '09  
GeneralOutlook plugin is not loaded on vista Pinmembersunil_20083:13 8 Aug '09  
QuestionLoad Behavior 16 or 3 Pinmemberxubutian14:32 26 Jan '09  
GeneralButtons not visible in OUTLOOK Pinmembersumeetpk21:02 29 Nov '06  
GeneralRe: Buttons not visible in OUTLOOK PinmemberDigambar Borse19:17 21 Jan '07  
QuestionRe: Buttons not visible in OUTLOOK Pinmembersrinivasan balaji0:03 9 May '07  
GeneralMicrosoft Outlook or Outlook Express PinmemberHakuna-Matada20:03 14 Jul '06  
GeneralHow to handle LButtonEvent? Pinmemberxdeveloper_del22:24 29 May '06  
QuestionHow to add a menu Item in File|New menu with C++?? Pinmembermnislamshihan7:02 27 Aug '05  
General2 Bug 1)several Explorer 2) automation Pinmemberguillaume alcalay6:23 30 Jun '05  
GeneralRe: 2 Bug 1)several Explorer 2) automation Pinmembersrinivasan balaji2:54 24 May '07  
GeneralRe: 2 Bug 1)several Explorer 2) automation Pinmemberguillaume alcalay2:30 25 May '07  
GeneralToolbarbutton position PinsussJosef Jilch2:54 28 Apr '05  
GeneralLink Error PinmemberKoundinya0:18 30 Mar '05  
GeneralRe: Link Error Pinmemberguillaume alcalay5:50 30 Jun '05  
GeneralRe: Link Error PinmemberZarTech17:07 19 Mar '08  
GeneralCOM Addin Plugin for all Outlook versions PinsussJLxDev10:51 16 Nov '04  
GeneralRe: COM Addin Plugin for all Outlook versions Pinmemberpoortl910915:05 27 Apr '05  
GeneralRe: COM Addin Plugin for all Outlook versions Pinmemberjswoofer12:32 1 Oct '06  
GeneralLink error Pinmembersavages2:33 24 Jun '04  
GeneralRe: Link error Pinmemberexcaliburger4:21 9 Nov '04  
GeneralRegarding the low rating PinmemberGilad Novik5:37 23 May '04  
GeneralRe: Regarding the low rating PinsussAnonymous17:47 24 Jun '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-2009
Web20 | Advertise on the Code Project