Knowledge Base

A stock Text or Caption property is not added to an MFC ActiveX control which subclasses a Combo or List Box

Article ID: 160910

Article Last Modified on 11/21/2006


APPLIES TO


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