X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/144833307d3f7453af3f9004838a6e23094fef1f..564b260950a9a370bf9231f7432caced5156ba1b:/src/msw/listbox.cpp diff --git a/src/msw/listbox.cpp b/src/msw/listbox.cpp index d6549a064c..8eac8338fa 100644 --- a/src/msw/listbox.cpp +++ b/src/msw/listbox.cpp @@ -81,7 +81,7 @@ wxOwnerDrawn *wxListBox::CreateItem(uint n) // this macro is dangerous but still better than tons of (HWND)GetHWND() #define hwnd (HWND)GetHWND() -bool wxListBox::MSWCommand(const WXUINT param, const WXWORD WXUNUSED(id)) +bool wxListBox::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) { /* if (param == LBN_SELCANCEL) @@ -118,7 +118,9 @@ bool wxListBox::MSWCommand(const WXUINT param, const WXWORD WXUNUSED(id)) { wxCommandEvent event(wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, m_windowId); event.SetEventObject( this ); - if ( !GetEventHandler()->ProcessEvent(event) ) + GetEventHandler()->ProcessEvent(event) ; + return TRUE; +/* { #if WXWIN_COMPATIBILITY wxWindow *parent = (wxWindow *)GetParent(); @@ -127,6 +129,7 @@ bool wxListBox::MSWCommand(const WXUINT param, const WXWORD WXUNUSED(id)) #endif return TRUE; } + */ } return FALSE; } @@ -138,11 +141,11 @@ wxListBox::wxListBox(void) m_selected = 0; } -bool wxListBox::Create(wxWindow *parent, const wxWindowID id, +bool wxListBox::Create(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, - const int n, const wxString choices[], - const long style, + int n, const wxString choices[], + long style, const wxValidator& validator, const wxString& name) { @@ -207,6 +210,9 @@ bool wxListBox::Create(wxWindow *parent, const wxWindowID id, 0, 0, 0, 0, (HWND)parent->GetHWND(), (HMENU)m_windowId, wxGetInstance(), NULL); + + m_hWnd = (WXHWND)wx_list; + #if CTL3D if (want3D) { @@ -215,12 +221,15 @@ bool wxListBox::Create(wxWindow *parent, const wxWindowID id, } #endif + // Subclass again to catch messages + SubclassWin((WXHWND)wx_list); + uint ui; for (ui = 0; ui < (uint)n; ui++) { SendMessage(wx_list, LB_ADDSTRING, 0, (LPARAM)(const char *)choices[ui]); } - #if USE_OWNER_DRAWN +#if USE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { for (ui = 0; ui < (uint)n; ui++) { // create new item which will process WM_{DRAW|MEASURE}ITEM messages @@ -230,33 +239,28 @@ bool wxListBox::Create(wxWindow *parent, const wxWindowID id, ListBox_SetItemData(wx_list, ui, pNewItem); } } - #endif +#endif if ((m_windowStyle & wxLB_MULTIPLE) == 0) SendMessage(wx_list, LB_SETCURSEL, 0, 0); - ShowWindow(wx_list, SW_SHOW); - - m_hWnd = (WXHWND)wx_list; - - // Subclass again for purposes of dialog editing mode - SubclassWin((WXHWND)wx_list); - SetFont(* parent->GetFont()); SetSize(x, y, width, height); + ShowWindow(wx_list, SW_SHOW); + return TRUE; } wxListBox::~wxListBox(void) { - #if USE_OWNER_DRAWN +#if USE_OWNER_DRAWN uint uiCount = m_aItems.Count(); while ( uiCount-- != 0 ) { delete m_aItems[uiCount]; } - #endif +#endif } void wxListBox::SetupColours(void) @@ -265,7 +269,7 @@ void wxListBox::SetupColours(void) SetForegroundColour(GetParent()->GetDefaultForegroundColour()); } -void wxListBox::SetFirstItem(const int N) +void wxListBox::SetFirstItem(int N) { SendMessage(hwnd,LB_SETTOPINDEX,(WPARAM)N,(LPARAM)0) ; } @@ -278,7 +282,7 @@ void wxListBox::SetFirstItem(const wxString& s) SetFirstItem(N) ; } -void wxListBox::Delete(const int N) +void wxListBox::Delete(int N) { SendMessage(hwnd, LB_DELETESTRING, N, 0); m_noItems --; @@ -290,14 +294,14 @@ void wxListBox::Append(const wxString& item) int index = ListBox_AddString(hwnd, item); m_noItems ++; - #if USE_OWNER_DRAWN +#if USE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { wxOwnerDrawn *pNewItem = CreateItem(-1); // dummy argument pNewItem->SetName(item); m_aItems.Add(pNewItem); ListBox_SetItemData(hwnd, index, pNewItem); } - #endif +#endif SetHorizontalExtent(item); } @@ -307,20 +311,20 @@ void wxListBox::Append(const wxString& item, char *Client_data) int index = ListBox_AddString(hwnd, item); m_noItems ++; - #if USE_OWNER_DRAWN +#if USE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { // client data must be pointer to wxOwnerDrawn, otherwise we would crash // in OnMeasure/OnDraw. wxFAIL_MSG("Can't use client data with owner-drawn listboxes"); } else - #endif +#endif ListBox_SetItemData(hwnd, index, Client_data); SetHorizontalExtent(item); } -void wxListBox::Set(const int n, const wxString *choices, char** clientData) +void wxListBox::Set(int n, const wxString *choices, char** clientData) { ShowWindow(hwnd, SW_HIDE); ListBox_ResetContent(hwnd); @@ -333,7 +337,7 @@ void wxListBox::Set(const int n, const wxString *choices, char** clientData) } m_noItems = n; - #if USE_OWNER_DRAWN +#if USE_OWNER_DRAWN if ( m_windowStyle & wxLB_OWNERDRAW ) { // first delete old items uint ui = m_aItems.Count(); @@ -353,7 +357,7 @@ void wxListBox::Set(const int n, const wxString *choices, char** clientData) "Can't use client data with owner-drawn listboxes"); } } - #endif +#endif SetHorizontalExtent(""); ShowWindow(hwnd, SW_SHOW); @@ -376,7 +380,7 @@ void wxListBox::Clear(void) ListBox_GetHorizontalExtent(hwnd); } -void wxListBox::SetSelection(const int N, const bool select) +void wxListBox::SetSelection(int N, bool select) { if ((m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED)) SendMessage(hwnd, LB_SETSEL, select, N); @@ -389,23 +393,23 @@ void wxListBox::SetSelection(const int N, const bool select) } } -bool wxListBox::Selected(const int N) const +bool wxListBox::Selected(int N) const { return SendMessage(hwnd, LB_GETSEL, N, 0) == 0 ? FALSE : TRUE; } -void wxListBox::Deselect(const int N) +void wxListBox::Deselect(int N) { if ((m_windowStyle & wxLB_MULTIPLE) || (m_windowStyle & wxLB_EXTENDED)) SendMessage(hwnd, LB_SETSEL, FALSE, N); } -char *wxListBox::GetClientData(const int N) const +char *wxListBox::GetClientData(int N) const { return (char *)SendMessage(hwnd, LB_GETITEMDATA, N, 0); } -void wxListBox::SetClientData(const int N, char *Client_data) +void wxListBox::SetClientData(int N, char *Client_data) { if ( ListBox_SetItemData(hwnd, N, Client_data) == LB_ERR ) wxLogDebug("LB_SETITEMDATA failed"); @@ -455,7 +459,7 @@ int wxListBox::GetSelection() const } // Find string for position -wxString wxListBox::GetString(const int N) const +wxString wxListBox::GetString(int N) const { if (N < 0 || N > m_noItems) return wxString(""); @@ -465,7 +469,7 @@ wxString wxListBox::GetString(const int N) const return wxString(wxBuffer); } -void wxListBox::SetSize(const int x, const int y, const int width, const int height, const int sizeFlags) +void wxListBox::SetSize(int x, int y, int width, int height, int sizeFlags) { int currentX, currentY; GetPosition(¤tX, ¤tY); @@ -480,6 +484,8 @@ void wxListBox::SetSize(const int x, const int y, const int width, const int hei if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) y1 = currentY; + AdjustForParentClientOrigin(x1, y1, sizeFlags); + // If we're prepared to use the existing size, then... if (width == -1 && height == -1 && ((sizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO)) { @@ -516,16 +522,6 @@ void wxListBox::SetSize(const int x, const int y, const int width, const int hei MoveWindow(hwnd, (int)control_x, (int)control_y, (int)control_width, (int)control_height, TRUE); -/* -#if WXWIN_COMPATIBILITY - GetEventHandler()->OldOnSize(width, height); -#else - wxSizeEvent event(wxSize(width, height), m_windowId); - event.eventObject = this; - GetEventHandler()->ProcessEvent(event); -#endif -*/ - } // Windows-specific code to set the horizontal extent of @@ -545,7 +541,7 @@ void wxListBox::SetHorizontalExtent(const wxString& s) HDC dc = GetWindowDC(hwnd); HFONT oldFont = 0; if (GetFont() && GetFont()->GetResourceHandle()) - oldFont = ::SelectObject(dc, (HFONT) GetFont()->GetResourceHandle()); + oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont()->GetResourceHandle()); GetTextMetrics(dc, &lpTextMetric); SIZE extentXY; @@ -566,7 +562,7 @@ void wxListBox::SetHorizontalExtent(const wxString& s) HDC dc = GetWindowDC(hwnd); HFONT oldFont = 0; if (GetFont() && GetFont()->GetResourceHandle()) - oldFont = ::SelectObject(dc, (HFONT) GetFont()->GetResourceHandle()); + oldFont = (HFONT) ::SelectObject(dc, (HFONT) GetFont()->GetResourceHandle()); GetTextMetrics(dc, &lpTextMetric); int i; @@ -589,7 +585,7 @@ void wxListBox::SetHorizontalExtent(const wxString& s) } void -wxListBox::InsertItems(const int nItems, const wxString items[], const int pos) +wxListBox::InsertItems(int nItems, const wxString items[], int pos) { int i; for (i = 0; i < nItems; i++) @@ -610,9 +606,11 @@ wxListBox::InsertItems(const int nItems, const wxString items[], const int pos) SetHorizontalExtent(""); } -void wxListBox::SetString(const int N, const wxString& s) +void wxListBox::SetString(int N, const wxString& s) { - int sel = GetSelection(); + int sel = -1; + if (!(m_windowStyle & wxLB_MULTIPLE) && !(m_windowStyle & wxLB_EXTENDED)) + sel = GetSelection(); char *oldData = (char *)wxListBox::GetClientData(N); @@ -652,7 +650,7 @@ wxString wxListBox::GetStringSelection (void) const return wxString(""); } -bool wxListBox::SetStringSelection (const wxString& s, const bool flag) +bool wxListBox::SetStringSelection (const wxString& s, bool flag) { int sel = FindString (s); if (sel > -1) @@ -682,7 +680,7 @@ void wxListBox::Command (wxCommandEvent & event) ProcessCommand (event); } -WXHBRUSH wxListBox::OnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUINT nCtlColor, +WXHBRUSH wxListBox::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { #if CTL3D @@ -711,7 +709,7 @@ WXHBRUSH wxListBox::OnCtlColor(const WXHDC pDC, const WXHWND pWnd, const WXUINT long wxListBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { -/* +#if 0 switch (nMsg) { case WM_INITDIALOG: @@ -730,11 +728,11 @@ long wxListBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) case WM_MBUTTONDBLCLK: case WM_LBUTTONDOWN: case WM_LBUTTONUP: -// case WM_LBUTTONDBLCLK: + case WM_LBUTTONDBLCLK: case WM_MOUSEMOVE: - case WM_DESTROY: case WM_COMMAND: case WM_NOTIFY: + case WM_DESTROY: case WM_MENUSELECT: case WM_INITMENUPOPUP: case WM_DRAWITEM: @@ -761,7 +759,8 @@ long wxListBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) case WM_NCHITTEST: return MSWDefWindowProc(nMsg, wParam, lParam ); } -*/ +#endif + return wxControl::MSWWindowProc(nMsg, wParam, lParam); }