I have an application where I get the styles from a window with
GetWindowLong(m_hWnd, GWL_EXSTYLE);
In Windows I get 0x00000110 but in wine I get 0x40000110. From the wine headers (mine seem to old) I get this means 'managed by the system'. Is this something wine specific? Do I need to pay attention to this? If it's a valid Windows flag why isn't it set in Windows? If it's just wine specific can I just mask it out?
As these flags are only wine internal I don't know if it's right to give them to the user. On the other hand (if this is needed/usefull) wine should be capable of disregarding them if they are given to the CreateWnd function. As it is now I need to change my application for wine (which I did to continue work) but that shouldn't be desirable.
I'd say internal Wine flags should definitely get masked out. And NOT by your external program, but by Wine itself (since it needs to be as compatible with Windows as possible).
Whatever workaround you come up with in your program to make it Wine-compatible, rest assured that in > 95% of all cases it's a bad idea: we really need to get Wine fixed instead.
Feel free to submit a patch correcting GetWindowLong and similar functions.
I would... but I'm not that familiar with the wine code. I don't know if this function is also used internally where these flags are needed. But I tried. Here it is.
bye Fabi
Index: windows/win.c =================================================================== RCS file: /home/wine/wine/windows/win.c,v retrieving revision 1.230 diff -u -r1.230 win.c --- windows/win.c 11 Dec 2003 05:34:53 -0000 1.230 +++ windows/win.c 15 Dec 2003 14:36:43 -0000 @@ -1880,7 +1880,7 @@ switch(offset) { case GWL_STYLE: retvalue = reply->old_style; break; - case GWL_EXSTYLE: retvalue = reply->old_ex_style; break; + case GWL_EXSTYLE: retvalue = reply->old_ex_style&~(WS_EX_TRAYWINDOW|WS_EX_MANAGED); break; case GWL_ID: retvalue = reply->old_id; break; case GWL_HINSTANCE: retvalue = (ULONG_PTR)reply->old_instance; break; case GWL_USERDATA: retvalue = (ULONG_PTR)reply->old_user_data; break; @@ -1936,7 +1936,7 @@ { case GWL_USERDATA: retvalue = wndPtr->userdata; break; case GWL_STYLE: retvalue = wndPtr->dwStyle; break; - case GWL_EXSTYLE: retvalue = wndPtr->dwExStyle; break; + case GWL_EXSTYLE: retvalue = wndPtr->dwExStyle&~(WS_EX_TRAYWINDOW|WS_EX_MANAGED); break; case GWL_ID: retvalue = (LONG)wndPtr->wIDmenu; break; case GWL_WNDPROC: retvalue = (LONG)WINPROC_GetProc( wndPtr->winproc, type ); break; case GWL_HINSTANCE: retvalue = (LONG)wndPtr->hInstance; break;