https://bugs.winehq.org/show_bug.cgi?id=37876
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|-unknown |user32 Summary|Accordance 11 crashes after |Accordance 11 main user |splash |interface remains invisible | |(no calls to layered | |windows API with top-most | |window 'WS_EX_LAYERED' | |extended style set) Ever confirmed|0 |1
--- Comment #4 from Anastasius Focht focht@gmx.net --- Hello folks,
refining summary, there is really no crash here.
The main user interface is actually there - just invisible.
Using some Spy++ tool one can see the whole window/control hierarchy. The top-most window has 'WS_EX_LAYERED' extended style set.
Trace log also shows this:
--- snip --- ... 0023:Call user32.CreateWindowExW(02080000,02007098 L"AccordChildWorkspace",00000000,80cf0000,00000000,00000000,00000190,000000c8,00000000,0001009a,00400000,00000000) ret=0044d2d5 0023:trace:win:WIN_CreateWindowEx (null) L"AccordChildWorkspace" ex=02080000 style=80cf0000 0,0 400x200 parent=(nil) menu=0x1009a inst=0x400000 params=(nil) 0023:trace:win:dump_window_styles style: WS_POPUP WS_CAPTION WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX 0023:trace:win:dump_window_styles exstyle: WS_EX_LAYERED 02000000 0023:trace:win:WIN_SetWindowLong 0x10362 -12 1009a W 0023:trace:win:GetWindowRect hwnd 0x10362 (0,0)-(0,0) ... 0023:Ret user32.CreateWindowExW() retval=00010362 ret=0044d2d5 0023:Call user32.SetWindowPos(00010362,00000000,00000000,00000000,00000000,00000000,00000037) ret=0044d3ab 0023:trace:win:SetWindowPos hwnd 0x10362, after (nil), 0,0 (0x0), flags 00000037 ... 0023:Call user32.IsWindowVisible(00010362) ret=0043b744 0023:Ret user32.IsWindowVisible() retval=00000001 ret=0043b744 ... --- snip ---
Debugger:
--- snip --- Wine-dbg>bt
Backtrace:
=>0 0x7eccf015 CreateWindowExW(exStyle=0x2080000, className="AccordChildWorkspace", windowName=0x0(nil), style=0x80cf0000, x=0, y=0, width=0x190, height=0xc8, parent=(nil), menu=0x10078, instance=0x400000, data=0x0(nil)) [/home/focht/projects/wine/wine.repo/src/dlls/user32/win.c:1735] in user32 (0x01aff714) 1 0x0044d2d5 in accordance (+0x4d2d4) (0x01aff844) 2 0x0043a709 in accordance (+0x3a708) (0x01aff8dc) 3 0x0048c179 in accordance (+0x8c178) (0x01aff908) 4 0x00512107 in accordance (+0x112106) (0x01aff950) 5 0x0054bc68 in accordance (+0x14bc67) (0x01aff984) 6 0x0086d60b in accordance (+0x46d60a) (0x01affc4c) ... --- snip ---
MSDN:
http://msdn.microsoft.com/en-us/library/ms997507.aspx ("Layered Windows")
http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599%28v=vs.85%2... ("Window Features")
--- quote ---- To create a layered window, specify the WS_EX_LAYERED extended window style when calling the CreateWindowEx function, or call the SetWindowLong function to set WS_EX_LAYERED after the window has been created. After the CreateWindowEx call, the layered window will not become visible until the SetLayeredWindowAttributes or UpdateLayeredWindow function has been called for this window. --- quote ----
Unfortunately there is no single call to layered windows API during startup phase.
Although the app imports 'SetLayeredWindowAttributes' and 'UpdateLayeredWindow', those API references are not used by main UI creation code. I couldn't find any obvious code paths or ways to trigger calls from the 5-6 call sites present.
Additionally, most child windows/controls have 'WS_EX_TRANSPARENT' set.
--- snip --- ... 0023:Call user32.CreateWindowExW(00000020,00a1b424 L"BUTTON",00a1b418 L" ",5001000b,00000000,00000000,00000014,00000014,00010362,1389fff4,00400000,00000000) ret=005242b1 0023:trace:win:WIN_CreateWindowEx L" " L"BUTTON" ex=00000020 style=5001000b 0,0 20x20 parent=0x10362 menu=0x1389fff4 inst=0x400000 params=(nil) 0023:trace:win:dump_window_styles style: WS_CHILD WS_VISIBLE WS_TABSTOP 0000000b 0023:trace:win:dump_window_styles exstyle: WS_EX_TRANSPARENT 0023:trace:win:WIN_SetWindowLong 0x20386 -12 1389fff4 W ... --- snip ---
--- quote --- Hit testing of a layered window is based on the shape and transparency of the window. This means that the areas of the window that are color-keyed or whose alpha value is zero will let the mouse messages through. However, if the layered window has the WS_EX_TRANSPARENT extended window style, the shape of the layered window will be ignored and the mouse events will be passed to other windows underneath the layered window. --- quote ---
Without modifying any code, one can force the main user interface to become visible by removing 'WS_EX_LAYERED' style from top-most window 'AccordChildWorkspace' using Spy++ tool. At this point the user interface becomes fully usable.
Either this style is somehow ignored for whatever reason or due to missing event/message sequence, calls to layered windows API don't get triggered which ought to make this visible.
$ sha1sum Accordance11.0.3.exe 3543428d45ae9258b14501cbfcbd83f4944896a6 Accordance11.0.3.exe
$ du -sh Accordance11.0.3.exe 59M Accordance11.0.3.exe
$ wine --version wine-1.7.34
Regards