SetMarginWidth(0);
}
-wxOwnerDrawn *wxListBox::CreateItem(size_t n)
+wxOwnerDrawn *wxListBox::CreateItem(size_t WXUNUSED(n))
{
return new wxListBoxItem();
}
DWORD wstyle = WS_VISIBLE | WS_VSCROLL | WS_TABSTOP |
LBS_NOTIFY | LBS_HASSTRINGS /* | WS_CLIPSIBLINGS */;
+
+ wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED),
+ _T("only one of listbox selection modes can be specified") );
+ if ( m_windowStyle & wxCLIP_SIBLINGS )
+ wstyle |= WS_CLIPSIBLINGS;
+
if (m_windowStyle & wxLB_MULTIPLE)
wstyle |= LBS_MULTIPLESEL;
else if (m_windowStyle & wxLB_EXTENDED)
if ( clientData )
{
#if wxUSE_OWNER_DRAWN
- wxASSERT_MSG(clientData[i] == NULL,
- wxT("Can't use client data with owner-drawn listboxes"));
+ if ( m_windowStyle & wxLB_OWNERDRAW )
+ {
+ wxASSERT_MSG(clientData[i] == NULL,
+ wxT("Can't use client data with owner-drawn listboxes"));
+ }
+ ListBox_SetItemData(GetHwnd(), i, clientData[i]);
#else // !wxUSE_OWNER_DRAWN
ListBox_SetItemData(GetHwnd(), i, clientData[i]);
#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
wListbox += 3*cx;
- int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*(wxMax(m_noItems, 7));
+ // don't make the listbox too tall (limit height to 10 items) but don't
+ // make it too small neither
+ int hListbox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy)*
+ wxMin(wxMax(m_noItems, 3), 10);
return wxSize(wListbox, hListbox);
}
bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id))
{
+ wxEventType evtType;
if ( param == LBN_SELCHANGE )
{
- wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId);
- event.SetEventObject( this );
-
- wxArrayInt aSelections;
- int n, count = GetSelections(aSelections);
- if ( count > 0 )
- {
- n = aSelections[0];
- if ( HasClientObjectData() )
- event.SetClientObject( GetClientObject(n) );
- else if ( HasClientUntypedData() )
- event.SetClientData( GetClientData(n) );
- event.SetString( GetString(n) );
- }
- else
- {
- n = -1;
- }
-
- event.m_commandInt = n;
-
- return GetEventHandler()->ProcessEvent(event);
+ evtType = wxEVT_COMMAND_LISTBOX_SELECTED;
}
else if ( param == LBN_DBLCLK )
{
- wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, m_windowId);
- event.SetEventObject( this );
+ evtType = wxEVT_COMMAND_LISTBOX_DOUBLECLICKED;
+ }
+ else
+ {
+ // some event we're not interested in
+ return FALSE;
+ }
- return GetEventHandler()->ProcessEvent(event);
+ wxCommandEvent event(evtType, m_windowId);
+ event.SetEventObject( this );
+
+ wxArrayInt aSelections;
+ int n, count = GetSelections(aSelections);
+ if ( count > 0 )
+ {
+ n = aSelections[0];
+ if ( HasClientObjectData() )
+ event.SetClientObject( GetClientObject(n) );
+ else if ( HasClientUntypedData() )
+ event.SetClientData( GetClientData(n) );
+ event.SetString( GetString(n) );
+ }
+ else
+ {
+ n = -1;
}
- //else:
- return FALSE;
+ event.m_commandInt = n;
+
+ return GetEventHandler()->ProcessEvent(event);
}
// ----------------------------------------------------------------------------
wxListBoxItem *pItem = (wxListBoxItem *)data;
- wxDC dc;
- dc.SetHDC((WXHDC)pStruct->hDC, FALSE);
+ wxDCTemp dc((WXHDC)pStruct->hDC);
wxRect rect(wxPoint(pStruct->rcItem.left, pStruct->rcItem.top),
wxPoint(pStruct->rcItem.right, pStruct->rcItem.bottom));
return pItem->OnDrawItem(dc, rect,
- (wxOwnerDrawn::wxODAction)pStruct->itemAction,
- (wxOwnerDrawn::wxODStatus)pStruct->itemState);
+ (wxOwnerDrawn::wxODAction)pStruct->itemAction,
+ (wxOwnerDrawn::wxODStatus)pStruct->itemState);
}
#endif