Update released.
Replaced WM_CHANGEUISTATE with WM_UPDATEUISTATE in VisualStyles.bas.
This change was already done in ComCtlsBase.bas since a while. (use of WM_UPDATEUISTATE instead of WM_CHANGEUISTATE)
The difference between the two is (in short) the message travel direction. WM_CHANGEUISTATE travels the tree up, verifies if change is needed, and then issue WM_UPDATEUISTATE down the tree for all childs.
For our needs we want for SetupVisualStyles to have all child controls the needed ui state. So WM_UPDATEUISTATE is more direct and more performant.
Beside that, when using MDI child forms WM_CHANGEUISTATE will only work *once*. Because it travels up to the top-level window (MDI container form).
So next time a new MDI child form is open WM_CHANGEUISTATE will not issue WM_UPDATEUISTATE as the top-level window is already marked with the needed changes.
This is another argument why WM_UPDATEUISTATE is definitely better for VisualStyles.bas

Originally Posted by
ScriptBASIC
I thought I would give my VB6 OCX form control a try in Wine. I was surprise it work since I haven't had much luck with VB6 and Wine in the past. This form is using your CCR OCX which works fine under standard Windows but for some reason the checkbox background is black. The other controls seem to render and theme okay.
Your screenshot looks like the typical VB.Frame theme bug
In the VisualStyles.bas this is fixed by redirecting WM_PRINTCLIENT message (for the black background drawing flaws) and WM_MOUSELEAVE (for some flicker) to DefWindowProc:
Code:
Private Function RedirectFrame(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal uIdSubclass As Long, ByVal dwRefData As Long) As Long
Select Case wMsg
Case WM_PRINTCLIENT, WM_MOUSELEAVE
RedirectFrame = DefWindowProc(hWnd, wMsg, wParam, lParam)
Exit Function
End Select
RedirectFrame = DefSubclassProc(hWnd, wMsg, wParam, lParam)
If wMsg = WM_NCDESTROY Then Call RemoveRedirectFrame(hWnd, uIdSubclass)
End Function
Can you check if your Form uses VB.Frames ?