Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


ATL Control and Persistence

Posted on 1999-01-20
Medium Priority
Last Modified: 2013-11-25
I created a control using the ATL wizards in VC++ 6.  I added a 'Full Control' into the ATL project (derived from a Combo Box) and a 'Property Page' object.

I added several check boxes onto the property page, then tied them to the control using PROP_ENTRY and the IDL ID.  When I use my new control in Test Container, the property page works fine.  It remembers it's settings and implements the changes correctly.

However, when I try to insert my control into a test MFC applet, the property page does not work as expected.  When I bring up the properties, the page is initialised correctly.  Setting options and closing the properties dialog, then bringing it up again seems to remember the settings I chose, but the moment I save the resource, the changes are lost.

Do I have to implement persistence for my property page/control (Save/Load/InitNew methods) and if so, how do I go about doing this - MSDN seems very contradictory in this area.


Question by:pswann
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 15

Expert Comment

by:Tommy Hui
ID: 1328006
Persistence is a weird subject because there have been many different versions and different attempts at it. Basically, the idea is that the container knows where to save things and asks each of the controls to save themselves. But the main problem is that there are three different methods of persistence: IPersistStorage, IPersistStreamInit, and IPersistPropertyBag. It is up to the container to decide which of these interfaces to support. ATL helps a lot here, but not all of it.

ATL only supports integer properties for persistence. If you have any other data types (objects or strings, or anything else), you will need to write the code yourself.

I would recommend you go to and download the code for Beginning ATL COM Programming and take a look at the code for chapter 8. Another resource is at the same web site, but download Professional ATL COM Programming and look at the code for Chapter 10. Both of these books are excellent for ATL programming.
LVL 23

Expert Comment

ID: 1328007
There is an article on under ATL & COM. Its titled "ActiveX Control Tutuorial". It explains the persistence and has implemented all possible persistence types for an control. It should give you an a idea,

Author Comment

ID: 1328008
We have had a look at the web sites indicated above but they did not provide any information as to why our information is not be serialised correctly within the resource.

The properties  we are attempting so save are all integer properties. (we have 5 separate checkboxes on a property page). We are using the Prop_Entry() macro and we believe this should be sufficient to serialise these properties ?

Accepted Solution

shaig earned 600 total points
ID: 1328009
Adding entries to the property map isn't enough.
You should inherit from the proper templates and add the interfaces to your object.

All interfaces thui mentioned have ...Impl templates to inherit from, dig into this direction.


Author Comment

ID: 1328010
Thuis answer was probably better but thanks for the advice

Featured Post

NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA.…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question