FIX: DisplayAsDefault Ambient Property Not Updated for ControlLast reviewed: September 19, 1997Article ID: Q148616 |
4.00
WINDOWS NT
kbole kbprg kbbuglist kbfixlist
The information in this article applies to:
SYMPTOMSWhen 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.
CAUSEIn 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.
RESOLUTIONThe 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).
STATUSMicrosoft 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.
MORE INFORMATION
Sample CodeThe 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 reference words: 4.00 focus
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |