I want to owner draw a CComboBoxEx m_ctlCombo with text and images.
I create the image list and create COMBOBOXEXITEM and insert them into m_ctlCombo. It's all good.

Code:
		// Add strings to the combo box. 
		for (int idx = 0; idx < 3; idx++)
		{
			// Each item has text, an lParam with extra data, and an image.
			cbI.mask			= CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;		
			cbI.pszText			= _T("test");  // this will be different for each item
			cbI.cchTextMax		= sizeof(_T("test"));
			cbI.iItem			= idx;	// Add the item to the end of the list.
			cbI.iImage			= idx;	// Image to display.
			cbI.iSelectedImage	= idx;
			cbI.iOverlay		= 2;
			cbI.iIndent			= 0; 

			// Add the item to the combo box drop-down list.
			int test = m_ctlCombo.InsertItem(&cbI); // works!
		}
My question is how do I get the COMBOBOXEXITEM items in my ownerdrawn function from which I can extract the text "test" to draw.

Code:
   // COwnerDraw
	LRESULT DrawItem(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
	{
		LPDRAWITEMSTRUCT lpDrawItemStruct = (LPDRAWITEMSTRUCT) lParam;

		if( lpDrawItemStruct->itemID == -1 )
			return 0;

		CDCHandle dc = lpDrawItemStruct->hDC;

		const int nIndex = lpDrawItemStruct->itemID;
		COMBOBOXEXITEM cbei;
		GetItem(&cbei);          // this Does Not work to get items with text
		LPCTSTR lpszText = cbei.pszText; // How?

		RECT rc = lpDrawItemStruct->rcItem;   // this works to get rect
		CImageList pImageList = GetImageList();  // this works to get image list

     // ...
     // code to draw text and images
     // ...
}
I'm using WTL but I think it does not matter. TIA