http://bugs.winehq.org/show_bug.cgi?id=25790
Summary: WM_SETTEXT handler for the user32 buttons generates WM_CTLCOLOR* inconsistent with Windows user32 Product: Wine Version: 1.3.11 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: user32 AssignedTo: wine-bugs@winehq.org ReportedBy: exclusion@gmail.com
Created an attachment (id=32868) --> (http://bugs.winehq.org/attachment.cgi?id=32868) Test source
Wine behavior when processing SetWindowText (WM_SETTEXT) doesn't exactly replicate Windows regarding WM_CTLCOLOR* messages. I found two inconsistencies and made the test (see attachments). First inconsistency: Windows doesn't generate WM_CTLCOLORSTATIC when WM_SETTEXT invoked for a PushButton and alike. Instead it generate WM_CTLCOLORBTN. In Windows I get: DialogBox.WindowProc: before SetWindowText DialogBox.WindowProc(WM_CTLCOLORBTN) DialogBox.WindowProc(WM_CTLCOLORBTN) DialogBox.WindowProc: after SetWindowText
In Wine: DialogBox.WindowProc: before SetWindowText DialogBox.WindowProc(WM_CTLCOLORSTATIC) DialogBox.WindowProc(WM_CTLCOLORBTN) DialogBox.WindowProc: after SetWindowText
Looking at http://msdn.microsoft.com/en-us/library/bb761849%28VS.85%29.aspx (WM_CTLCOLORBTN Message) and http://support.microsoft.com/kb/130952/en-us?fr=1 I believe that the WM_SETTEXT handler for BS_PUSHBUTTON, BS_DEFPUSHBUTTON and BS_PUSHLIKE should get the hbrush with the WM_CTLCOLORBTN message.
Second inconsistency: Windows doesn't generate WM_CTLCOLOR* when WM_SETTEXT invoked for the invisible controls. My test in Windows shows: DialogBox.WindowProc: before SetWindowText DialogBox.WindowProc: after SetWindowText
In Wine: DialogBox.WindowProc: before SetWindowText DialogBox.WindowProc(WM_CTLCOLORBTN) DialogBox.WindowProc: after SetWindowText
These inconsistencies can be critical when an application doesn't expect to get these WM_CTLCOLOR* and tries to handle it before doing some initialization. In particular, Trillian 3.1 crashes when opening Trillian Preferences, Message Windows.