Help and Support

FIX: Masked Edit Tab Order Incorrect If Visible Property FALSE

Article ID:152603
Last Review:November 21, 2006
Revision:2.1
This article was previously published under Q152603

SYMPTOMS

Multiple Masked Edit OLE Controls that are not visible will not retain their original tab order after they are made visible.

If you insert more than one Microsoft Masked Edit Ole Control into a dialog resource wrapped by a MFC Class (CDialog, CFormView, CRecordView, or CDaoRecordView), set the Visible Properties of the Controls to FALSE in the Resource Editor at design time, and then call the ShowWindow on the controls, the focus is set to the wrong control.

Back to the top

RESOLUTION

If possible, leave the Visible property of the Microsoft Masked Edit OLE Control set to TRUE.

If you call SetFocus on the first masked edit control, the focus is set properly to that control, but if there are any other non-static controls on the form, they will be inserted before the second masked edit control in the tab order at run time.

SetWindowPos() can be used to set the z-order of a control. The tab order in a dialog is synonymous with the Z-order, meaning that a control that is first in the tab order will have a higher Z-order than a control that follows it in the-Z order. A control with the WS_CLIPSIBLINGS window style set that is overlapped by another control will not be painted in the area that is overlapped. OLE controls have the WS_CLIPSIBLINGS window style set by default.

Back to the top

STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been fixed in Visual C++ version 5.0.

Back to the top

MORE INFORMATION

Use the following steps to reproduce a dialog-based MFC application. These steps also apply if you choose either an SDI or MDI application with a CFormView, CRecordView, or CDaoRecordView:

1.Create an AppWizard dialog-based application with OLE Controls support.
2.Using the Component Gallery, insert a Microsoft Masked Edit OLE Control.
3.Place two masked edit controls on the dialog resource. Verify the tab order: the first control you placed on the dialog should be first in the tab order.
4.Set the Visible properties of both edit controls to FALSE.
5.Using the Class Wizard, create member variables of type "control" for both of the masked edit controls. For example:
      CMsmask  m_Mask1;
      CMsmask  m_Mask2;
						
where CMsmask is the class that the Component Gallery created to wrap the Microsoft Masked Edit OLE Control.
6.For the dialog's OnInitDialog method, run the following code:
      m_Mask1.ShowWindow( SW_SHOW );
      m_Mask2.ShowWindow( SW_SHOW );
						
7.Build and run the program. The m_Mask2 object will be first in the tab order -- before m_Mask2.

Back to the top


APPLIES TO
Microsoft Foundation Class Library 4.2, when used with:
  Microsoft Visual C++ 4.0 Standard Edition
  Microsoft Visual C++ 4.1 Subscription
  Microsoft Visual C++ 4.2 Enterprise Edition
  Microsoft Visual C++ 4.2 Professional Edition

Back to the top

Keywords: 
kbbug kbctrl kbfix kbusage kbvc500fix KB152603

Back to the top

Article Translations

 

Other Support Options

  • Contact Microsoft
    Phone Numbers, Support Options and Pricing, Online Help, and more.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.