]> git.saurik.com Git - wxWidgets.git/commitdiff
No changes, just update a comment about default buttons in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 13 Oct 2012 22:54:09 +0000 (22:54 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 13 Oct 2012 22:54:09 +0000 (22:54 +0000)
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

src/msw/button.cpp

index d00f8777930bc3640b742a0c2a8ae8230fbfe93e..324803e4d8f724f0e2fcaa7d0ecf36e06fafc3aa 100644 (file)
@@ -192,16 +192,25 @@ wxSize wxButtonBase::GetDefaultSize()
 // ----------------------------------------------------------------------------
 
 /*
-   The comment below and all this code is probably due to not using WM_NEXTDLGCTL
-   message when changing focus (but just SetFocus() which is not enough), see
-   http://blogs.msdn.com/oldnewthing/archive/2004/08/02/205624.aspx for the
-   full explanation.
+   In normal Windows programs there is no need to handle default button
+   manually because this is taken care by the system provided you use
+   WM_NEXTDLGCTL and not just SetFocus() to switch focus betweeh the controls
+   (see http://blogs.msdn.com/oldnewthing/archive/2004/08/02/205624.aspx for
+   the full explanation why just calling SetFocus() is not enough).
+
+   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.
 
-   TODO: Do use WM_NEXTDLGCTL and get rid of all this code.
-
-
-   "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
    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
    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.
-
-   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