///////////////////////////////////////////////////////////////////////////////
-// Name: msw/ownerdrw.cpp
+// Name: src/msw/ownerdrw.cpp
// Purpose: implementation of wxOwnerDrawn class
// Author: Vadim Zeitlin
// Modified by:
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#include "wx/msw/private.h"
#ifdef __BORLANDC__
-#pragma hdrstop
+ #pragma hdrstop
#endif
#ifndef WX_PRECOMP
- #include "wx/window.h"
- #include "wx/msw/private.h"
- #include "wx/font.h"
- #include "wx/bitmap.h"
- #include "wx/dcmemory.h"
- #include "wx/menu.h"
- #include "wx/utils.h"
+ #include "wx/window.h"
+ #include "wx/msw/private.h"
+ #include "wx/font.h"
+ #include "wx/bitmap.h"
+ #include "wx/image.h"
+ #include "wx/dcmemory.h"
+ #include "wx/menu.h"
+ #include "wx/utils.h"
+ #include "wx/settings.h"
+ #include "wx/menuitem.h"
+ #include "wx/module.h"
#endif
-#include "wx/settings.h"
#include "wx/ownerdrw.h"
-#include "wx/menuitem.h"
#include "wx/fontutil.h"
-#include "wx/module.h"
#if wxUSE_OWNER_DRAWN
// a UDT. Will produce errors if applied using infix notation.
//
// shut it down
-#ifdef __VISUALC__
- #if __VISUALC__ <= 1300
+#if defined __VISUALC__ && __VISUALC__ <= 1300
+ #if __VISUALC__ >= 1200
#pragma warning(push)
- #pragma warning(disable: 4284)
#define POP_WARNINGS
#endif
+ #pragma warning(disable: 4284)
#endif
#include "wx/hashset.h"
-WX_DECLARE_HASH_SET(wxOwnerDrawn*, wxPointerHash, wxPointerEqual, OwnerDrawnSet)
+WX_DECLARE_HASH_SET(wxOwnerDrawn*, wxPointerHash, wxPointerEqual, OwnerDrawnSet);
#ifdef POP_WARNINGS
#pragma warning(pop)
// placed on top of each other.
if ( !m_strAccel.empty() )
{
- str.Pad(str.Length()%8);
+ str.Pad(str.length()%8);
str += m_strAccel;
}
dc.SetFont(GetFontToUse());
- dc.GetTextExtent(str, (long *)pwidth, (long *)pheight);
+ wxCoord w, h;
+ dc.GetTextExtent(str, &w, &h);
+ *pwidth = w;
+ *pheight = h;
// add space at the end of the menu for the submenu expansion arrow
// this will also allow offsetting the accel string from the right edge
xText += 3; // separate text from the highlight rectangle
SIZE sizeRect;
- ::GetTextExtentPoint32(hdc, strMenuText.c_str(), strMenuText.Length(), &sizeRect);
+ ::GetTextExtentPoint32(hdc, strMenuText.c_str(), strMenuText.length(), &sizeRect);
::DrawState(hdc, NULL, NULL,
- (LPARAM)strMenuText.c_str(), strMenuText.length(),
+ (LPARAM)strMenuText.wx_str(),
+ strMenuText.length(),
xText, rc.y + (int) ((rc.GetHeight()-sizeRect.cy)/2.0), // centre text vertically
rc.GetWidth()-margin, sizeRect.cy,
DST_PREFIXTEXT |
// right align accel string with right edge of menu ( offset by the
// margin width )
::DrawState(hdc, NULL, NULL,
- (LPARAM)m_strAccel.c_str(), m_strAccel.length(),
+ (LPARAM)m_strAccel.wx_str(),
+ m_strAccel.length(),
rc.GetWidth()-16-accel_width, rc.y+(int) ((rc.GetHeight()-sizeRect.cy)/2.0),
0, 0,
DST_TEXT |
if ( !bmp.Ok() )
{
- // for not checkable bitmaps we should always use unchecked one because
- // their checked bitmap is not set
+ // for not checkable bitmaps we should always use unchecked one
+ // because their checked bitmap is not set
bmp = GetBitmap(!IsCheckable() || (st & wxODChecked));
+
+#if wxUSE_IMAGE
+ if ( bmp.Ok() && st & wxODDisabled )
+ {
+ // we need to grey out the bitmap as we don't have any specific
+ // disabled bitmap
+ wxImage imgGrey = bmp.ConvertToImage().ConvertToGreyscale();
+ if ( imgGrey.Ok() )
+ bmp = wxBitmap(imgGrey);
+ }
+#endif // wxUSE_IMAGE
}
if ( bmp.Ok() )
{
wxMemoryDC dcMem(&dc);
- dcMem.SelectObject(bmp);
+ dcMem.SelectObjectAsSource(bmp);
// center bitmap
int nBmpWidth = bmp.GetWidth(),
#endif // wxUSE_OWNER_DRAWN
-