Microsoft KB Archive/148616

= FIX: DisplayAsDefault Ambient Property Not Updated for Control =

Article ID: 148616

Article Last Modified on 11/18/2003

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 4.0 Professional Edition

 Microsoft Visual C++ 5.0 Learning Edition 

-



This article was previously published under Q148616



SYMPTOMS
When you use the arrow keys to change between controls in a Visual C++ 4.0 generated container, the DISPID_AMBIENT_DISPLAYASDEFAULT ambient property of the control site is not updated, and any control that relies on this property doesn't function correctly.

For example, a subclassed button control that is programmed to update its border according to the DISPID_AMBIENT_DISPLAYASDEFAULT ambient property will exhibit this behavior. In a Visual C++ generated container, the control won't update its border.



CAUSE
In Occdlg.cpp, the following line 542 shouldn't be called: bCheckDef = FALSE; This line keeps CheckDefPushButton from being called and the ambient property from being updated.



RESOLUTION
The best solution is to upgrade to Visual C++ 4.1. If this is not a possibility, the MFC DLL can be rebuilt without bCheckDef = FALSE; however, Microsoft recommends against this because you need to rebuild the DLL with a different name (see tech note 33).

<div class="status_section">

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Microsoft Visual C++ version 4.1.

<div class="moreinformation_section">

Sample Code
The following code can be added to the Button Control sample shipped with Visual C++ to demonstrate this problem. /////////////////////////////////////////////////////////////////////////// /

// Display the button with a thick border if appropriate

void CButtonCtrl::OnAmbientPropertyChange(DISPID dispid) {   TRACE("OnAmbientPropertyChange called\n"); BOOL bDisplayAsDefault = FALSE; if(DISPID_AMBIENT_DISPLAYASDEFAULT != dispid) return; // Check the control site to see if you should add or remove the border if (!GetAmbientProperty(DISPID_AMBIENT_DISPLAYASDEFAULT, VT_BOOL, &bDisplayAsDefault)) ASSERT(FALSE); if(bDisplayAsDefault) SendMessage(BM_SETSTYLE, BS_DEFPUSHBUTTON, 0); else SendMessage(BM_SETSTYLE, BS_PUSHBUTTON, 0); InvalidateControl; }

Additional query words: 4.00 focus

Keywords: kbbug kbfix kbnoupdate kbvc410fix kbcontainer kblocalsvr kbctrl KB148616

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.