keep cc'ing wine-devel please

"Medland, Bill" <[EMAIL PROTECTED]> wrote:

> > Could you please test patch posted by Bill Medland to 
> > wine-patches today? It's
> > not entirely correct though. My tests show that 
> > SetWindowLong(GWL_HWNDPARENT)
> > call changes simultaneously both parent and owner for top 
> > level windows and
> > returns old value (not sure old owner or parent it is).
> 
> Even if the window is not in fact a child?

Yes. According to my test program.

>  Please excuse my ignorance here;
> I am still a little shaky on terminology.  Surely if it is a top level
> window then its parent is the desktop and always will be.
> 
> Or are you saying that it reparents to the desktop (and so the problem is
> down in the SetParent code)?

I don't see a reparenting to desktop in the relay trace.

> > But top level windows created by Visual Vasic are special: 
> > they have no parent,
> > but only owner according to Spy++. In my tests I can't 
> > reproduce it yet.
> 
> So you suspect that Spy++ is not telling the truth?  (It wouldn't be the
> first time)

I incline to trust Spy++ here. It correctly shows paerent/owner for my
test application playing with SetParent/SetWindowLong. It seems that
Windows always sets 0 in the parent field if the parent is desktop. Even
after explicit SetParent(GetDesktopWindow()) or SetWindowLong(GWL_HWNDPARENT,
GetDesktopWindow()) GetWindowLong(GWL_HWNDPARENT)/GetWindow(GW_OWNER)
return 0 in my tests.

> > A bit of investigation of Wine source revealed that some places use
> > GetAncestor(hwnd, GA_PARENT), while others use GetParent(hwnd).
> 
> And, in the case of WIN_CreateWindowEx, GetAncestor (hwnd, GA_ROOT)
> 
> > Since
> > their behaviour is different in respect of top level and 
> > child windows,
> > some major clean up in that area in Wine is needed.
> 
> Careful.
> 
> In our particular case, according to Spy++ the owner of the ThunderRT6FormDC
> is a third-generation window. viz. the actual window requested, not one of
> its ancestors.
> 
> i.e. I see the call to SetWindowLong (30056 (The ThunderRT6FormDC), -8,
> 10046 (The ThunderRT6UserControlDC))
> 
> I guess an important point here is that in our case the Visual Basic is an
> OCX sitting inside a container and so the ThunderRT6UserControlDC is not
> first generation.

Now I don't understand your terminology. parent - child - sibling are
the termings in the Windows world. Who of them was born earlier matters
only when Z order and visibility are taken into account (and can be easily
changed).

-- 
Dmitry.




Reply via email to