- return !HasFlag(wxCB_READONLY);
-}
-
-void wxComboBox::SetEditable(bool WXUNUSED(editable))
-{
- // Can't implement in MSW?
-// HWND hWnd = GetHwnd();
-// SendMessage(hWnd, EM_SETREADONLY, (WPARAM)!editable, (LPARAM)0L);
-}
-
-void wxComboBox::SetInsertionPoint(long pos)
-{
- if ( GetWindowStyle() & wxCB_READONLY )
- return;
-
-#ifdef __WIN32__
- HWND hWnd = GetHwnd();
- ::SendMessage(hWnd, CB_SETEDITSEL, 0, MAKELPARAM(pos, pos));
- HWND hEditWnd = (HWND) GetEditHWND() ;
- if ( hEditWnd )
- {
- // Scroll insertion point into view
- SendMessage(hEditWnd, EM_SCROLLCARET, (WPARAM)0, (LPARAM)0);
- // Why is this necessary? (Copied from wxTextCtrl::SetInsertionPoint)
- SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM) wxEmptyString);
- }
-#endif // __WIN32__
-}
-
-void wxComboBox::SetInsertionPointEnd()
-{
- // setting insertion point doesn't make sense for read only comboboxes
- if ( !(GetWindowStyle() & wxCB_READONLY) )
- {
- long pos = GetLastPosition();
- SetInsertionPoint(pos);
- }
-}
-
-long wxComboBox::GetInsertionPoint() const
-{
-#ifdef __WIN32__
- DWORD Pos=(DWORD)SendMessage(GetHwnd(), CB_GETEDITSEL, 0, 0L);
- return Pos&0xFFFF;
-#else
- return 0;
-#endif
-}
-
-long wxComboBox::GetLastPosition() const
-{
- HWND hEditWnd = (HWND) GetEditHWND();
-
- // Get number of characters in the last (only) line. We'll add this to the character
- // index for the last line, 1st position.
- int lineLength = (int)SendMessage(hEditWnd, EM_LINELENGTH, (WPARAM) 0, (LPARAM)0L);
-
- return (long)(lineLength);
-}
-
-void wxComboBox::Replace(long from, long to, const wxString& value)
-{
-#if wxUSE_CLIPBOARD
- Remove(from, to);
-
- // Now replace with 'value', by pasting.
- wxSetClipboardData(wxDF_TEXT, (wxObject *)(const wxChar *)value, 0, 0);
-
- // Paste into edit control
- SendMessage(GetHwnd(), WM_PASTE, (WPARAM)0, (LPARAM)0L);
-#endif
-}
-
-void wxComboBox::Remove(long from, long to)
-{
- // Set selection and remove it
- SetSelection(from, to);
- SendMessage(GetHwnd(), WM_CUT, (WPARAM)0, (LPARAM)0);
-}
-
-void wxComboBox::SetSelection(long from, long to)
-{
- HWND hWnd = GetHwnd();
- long fromChar = from;
- long toChar = to;
- // if from and to are both -1, it means
- // (in wxWidgets) that all text should be selected.
- // This translates into Windows convention
- if ((from == -1) && (to == -1))
- {
- fromChar = 0;
- toChar = -1;
- }
-
- if ( SendMessage(hWnd, CB_SETEDITSEL, (WPARAM)0, (LPARAM)MAKELONG(fromChar, toChar)) == CB_ERR )
- {
- wxLogDebug(_T("CB_SETEDITSEL failed"));
- }
-}
-
-void wxComboBox::GetSelection(long* from, long* to) const
-{
- DWORD dwStart, dwEnd;
- ::SendMessage(GetHwnd(), CB_GETEDITSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
-
- *from = dwStart;
- *to = dwEnd;
-}
-
-int wxComboBox::GetSelection() const
-{
- return wxChoice::GetSelection();