[Bug 37876] Accordance 11 main user interface remains invisible (no calls to layered windows API with top-most window 'WS_EX_LAYERED' extended style set)

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Jan 11 08:36:41 CST 2015


https://bugs.winehq.org/show_bug.cgi?id=37876

Anastasius Focht <focht at 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 at 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%29.aspx
("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

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list