PRB: Child CPropertySheet Hangs If Focus Is Switched

Article translations Article translations
Article ID: 149501 - View products that this article applies to.
This article was previously published under Q149501
Expand all | Collapse all

On This Page

SYMPTOMS

If a modeless CPropertySheet is a child of a CDialog or another CPropertySheet, the program will hang in the following situations:

  • The focus is switched back to a PropertyPage that previously had the focus.
  • The focus is placed on a control on a PropertyPage, and then the focus is switched to another window (for example, Program Manager).
  • The focus is on a control on a PropertyPage and the PropertySheet is closed.
The program hangs because the child CPropertySheet continuously receives a WM_GETDLGCODE message.

CAUSE

By default, CPropertyPages have a WS_EX_CONTROLPARENT style. However, CPropertySheets do not have this style. This style allows a user to press the TAB key to move from a control inside the page to one in the sheet.

When the focus is switched from the CPropertyPage, code that handles default command buttons loops through all the controls in the pages and the sheet. Cycling through controls is done using GetNextDlgTabItem(). The loop cycles through controls in the page in the child CPropertySheet and finds its way to controls in the parent page or parent dialog. At this point, GetNextDlgTabItem() is not able to find controls inside the child CPropertySheet because it doesn't have a WS_EX_CONTROLPARENT style. The loop never ends because it never finds the original control that had the focus.

RESOLUTION

Override OnInitDialog() for the child CPropertySheet, and add the WS_EX_CONTROLPARENT style.

STATUS

This is a problem with the implementation of the Property Sheet common control, and not MFC's CPropertySheet wrapper.

MORE INFORMATION

Sample Code

   // CMySheet is derived from CPropertySheet
   BOOL CMySheet::OnInitDialog()
   {
             ModifyStyleEx (0, WS_EX_CONTROLPARENT);
             return CPropertySheet::OnInitDialog();
   }

   /* Compile options needed: default
   */ 
				

Properties

Article ID: 149501 - Last Review: November 21, 2006 - Revision: 2.1
APPLIES TO
  • Microsoft Foundation Class Library 4.2
  • Microsoft Visual C++ 4.0 Standard Edition
Keywords: 
kbprb kbpropsheet kbuidesign KB149501
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com