]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/choice.cpp
Avoid an assert in wxFrame::SetTitle
[wxWidgets.git] / src / msw / choice.cpp
index 5f49fcd97d6e72cc6b3b4c95e64bd17aa0bc4ee1..9abbe7e00f452ffe7329d75f1db5336546d527e8 100644 (file)
@@ -175,6 +175,23 @@ bool wxChoice::Create(wxWindow *parent,
                   style, validator, name);
 }
 
+bool wxChoice::MSWShouldPreProcessMessage(WXMSG *pMsg)
+{
+    MSG *msg = (MSG *) pMsg;
+
+    // if the dropdown list is visible, don't preprocess certain keys
+    if ( msg->message == WM_KEYDOWN
+        && (msg->wParam == VK_ESCAPE || msg->wParam == VK_RETURN) )
+    {
+        if (::SendMessage(GetHwndOf(this), CB_GETDROPPEDSTATE, 0, 0))
+        {
+            return false;
+        }
+    }
+
+    return wxControl::MSWShouldPreProcessMessage(pMsg);
+}
+
 WXDWORD wxChoice::MSWGetStyle(long style, WXDWORD *exstyle) const
 {
     // we never have an external border
@@ -441,7 +458,7 @@ void wxChoice::DoGetSize(int *w, int *h) const
     // total height of the control including the drop down list -- but only
     // sometimes, and normally it isn't... I have no idea about what to do with
     // this
-    wxControl::DoGetSize(w, h);
+    wxControl::DoGetSize(w, h);    
 }
 
 void wxChoice::DoSetSize(int x, int y,
@@ -460,8 +477,8 @@ void wxChoice::DoSetSize(int x, int y,
         size_t nItems = GetCount();
         if ( !nItems )
             nItems = 9;
-        else if ( nItems > 39 )
-            nItems = 39;
+        else if ( nItems > 24 )
+            nItems = 24;
 
         // add space for the drop down list
         const int hItem = SendMessage(GetHwnd(), CB_GETITEMHEIGHT, 0, 0);
@@ -470,6 +487,11 @@ void wxChoice::DoSetSize(int x, int y,
 
     wxControl::DoSetSize(x, y, width, height, sizeFlags);
 
+    // I'm commenting this out since the code appears to make choices
+    // and comboxes too high when they have associated sizers. I'm sure this
+    // is not the end of the story, which is why I'm leaving it #if'ed out for
+    // now. JACS.
+#if 0
     // if the height specified for the visible part of the control is
     // different from the current one, we need to change it separately
     // as it is not affected by normal WM_SETSIZE
@@ -482,6 +504,9 @@ void wxChoice::DoSetSize(int x, int y,
             SendMessage(GetHwnd(), CB_SETITEMHEIGHT, (WPARAM)-1, h + delta);
         }
     }
+#else
+    wxUnusedVar(heightOrig);
+#endif
 }
 
 wxSize wxChoice::DoGetBestSize() const