]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/menu.cpp
return correct item and position from wxTreeEvent::GetItem/Point() (patch 1622166)
[wxWidgets.git] / src / msw / menu.cpp
index 03c844447cef3c5b371f21f1c9f74f324be238ff..316f1a9ce9a81b13ef197790efc57434db864b82 100644 (file)
@@ -29,6 +29,7 @@
 #include "wx/menu.h"
 
 #ifndef WX_PRECOMP
+    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
     #include "wx/frame.h"
     #include "wx/utils.h"
     #include "wx/intl.h"
@@ -41,9 +42,6 @@
 
 #include "wx/msw/private.h"
 
-// include <commctrl.h> "properly"
-#include "wx/msw/wrapcctl.h"
-
 #ifdef __WXWINCE__
 #include <windows.h>
 #include <windowsx.h>
@@ -402,6 +400,28 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
         pos += 2; // for the title itself and its separator
 
     BOOL ok = false;
+    
+#if wxUSE_OWNER_DRAWN
+    // Currently, mixing owner-drawn and non-owner-drawn items results in
+    // inconsistent margins, so we force this to be owner-drawn if any other
+    // items already are. Later we might want to use a boolean in the wxMenu
+    // to avoid search. Also we might make this fix unnecessary by getting the correct
+    // margin using NONCLIENTMETRICS.
+    if ( !pItem->IsOwnerDrawn() )
+    {
+        // Check if any other items are ownerdrawn, and make ownerdrawn if so
+        wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst();
+        while (node)
+        {
+            if (node->GetData()->IsOwnerDrawn())
+            {
+                pItem->SetOwnerDrawn(true);
+                break;
+            }
+            node = node->GetNext();
+        }
+    }
+#endif
 
     // check if we have something more than a simple text item
 #if wxUSE_OWNER_DRAWN
@@ -418,7 +438,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
             // while our owner-drawn code is not
 
             // first compile-time check
-#ifdef MIIM_BITMAP
+#if defined(MIIM_BITMAP) && (_WIN32_WINNT >= 0x0500)
             WinStruct<MENUITEMINFO> mii;
 
             // now run-time one: MIIM_BITMAP only works under WinME/2000+