]> git.saurik.com Git - wxWidgets.git/commitdiff
add wxDrawStateBitmap() (closes #10289)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Jan 2009 14:38:44 +0000 (14:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 25 Jan 2009 14:38:44 +0000 (14:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58397 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/private.h
src/msw/ownerdrw.cpp

index 462bf91ec74a028d33f776f1e3928d4afbb2334f..3a0ffc9e75e7a933c7bbc0efbdb1ce4326d3b026 100644 (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
 //
index 3dfc9d006553a6eff3d084008c50b6cc3f92193b..b25513c6026f760fd310bec50aad4c1f9ec58b61 100644 (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