Programming implementation of internal COM plug-ins in Access2000
Author: Xu Jing Zhou
Download Sample Code (http://www.vckbase.com/document/viewdoc.asp?id=826)
Introduction
Here, we still use the ATL in the VC6 to implement the internal COM plug-in under Access 2000, as for the basic principles and detailed implementation methods and steps, you can see the front of my article
Implementation
Open VC6.0, select the ATL COM AppWizard in the new project, enter AccessAddin in the right project name, click the Finish button to complete the project creation. Next, select the menu INSERT-> New ATL OBJEC item, select the corresponding Objects corresponding to the right of Objects corresponding to the appropriate Objects in the pop-up, click Next, enter acceaddin in the pop-up dialog box, point OK to complete Insert an ATL object.
Then by importing the model library, the right click on the CACCEADDIN class in ClassView in the CACCEADDIN class in ClassView, select the Implement Interface item in the pop-up. Click Add Typelib in the Pop-up Implementation Interface dialog box. In the pop-up Browse Type Libraries dialog box, scroll down the Microsoft Add-in Designer (1.0) sub-item, point OK button. Select the _idtextensibility2 interface in the pop-up list dialog, point the OK button to complete the import. The system will automatically generate the five required number of interfaces mentioned above.
Let's take a look at the difference between them.
The first point: registration type information is different (* .RGS), below the contents of the file acceaddin.rgs, add the code:
HKCU
{
Software
{
Microsoft
{
Office
{
ACCESS
{
Addins
{
'AccessAddin.acceddin'
{
Val FriendlyName = S 'Access2000 Plugin'
Val description = s 'uses ATL development Access2000 internal plugin'
Val loadbehavior = d '00000003'
Val CommandLinesAfe = D '00000000'
}
}
}
}
}
}
}
Second point: The import library of the type of type in STDAFX.H in the file will be different, and the following code can be added to STDAFX.H.
#pragma Warning (Disable: 4146) // Temporarily Shield Compile 4146 Warning Information
// Import Access 2000 Required Type Library ADO, DAO, VBE, OFFICE and Access libraries (specific paths can be set according to actual conditions, Jingzhou XU)
#import "D: // program files // common files // system // ado // msado21.tlb" no_namespace /
Rename ("EOF", "AdoEOF") # import "D: // Program files // Common files // microsoft shared // DAO // DAO360.DLL" RENAME ("EOF", "ENDOFFILE") /
Rename ("BOF", "Begoffile")
#import "E: // Program files // microsoft office // office // mso9.dll" Rename_NameSpace ("Office")
Using namespace office;
#import "D: // Program files // Common files // microsoft shared // vba // vba6 // vbe6ext.olb" Rename_Namespace ("VBE6")
Using namespace VBE6;
#import "E: // Program files // microsoft office // office / msacc9.olb" named_guids, rename_namespace ("msaccess")
Using namespace msaccess;
#pragma Warning (Default: 4146) // Restore compilation 4146 Warning Information
Third point: There is no ActiveExplorer object in Access 2000, so you don't have to go to CommistBars directly like Outlook2000, you can use the CommandBars object from _application. The modification section is shown in the following source code:
// Treatment when installing the plugin, Jingzhou XU
StdMethod (iDispatch * Application, EXT_CONNECTMODE CONNECTMODE, IDISPATCH * AddInSt, SafeArray * * Custom)
{
CComptr
// Access application interface _application
CCOMQIPTR
Atlassert (SPAPP);
/ / Get the CommandBars interface
HRESULT HR = SPAPP-> Get_Commandbars (& spcmdbars);
IF (Failed (HR))
Return HR;
Atlassert (spcmdbars);
// Add a tool bar and its previous bitmap button
CCOMVARIANT VNAME ("New Access 200 Tool Bar Plugin");
CComptr
// New tool strip position
CComvariant VPOS (1);
Ccomvariant vTemp (variant_true); // temporary
CCOMVARIANT VEMPTY (DISP_E_PARAMNOTFOUND, VT_ERROR);
// Add a toolbar with the add method and let spnewcmdbar points to it.
Spnewcmdbar = spcmdbars-> add (vName, VPOS, Vempty, VTEMP);
// Get the CommandBarControls of the new toolbar so that the button is added there
CComptrols> spbarcontrols;
Spbarcontrols = spbarcontrols = spnewcmdbar-> getControls (); atlassert (spbarcontrols);
// msoControlType :: msocontrolbutton = 1
Ccomvariant vtoolbartype (1);
// Display Toolbar
CCOMVARIANT VSHOW (VARIANT_TRUE);
CComptrol> SPNewBar;
// Add the first button with the Add method in CommandBarControls and let spnewbar points to it
Spnewbar = spbarcontrols-> add (vtoolbartype, vempty, vempty, vempty, vshow);
Atlassert (SPNEWBAR);
/ / Specify the _commandbarbutton interface for each button, can specify the display style of the button, etc.
CCOMQIPTR
Atlassert (spcmdbutton);
/ / Set the bitmap button style, the bitmap is 32x32 size, put it in the shear board, and paste it on the specified button with pasteface ()
Hbitmap HBMP = (Hbitmap) :: loadimage (_Module.getResourceInstance (),
MakeintResource (idb_bitmap), image_bitmap, 0,0, lr_loadmap3dcolors;
:: OpenClipboard (NULL);
:: EmptyClipboard ();
:: setClipboardData (cf_bitmap, (handle) HBMP;
:: closeclipboard ();
:: DeleteObject (HBMP);
// Paste the front settings display style
Spcmdbutton-> PutStyle (Office :: msobuttoniconandcaption);
HR = spcmdbutton-> pasteface ();
IF (Failed (HR))
Return HR;
SpcmdButton-> Putvisible (Variant_True);
SpcmdButton-> Putcaption (OLESTR ("button 1");
Spcmdbutton-> Putenabled (Variant_True);
SpcmdButton-> Puttooltiptext (OLESTR ("button 1 prompt information");
Spcmdbutton-> Puttag (OLESTR ("button 1 flag information"));
/ / Show new toolbar
Spnewcmdbar-> putvisible (variant_true);
m_spButton = spcmdbutton;
/ / Activate the event connection point of the new toolbar button
m_spapp = spApp;
HR = CommandButton1Events :: DispeventadVise ((iDispatch *) m_spButton);
IF (Failed (HR))
Return HR;
:: EmptyClipboard ();
Return S_OK;
}
The difference is mainly above three points, as for other parts, such as the toolbar button CommandBarbutton distribution interface response event, open or disconnect the connection method, etc. If you are interested in friends, please refer to several of the following references to implement articles about the internal COM plug-ins of Office2000, and then see this article and sample source code will be easy. references:
Programming Implementation of Internal COM Plugins under Office2000 - Xu Jinghou
Programming Implementation of internal COM plugins in Word2000 / XP - Xu Jingzhou
Implementation of Excel2000 / XP and PowerPoint2000 / XP - Xu Jingzhou
ATL Development Guide (Second Edition) - Tom Armstrong & Ron Patton
Contact information:
Editor Email: jingzhou_xu@163.com
Future Studio (Future Studio)