X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d90879fa39fd71f4fd270e0fe38c851690781dbc..76985f52b2b8f88e5ee8632e10ca3bbed7dae2cf:/src/msw/checklst.cpp diff --git a/src/msw/checklst.cpp b/src/msw/checklst.cpp index 5aa72dd1e4..42ffa063a1 100644 --- a/src/msw/checklst.cpp +++ b/src/msw/checklst.cpp @@ -73,7 +73,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox) class wxCheckListBoxItem : public wxOwnerDrawn { -friend class wxCheckListBox; +friend class WXDLLEXPORT wxCheckListBox; public: // ctor wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex); @@ -93,7 +93,7 @@ private: }; wxCheckListBoxItem::wxCheckListBoxItem(wxCheckListBox *pParent, size_t nIndex) - : wxOwnerDrawn("", TRUE) // checkable + : wxOwnerDrawn(wxEmptyString, TRUE) // checkable { m_bChecked = FALSE; m_pParent = pParent; @@ -286,10 +286,21 @@ wxCheckListBox::wxCheckListBox(wxWindow *parent, wxWindowID id, long style, const wxValidator& val, const wxString& name) { - Create(parent, id, pos, size, nStrings, choices, - style | wxLB_OWNERDRAW, val, name); + Create(parent, id, pos, size, nStrings, choices, style, val, name); } +bool wxCheckListBox::Create(wxWindow *parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + int n, const wxString choices[], + long style, + const wxValidator& validator, const wxString& name) +{ + return wxListBox::Create(parent, id, pos, size, n, choices, + style | wxLB_OWNERDRAW, validator, name); +} + + + void wxCheckListBox::Delete(int N) { wxCHECK_RET( N >= 0 && N < m_noItems, @@ -318,7 +329,7 @@ bool wxCheckListBox::SetFont( const wxFont &font ) // -------------------- // create a check list box item -wxOwnerDrawn *wxCheckListBox::CreateItem(size_t nIndex) +wxOwnerDrawn *wxCheckListBox::CreateLboxItem(size_t nIndex) { wxCheckListBoxItem *pItem = new wxCheckListBoxItem(this, nIndex); return pItem; @@ -443,20 +454,9 @@ void wxCheckListBox::OnLeftClick(wxMouseEvent& event) { // clicking on the item selects it, clicking on the checkmark toggles if ( event.GetX() <= wxOwnerDrawn::GetDefaultMarginWidth() ) { - #ifdef __WIN32__ - size_t nItem = (size_t)::SendMessage - ( - (HWND)GetHWND(), - LB_ITEMFROMPOINT, - 0, - MAKELPARAM(event.GetX(), event.GetY()) - ); - #else // Win16 - // FIXME this doesn't work when the listbox is scrolled! - size_t nItem = ((size_t)event.GetY()) / m_nItemHeight; - #endif // Win32/16 + int nItem = HitTest(event.GetX(), event.GetY()); - if ( nItem < (size_t)m_noItems ) + if ( nItem != wxNOT_FOUND ) GetItem(nItem)->Toggle(); //else: it's not an error, just click outside of client zone } @@ -466,5 +466,23 @@ void wxCheckListBox::OnLeftClick(wxMouseEvent& event) } } +int wxCheckListBox::DoHitTestItem(wxCoord x, wxCoord y) const +{ + #ifdef __WIN32__ + int nItem = (int)::SendMessage + ( + (HWND)GetHWND(), + LB_ITEMFROMPOINT, + 0, + MAKELPARAM(x, y) + ); + #else // Win16 + // FIXME this doesn't work when the listbox is scrolled! + int nItem = y / m_nItemHeight; + #endif // Win32/16 + + return nItem >= m_noItems ? wxNOT_FOUND : nItem; +} + #endif