#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/ownerdrw.h"
#include "wx/fontutil.h"
-#include "wx/module.h"
#if wxUSE_OWNER_DRAWN
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
}
- HDC hdc = GetHdcOf(dc);
+ wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
+ HDC hdc = GetHdcOf(*impl);
COLORREF colOldText = ::SetTextColor(hdc, colText),
colOldBack = ::SetBkColor(hdc, colBack);
SIZE 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(),