#pragma hdrstop
#endif
-#if wxUSE_CHOICE && !defined(__SMARTPHONE__)
+#if wxUSE_CHOICE && !(defined(__SMARTPHONE__) && defined(__WXWINCE__))
#ifndef WX_PRECOMP
#include "wx/choice.h"
return wxNOT_FOUND;
#else // !Watcom
- int pos = (int)SendMessage(GetHwnd(), CB_FINDSTRINGEXACT,
- (WPARAM)-1, (LPARAM)s.c_str());
-
- return pos == LB_ERR ? wxNOT_FOUND : pos;
+ //TODO: Evidently some MSW versions (all?) don't like empty strings
+ //passed to SendMessage, so we have to do it ourselves in that case
+ if ( s.size() == 0 )
+ {
+ int count = GetCount();
+ for ( int i = 0; i < count; i++ )
+ {
+ if ( GetString(i).size() == 0 )
+ return i;
+ }
+
+ return wxNOT_FOUND;
+ }
+ else
+ {
+ int pos = (int)SendMessage(GetHwnd(), CB_FINDSTRINGEXACT,
+ (WPARAM)-1, (LPARAM)s.c_str());
+
+ return pos == LB_ERR ? wxNOT_FOUND : pos;
+ }
#endif // Watcom/!Watcom
}
WXLRESULT wxChoice::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
- if ( nMsg == WM_LBUTTONUP )
+ switch ( nMsg )
{
- int x = (int)LOWORD(lParam);
- int y = (int)HIWORD(lParam);
-
- // Ok, this is truly weird, but if a panel with a wxChoice loses the
- // focus, then you get a *fake* WM_LBUTTONUP message with x = 65535 and
- // y = 65535. Filter out this nonsense.
- //
- // VZ: I'd like to know how to reproduce this please...
- if ( x == 65535 && y == 65535 )
- return 0;
+ case WM_LBUTTONUP:
+ {
+ int x = (int)LOWORD(lParam);
+ int y = (int)HIWORD(lParam);
+
+ // Ok, this is truly weird, but if a panel with a wxChoice
+ // loses the focus, then you get a *fake* WM_LBUTTONUP message
+ // with x = 65535 and y = 65535. Filter out this nonsense.
+ //
+ // VZ: I'd like to know how to reproduce this please...
+ if ( x == 65535 && y == 65535 )
+ return 0;
+ }
+ break;
+
+ // we have to handle both: one for the normal case and the other
+ // for readonly
+ case WM_CTLCOLOREDIT:
+ case WM_CTLCOLORLISTBOX:
+ case WM_CTLCOLORSTATIC:
+ {
+ WXWORD nCtlColor;
+ WXHDC hdc;
+ WXHWND hwnd;
+ UnpackCtlColor(wParam, lParam, &nCtlColor, &hdc, &hwnd);
+
+ return (WXLRESULT)OnCtlColor(hdc, hwnd, nCtlColor,
+ nMsg, wParam, lParam);
+ }
}
return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
return (WXHBRUSH)brush->GetResourceHandle();
}
-#endif // wxUSE_CHOICE && !__SMARTPHONE__
+#endif // wxUSE_CHOICE && !(__SMARTPHONE__ && __WXWINCE__)