No changes, just update a comment about default buttons in wxMSW.
Remove the TODO from it because it's not really obvious if using the proposed approach is such a good idea. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72669 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -192,16 +192,25 @@ wxSize wxButtonBase::GetDefaultSize()
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The comment below and all this code is probably due to not using WM_NEXTDLGCTL
|
In normal Windows programs there is no need to handle default button
|
||||||
message when changing focus (but just SetFocus() which is not enough), see
|
manually because this is taken care by the system provided you use
|
||||||
http://blogs.msdn.com/oldnewthing/archive/2004/08/02/205624.aspx for the
|
WM_NEXTDLGCTL and not just SetFocus() to switch focus betweeh the controls
|
||||||
full explanation.
|
(see http://blogs.msdn.com/oldnewthing/archive/2004/08/02/205624.aspx for
|
||||||
|
the full explanation why just calling SetFocus() is not enough).
|
||||||
|
|
||||||
TODO: Do use WM_NEXTDLGCTL and get rid of all this code.
|
However this only works if the window is a dialog, i.e. uses DefDlgProc(),
|
||||||
|
but not with plain windows using DefWindowProc() and we do want to have
|
||||||
|
default buttons inside frames as well, so we're forced to reimplement all
|
||||||
|
this logic ourselves. It would be great to avoid having to do this but using
|
||||||
|
DefDlgProc() for all the windows would almost certainly result in more
|
||||||
|
problems, we'd need to carefully filter messages and pass some of them to
|
||||||
|
DefWindowProc() and some of them to DefDlgProc() which looks dangerous (what
|
||||||
|
if the handling of some message changes in some Windows version?), so doing
|
||||||
|
this ourselves is probably a lesser evil.
|
||||||
|
|
||||||
|
Read the rest to learn everything you ever wanted to know about the default
|
||||||
|
buttons but were afraid to ask.
|
||||||
|
|
||||||
"Everything you ever wanted to know about the default buttons" or "Why do we
|
|
||||||
have to do all this?"
|
|
||||||
|
|
||||||
In MSW the default button should be activated when the user presses Enter
|
In MSW the default button should be activated when the user presses Enter
|
||||||
and the current control doesn't process Enter itself somehow. This is
|
and the current control doesn't process Enter itself somehow. This is
|
||||||
@@ -223,14 +232,6 @@ wxSize wxButtonBase::GetDefaultSize()
|
|||||||
to it. When the button loses focus, it unsets the temporary default and so
|
to it. When the button loses focus, it unsets the temporary default and so
|
||||||
the default item will be the permanent default -- that is the default button
|
the default item will be the permanent default -- that is the default button
|
||||||
if any had been set or none otherwise, which is just what we want.
|
if any had been set or none otherwise, which is just what we want.
|
||||||
|
|
||||||
NB: all this is quite complicated by now and the worst is that normally
|
|
||||||
it shouldn't be necessary at all as for the normal Windows programs
|
|
||||||
DefWindowProc() and IsDialogMessage() take care of all this
|
|
||||||
automatically -- however in wxWidgets programs this doesn't work for
|
|
||||||
nested hierarchies (i.e. a notebook inside a notebook) for unknown
|
|
||||||
reason and so we have to reproduce all this code ourselves. It would be
|
|
||||||
very nice if we could avoid doing it.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// set this button as the (permanently) default one in its panel
|
// set this button as the (permanently) default one in its panel
|
||||||
|
Reference in New Issue
Block a user