Article ID: 160910
Article Last Modified on 11/21/2006
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
- Microsoft Visual C++ 5.0 Enterprise Edition
- Microsoft Visual C++ 5.0 Professional Edition
- Microsoft Visual C++ 6.0 Enterprise Edition
- Microsoft Visual C++ 6.0 Professional Edition
- Microsoft Visual C++ 6.0 Standard Edition
This article was previously published under Q160910
SYMPTOMS
When you add a stock Text or Caption property to an MFC
ActiveX control that subclasses a Combo or List Box, it will not serialize
properly.
CAUSE
When a container attempts to read the Text or Caption
property for an MFC ActiveX control, the MFC framework calls
COleControl::GetText. GetText calls COleControl::InternalGetText.
InternalGetText may attempt to get the Text or Caption property from the
control with the following call:
if (DefWindowProc(WM_GETTEXT, (WPARAM)_cchUsual,
(LPARAM)m_strText.GetBufferSetLength(_cchUsual)) >= _cchUsual - 1)
In the case of subclassed Combo or List Box control, this call will
always return an empty buffer.
RESOLUTION
It is debatable whether it makes sense to have a Text or
Caption property for a subclassed Combo or List Box. The native Combo and List
Box controls do not respond to the WM_SETTEXT or WM_GETTEXT messages.
Therefore, the problem described above occurs.
If it makes sense to
do this in your application, it is easy to make this work: When adding the Text
or Caption property to the ActiveX control, simply select the stock property
and select Get / Set methods. This will give you the ability to handle the Text
or Caption property as if it were a custom property.
STATUS
This behavior is by design.
MORE INFORMATION
The Text and Caption properties of an ActiveX control are
synonymous.
Keywords: kbtshoot kbcombobox kbctrl kblistbox kbprb KB160910