+/***********************************************************************
+ *
+ * OSK_ThemeHandler
+ *
+ * Function helper which handles theme drawing of controls
+ */
+LRESULT APIENTRY OSK_ThemeHandler(HWND hDlg, NMCUSTOMDRAW *pNmDraw)
+{
+ HTHEME hTheme;
+ HWND hDlgButtonCtrl;
+ INT iState = PBS_NORMAL;
+
+ /* Retrieve the theme handle for the button controls */
+ hDlgButtonCtrl = pNmDraw->hdr.hwndFrom;
+ hTheme = GetWindowTheme(hDlgButtonCtrl);
+
+ /*
+ Begin the painting procedures if we retrieved
+ the theme for control buttons of the dialog.
+ */
+ if (hTheme)
+ {
+ /*
+ The button could be either in normal state or pushed.
+ Retrieve its state and save to a variable.
+ */
+ if (pNmDraw->uItemState & CDIS_DEFAULT)
+ {
+ iState = PBS_DEFAULTED;
+ }
+ else if (pNmDraw->uItemState & CDIS_SELECTED)
+ {
+ iState = PBS_PRESSED;
+ }
+ else if (pNmDraw->uItemState & CDIS_HOT)
+ {
+ iState = PBS_HOT;
+ }
+
+ if (IsThemeBackgroundPartiallyTransparent(hTheme, BP_PUSHBUTTON, iState))
+ {
+ /* Draw the application if the theme is transparent */
+ DrawThemeParentBackground(hDlg, pNmDraw->hdc, &pNmDraw->rc);
+ }
+
+ /* Draw it */
+ DrawThemeBackground(hTheme, pNmDraw->hdc, BP_PUSHBUTTON, iState, &pNmDraw->rc, NULL);
+ }
+
+ return CDRF_SKIPDEFAULT;
+}
+