BUG: CB_SETTOPINDEX and CB_GETTOPINDEX Always Return Zero on Macintosh

Article translations Article translations
Article ID: 201116 - View products that this article applies to.
This article was previously published under Q201116
This article has been archived. It is offered "as is" and will no longer be updated.
Expand all | Collapse all

SYMPTOMS

On the Macintosh, the combo box messages CB_GETTOPINDEX and CB_SETTOPINDEX fail and always return zero (0).

CAUSE

There are no message handlers for these messages in the combo-box window procedure in the Windows Portability Library.

RESOLUTION

Obtain a pointer to the list box portion of the combo box, and use LB_GETTOPINDEX and LB_SETTOPINDEX instead.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

The combo-box control is composed of an edit control and a list-box control. For additional information about combo boxes, please see the following article in the Microsoft Knowledge Base:
65881 INFO: The Parts of a Windows Combo Box and How They Relate
On the Intel side, the edit control is the first child of the combo box. For a simple combo box, the Macintosh has the list-box control as the first control.

The window handle to the list box can be obtained using GetWindow. Once a valid handle is obtained, using the LB_GETTOPINDEX and LB_SETTOPINDEX messages provides the same functionality as CB_GETTOPINDEX and CB_SETTOPINDEX.

The sample code below shows the MFC implementation:

Sample Code


class CCtrlsView : public CFormView
{
public:
   CComboBox   m_comboindex;
   int      m_currentIndex;
#ifdef _MAC
   CListBox m_comboList;
#endif
...
};

void CCtrlsView::OnInitialUpdate()
{
   CFormView::OnInitialUpdate();

#ifdef _MAC
   // Obtain pointer to combo's list box.
   HWND hComboList = m_comboindex.GetWindow(GW_CHILD)->m_hWnd;
   ASSERT(hComboList);

   // Verify class name.
   char className[50];
   GetClassName(hComboList, className, 50);
   ASSERT(lstrcmp(className, "ComboLBox") == 0);

   // Subclass to use CListBox.
   m_comboList.SubclassWindow(hComboList);
#endif
...
}

// A simple combo box with "set" and "get" buttons using
// the values from an edit control.
void CCtrlsView::OnSetindex()
{
   UpdateData(TRUE);
#ifndef _MAC
   m_comboindex.SetTopIndex(m_currentIndex);
#else
   m_comboList.SetTopIndex(m_currentIndex);
#endif
}

void CCtrlsView::OnGetindex()
{
#ifndef _MAC
   m_currentIndex = m_comboindex.GetTopIndex();
#else
   m_currentIndex = m_comboList.GetTopIndex();
#endif
   UpdateData(FALSE);
}
				

REFERENCES

(c) Microsoft Corporation 1999, All Rights Reserved. Contributions by Adam Kim, Microsoft Corporation.

Properties

Article ID: 201116 - Last Review: October 11, 2013 - Revision: 2.0
APPLIES TO
  • Microsoft Visual C++ 4.0 Cross Development Edition for Macintosh
  • Microsoft Visual C++ 4.0 Cross Development Edition for Macintosh
Keywords: 
kbnosurvey kbarchive kbbug KB201116

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com