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:
parent
f7d8cefd72
commit
0a1f778483
@ -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
|
||||
//
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user