add wxDrawStateBitmap() (closes #10289)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58397 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-01-25 14:38:44 +00:00
parent f7d8cefd72
commit 0a1f778483
2 changed files with 62 additions and 0 deletions

View File

@ -306,6 +306,22 @@ extern HICON wxBitmapToHICON(const wxBitmap& bmp);
extern
HCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);
#if wxUSE_OWNER_DRAWN
// Draw the bitmap in specified state (this is used by owner drawn controls)
enum wxDSBStates
{
wxDSB_NORMAL = 0,
wxDSB_SELECTED,
wxDSB_DISABLED
};
extern
BOOL wxDrawStateBitmap(HDC hDC, HBITMAP hBitmap, int x, int y, UINT uState);
#endif // wxUSE_OWNER_DRAWN
// get (x, y) from DWORD - notice that HI/LOWORD can *not* be used because they
// will fail on system with multiple monitors where the coords may be negative
//

View File

@ -532,4 +532,50 @@ bool wxOwnerDrawn::OnDrawItem(wxDC& dc,
}
// ----------------------------------------------------------------------------
// global helper functions implemented here
// ----------------------------------------------------------------------------
BOOL wxDrawStateBitmap(HDC hDC, HBITMAP hBitmap, int x, int y, UINT uState)
{
// determine size of bitmap image
BITMAP bmp;
if ( !::GetObject(hBitmap, sizeof(BITMAP), &bmp) )
return FALSE;
BOOL result;
switch ( uState )
{
case wxDSB_NORMAL:
case wxDSB_SELECTED:
{
// uses image list functions to draw
// - normal bitmap with support transparency
// (image list internally create mask etc.)
// - blend bitmap with the background colour
// (like default selected items)
HIMAGELIST hIml = ::ImageList_Create(bmp.bmWidth, bmp.bmHeight,
ILC_COLOR32 | ILC_MASK, 1, 1);
::ImageList_Add(hIml, hBitmap, NULL);
UINT fStyle = uState == wxDSB_SELECTED ? ILD_SELECTED : ILD_NORMAL;
result = ::ImageList_Draw(hIml, 0, hDC, x, y, fStyle);
::ImageList_Destroy(hIml);
}
break;
case wxDSB_DISABLED:
result = ::DrawState(hDC, NULL, NULL, (LPARAM)hBitmap, 0, x, y,
bmp.bmWidth, bmp.bmHeight,
DST_BITMAP | DSS_DISABLED);
break;
default:
wxFAIL_MSG( _T("DrawStateBitmap: unknown wxDSBStates value") );
result = FALSE;
}
return result;
}
#endif // wxUSE_OWNER_DRAWN