Snap-In Interface Technology + Embedded MFC GUI into ATL Server DLL

Web site

This code in large borrowed from an article and code sample by Steve Zimmerman "Create Apps That Are Easily Extensible with Our Smart "Snap-Ins" Methodology".   Its been updated to work with ATL 3.0 and VC 6.0, plus a few extra modifications and demonstartions of the coolest technologies :).

To see this sample code in action run the ComSnapin.exe. Your screen will look like this:

It has only 4 menu items: File; Edit; View; and Help.

Now run register.bat located in SnapinOne\ReleaseMinSize directory. This batch file will register SnapinOne.dll with the system. Run ComSnapin.exe again. Your screen should look like this:

There ia a new menu item: Snapin Commands. If you click on the menu item a Doc-View window will popup. This Doc/view framework is entirely confined inside SnapinOne.dll which is a ATL dll server.

If you run unregister.bat which will unregister SnapinOne.dll and excute program again you'll see that the menu item gone.

SnapinOne.dll can communicate with parent application via callback interfaces and obtain from it whatever information it tries to digest.

This gives your "Snapin" enabled parent program virtualy unlimited scalability.

App:

  1. Create a regular MFC exe application framework with App wizard.
  2. Include in your project files: ISnapin.h, ISnapinCallbacks.h, SnapFrm.cpp, SnapFrm.h,   SnapIn.cpp, SnapIn.h.
  3. Derive CMainFrame class from CSnapInFrame instead of CFrameWnd (or CMDIFrameWnd). Easiest way would to add thisl line right above CMainFrame delaration:  #define CFrameWnd CSnapInFrame
  4. Your application is now fully Snap-In ready!

Snap In:

  1. Create a ATL COM Project with ATL App Wizard.  Add it to a current workspace Select it to be a DLL with MFC support.
  2. Add ATL class to this project (for instance CSnapinOne).
  3. Replace base ISnapinOne to ISnapIn, so the class is derived from ISnapIn interface instead.

Downloads

Download compiled demo - 11 Kb
Download source code for demo project - 63 Kb


Comments

  • Need to implement ISnapIn as ATL class

    Posted by Legacy on 03/05/2003 12:00am

    Originally posted by: joe

    I would like to see you implement the ISnapIn and ISnapInCallback interfaces and basically the whole ComSnapIn project as regular ATL interfaces in stead of MFC ones. (just like the snapin is now ) 
    
    

    I'm trying to do so, but once i derive my ISnapInOne interface from the ATL equivalent of ISnapIn, lot's of errors occur which i can't explain yet. Could you help me out ? ---->


    class CSnapinOne :
    public ISnapIn,
    public CCallbackHelper,
    public CComObjectRoot,
    public CComCoClass<CSnapinOne,&CLSID_SnapinOne>
    {
    public:
    CSnapinOne() {}
    BEGIN_COM_MAP(CSnapinOne)
    COM_INTERFACE_ENTRY(ISnapIn)
    END_COM_MAP() etc.etc.etc....

    this failes when the ISnapIn itself is an ATL based interface....

    Reply
  • error C2787

    Posted by Legacy on 02/14/2003 12:00am

    Originally posted by: Andreas Frey

    Can anybody help me out ?!
    
    

    if i try to replace base ATL class with ISnapIn, i get error C2787 "no GUID has been associated with this object"
    The things work well in demo project, but if i try to make my own snapin server i cannot change:

    BEGIN_COM_MAP(CSnapinOne)
    COM_INTERFACE_ENTRY(ISnapIn)
    END_COM_MAP()

    i have to leave it original:
    BEGIN_COM_MAP(CSnapinOne)
    COM_INTERFACE_ENTRY(CSnapinOne)
    END_COM_MAP()

    the files look quite like the ones in demo project, but dont work!
    Can anybody help me out?

    Reply
  • Keyboard handling

    Posted by Legacy on 01/17/2003 12:00am

    Originally posted by: S

    How can you catch all keyboard events when snapin is active? Some keyboard messages seems to be processed in main window and not in snapin.

    Reply
  • How about a toolbar?...

    Posted by Legacy on 06/07/2002 12:00am

    Originally posted by: Vitaly

    Try to add a toolbar to the Main Frame and you will see that things are not so simple and beatiful as it may seem.
    There is not a direct way to support buttons update and tooltips... Plus, status bar does not show the CAPS, NUM and INS updates as well.
    Do you have some ideas how to implement it?...
    :o)

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Today's agile organizations pose operations teams with a tremendous challenge: to deploy new releases to production immediately after development and testing is completed. To ensure that applications are deployed successfully, an automatic and transparent process is required. We refer to this process as Zero Touch Deployment™. This white paper reviews two approaches to Zero Touch Deployment--a script-based solution and a release automation platform. The article discusses how each can solve the key …

  • On-demand Event Event Date: October 29, 2014 It's well understood how critical version control is for code. However, its importance to DevOps isn't always recognized. The 2014 DevOps Survey of Practice shows that one of the key predictors of DevOps success is putting all production environment artifacts into version control. In this webcast, Gene Kim discusses these survey findings and shares woeful tales of artifact management gone wrong! Gene also shares examples of how high-performing DevOps …

Most Popular Programming Stories

More for Developers

RSS Feeds