Modifying property sheet templates on Win95

Download the source

This code is written to fix the bug in CPropertySheet::DoModal() or CPropertySheet::Create() as described in MSKB article ID: Q158552.

The description of the bug:

(This bug is present for comctl32.dll version <4.70 and Windows95.) When a property sheet displays its property pages, it has to modify their templates. It tries to write into the memory; that works under Win32s (because the resources are writable) and it works under WinNT (because BeginResourceUpdate exists) but it fails under Win95 and raises an Access Violation. If you are not working with exceptions (try/catch(...), __try/__except, _set_se_translator) everything's OK - the OS gets the exception, unlocks the resources (or copies them to writable memory). However, if you're trying to be a good programmer and you add some code to your app to catch OS exceptions you are in a deep trouble.

The suggested fix #1 in the KB article (make the .rsrc section writable) is OK but error-prone. It is not a very aestheticly pleasing solution either.

The suggested fix #2 in the KB article is nonsense - or I didn't understand correctly what it says.

The suggested fix #3 is unusable if you want to have __try/__except. Also, you can't catch access violations when the property sheet is active.

In this article, I offer another solution: I created a CSafePropertyPage class based on CPropertyPage. The one and only difference is that this modified property page uses a (potentially writable) copy of a dialog template instead of just using resource ID. It uses undocumented MFC class CDialogTemplate (defined in afxpriv.h) but you may look up the source code of CDialogTemplate and supply your own CDialogTemplate::Load if you desperately want to keep the documented/undocumented paradigm of MFC.

Attached are the source files - just include the header where you need it and use CSafePropertyPage anywhere you'd use CPropertyPage.

Last updated: 30 June 1998



Comments

  • Modifying Property Sheet Templates on Win95

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

    Originally posted by: Gerd Neumann

    Dear Petr Novotny,

    this was my rescue !!

    Thanks

    Reply
  • CPropertyPage::DoModal

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

    Originally posted by: Daedalus

    I've experienced the problem you mentioned with the DoModal member function of MFC's CPropertySheet class. You suggested that you've created a class CSafePropertySheet, however I can't seem to find the code.

    Would you mind pointing me in the right direction? Meanwhile, I'll try looking through the MFC code that you suggested.

    Thanks.

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

Top White Papers and Webcasts

  • Live Event Date: September 10, 2014 @ 11:00 a.m. ET / 8:00 a.m. PT Modern mobile applications connect systems-of-engagement (mobile apps) with systems-of-record (traditional IT) to deliver new and innovative business value. But the lifecycle for development of mobile apps is also new and different. Emerging trends in mobile development call for faster delivery of incremental features, coupled with feedback from the users of the app "in the wild". This loop of continuous delivery and continuous feedback is …

  • Java developers know that testing code changes can be a huge pain, and waiting for an application to redeploy after a code fix can take an eternity. Wouldn't it be great if you could see your code changes immediately, fine-tune, debug, explore and deploy code without waiting for ages? In this white paper, find out how that's possible with a Java plugin that drastically changes the way you develop, test and run Java applications. Discover the advantages of this plugin, and the changes you can expect to see …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds