int wxListBox::DoListHitTest(const wxPoint& point) const
{
- LRESULT lRes = ::SendMessage(GetHwnd(), LB_ITEMFROMPOINT,
- 0L, MAKELONG(point.x, point.y));
+ LRESULT lRes = ::SendMessage(GetHwnd(), LB_ITEMFROMPOINT,
+ 0, MAKELPARAM(point.x, point.y));
// non zero high-order word means that this item is outside of the client
// area, IOW the point is outside of the listbox
- return HIWORD(lRes) ? wxNOT_FOUND : lRes;
+ return HIWORD(lRes) ? wxNOT_FOUND : LOWORD(lRes);
}
void wxListBox::SetString(unsigned int n, const wxString& s)
}
wxEventType evtType;
+ int n;
if ( param == LBN_SELCHANGE )
{
evtType = wxEVT_COMMAND_LISTBOX_SELECTED;
+ n = SendMessage(GetHwnd(), LB_GETCARETINDEX, 0, 0);
+
+ // NB: conveniently enough, LB_ERR is the same as wxNOT_FOUND
}
else if ( param == LBN_DBLCLK )
{
evtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED;
+ n = HitTest(ScreenToClient(wxGetMousePosition()));
}
else
{
return false;
}
- wxCommandEvent event(evtType, m_windowId);
- event.SetEventObject( this );
-
// retrieve the affected item
- int n = SendMessage(GetHwnd(), LB_GETCARETINDEX, 0, 0);
- if ( n != LB_ERR )
- {
- if ( HasClientObjectData() )
- event.SetClientObject( GetClientObject(n) );
- else if ( HasClientUntypedData() )
- event.SetClientData( GetClientData(n) );
-
- event.SetString(GetString(n));
- }
- else
- {
+ if ( n == wxNOT_FOUND )
return false;
- }
+ wxCommandEvent event(evtType, m_windowId);
+ event.SetEventObject(this);
+
+ if ( HasClientObjectData() )
+ event.SetClientObject( GetClientObject(n) );
+ else if ( HasClientUntypedData() )
+ event.SetClientData( GetClientData(n) );
+
+ event.SetString(GetString(n));
event.SetInt(n);
return HandleWindowEvent(event);
wxListBoxItem *pItem = (wxListBoxItem *)m_aItems[pStruct->itemID];
wxDCTemp dc((WXHDC)pStruct->hDC);
- wxPoint pt1(pStruct->rcItem.left, pStruct->rcItem.top);
- wxPoint pt2(pStruct->rcItem.right, pStruct->rcItem.bottom);
- wxRect rect(pt1, pt2);
- return pItem->OnDrawItem(dc, rect,
+ return pItem->OnDrawItem(dc, wxRectFromRECT(pStruct->rcItem),
(wxOwnerDrawn::wxODAction)pStruct->itemAction,
(wxOwnerDrawn::wxODStatus)pStruct->itemState);
}