how to detect why I got the focus

Chris Mellon arkanes at gmail.com
Tue Dec 4 09:49:45 PST 2007


On Dec 4, 2007 8:59 AM, dot news at armadillo dot fr"@a.mx.sunsite.dk
Harry <"harry> wrote:
>
> Chris,
>
> wxActivateEvent contains only the information that my application or
> window got/lost the focus, not why/where.
> I've searched the source of wxWidgets, without finding any code that
> deals with the why/where.
> I still hope that I've missed out on some simple solution.
>
> Harry
>
>
> chris elliott wrote:
> > you need to handle a wxActivateEvent
> >
> > see
> > http://biolpc22.york.ac.uk/wx/docs/html/wx/wx_wxactivateevent.html#wxactivateevent
> >
> >
> > chris
> >
> > Harry wrote:
> >>
> >>
> >> I need to detect why my frame has received the focus.
> >> The reason for this is that I have quite a complicated constellation
> >> of windows positioned within the frame.
> >> If the user clicks by mistake inside the frame, I would like to
> >> return the focus to his last window.
> >> If the user clicks the frame by intention, for example to resize it,
> >> I would like to let him do so without interference,
> >> process the resize event, and only afterwards return the focus to his
> >> last window.
> >>
> >> Under MSW I would process the WM_MOUSEACTIVATE message before getting
> >> the focus to find out the reason why.
> >> However, I haven't found any such mechanism in wxWidgets that allows
> >> me this functionality.
> >>
> >> Anyone has any idea how I might detect why I got the focus in a
> >> portable way ?
> >>
> >>



I'm not sure why you think that catching WM_MOUSEACTIVE is any sort of
indication of the users intention.

Note that on some platforms, frames themselves can't even have the focus.

Also note that a click in the non-client area (such as the resize
border) doesn't remove focus from a child window.

Finally, if you make a panel the only child of  your frame, and have
all your other controls (as is recommended behavior in general) the
focus handling in wx.Panel will prevent it from taking focus if there
are any child windows that can have it, and will give the behavior you
seem to be interested in.




More information about the wx-users mailing list