- 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) )
- {
- wxTextPos pos = GetLastPosition();
- SetInsertionPoint(pos);
- }
-}
-
-long wxComboBox::GetInsertionPoint() const
-{
- // CB_GETEDITSEL returns the index of the first character of the selection in
- // its low-order word
- DWORD pos= (DWORD)::SendMessage(GetHwnd(), CB_GETEDITSEL, 0, 0L);
- return LOWORD(pos);
-}
-
-wxTextPos 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.
- wxTextPos lineLength = (wxTextPos)SendMessage(hEditWnd, EM_LINELENGTH, (WPARAM) 0, (LPARAM)0L);
-
- return 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);
-#else
- wxUnusedVar(from);
- wxUnusedVar(to);
- wxUnusedVar(value);
-#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)
-{
- // if from and to are both -1, it means (in wxWidgets) that all text should
- // be selected, translate this into Windows convention
- if ( (from == -1) && (to == -1) )
- {
- from = 0;
- }
-
- if ( SendMessage(GetHwnd(), CB_SETEDITSEL,
- 0, (LPARAM)MAKELONG(from, to)) == CB_ERR )
- {
- wxLogDebug(_T("CB_SETEDITSEL failed"));
- }
-}
-
-void wxComboBox::GetSelection(long* from, long* to) const
-{
- DWORD dwStart, dwEnd;
- if ( ::SendMessage(GetHwnd(), CB_GETEDITSEL,
- (WPARAM)&dwStart, (LPARAM)&dwEnd) == CB_ERR )
- {
- *from =
- *to = 0;
- }
- else
- {
- *from = dwStart;
- *to = dwEnd;
- }