\membersection{wxCmdLineParser::Parse}\label{wxcmdlineparserparse}
 
-\func{int}{Parse}{\void}
+\func{int}{Parse}{\param{bool }{giveUsage = {\tt TRUE}}}
 
 Parse the command line, return $0$ if ok, $-1$ if {\tt "-h"} or {\tt "--help"} 
 option was encountered and the help message was given or a positive value if a
 syntax error occured.
 
+\wxheading{Parameters}
+
+\docparam{giveUsage}{If {\tt TRUE} (default), the usage message is given if a
+syntax error was encountered while parsing the command line or if help was
+requested. If {\tt FALSE}, only error messages about possible syntax errors
+are given, use \helpref{Usage}{wxcmdlineparserusage} to show the usage message
+from the caller if needed.}
+
 \membersection{wxCmdLineParser::Usage}\label{wxcmdlineparserusage}
 
 \func{void}{Usage}{\void}
 
     // parse the command line, return 0 if ok, -1 if "-h" or "--help" option
     // was encountered and the help message was given or a positive value if a
     // syntax error occured
-    int Parse();
+    //
+    // if showUsage is true, Usage() is called in case of syntax error or if
+    // help was requested
+    int Parse(bool showUsage = TRUE);
 
     // give the usage message describing all program options
     void Usage();
 
 
 public:
     wxCmdLineEntryType kind;
-    wxString shortName, longName, description;
+    wxString shortName,
+             longName,
+             description;
     wxCmdLineParamType type;
     int flags;
 
 // the real work is done here
 // ----------------------------------------------------------------------------
 
-int wxCmdLineParser::Parse()
+int wxCmdLineParser::Parse(bool showUsage)
 {
     bool maybeOption = TRUE;    // can the following arg be an option?
     bool ok = TRUE;             // TRUE until an error is detected
         }
     }
 
-    if ( !ok )
+    if ( !ok && showUsage )
     {
         Usage();
     }
             brief << _T('[');
         }
 
-        brief << chSwitch << opt.shortName;
+        if ( !opt.shortName.empty() )
+        {
+            brief << chSwitch << opt.shortName;
+        }
+        else if ( !opt.longName.empty() )
+        {
+            brief << _T("--") << opt.longName;
+        }
+        else
+        {
+            wxFAIL_MSG( _T("option without neither short nor long name?") );
+        }
 
         wxString option;
-        option << _T("  ") << chSwitch << opt.shortName;
-        if ( !!opt.longName )
+
+        if ( !opt.shortName.empty() )
+        {
+            option << _T("  ") << chSwitch << opt.shortName;
+        }
+
+        if ( !opt.longName.empty() )
         {
-            option << _T("  --") << opt.longName;
+            option << (option.empty() ? _T("  ") : _T(", "))
+                   << _T("--") << opt.longName;
         }
 
         if ( opt.kind != wxCMD_LINE_SWITCH )
         wxLogMessage(m_data->m_logo);
     }
 
+    // in console mode we want to show the brief usage message first, then the
+    // detailed one but in GUI build we give the details first and then the
+    // summary - like this, the brief message appears in the wxLogGui dialog,
+    // as expected
+#if !wxUSE_GUI
     wxLogMessage(brief);
+#endif // !wxUSE_GUI
 
     // now construct the detailed help message
     size_t len, lenMax = 0;
     }
 
     wxLogMessage(detailed);
+
+    // do it now if not done above
+#if wxUSE_GUI
+    wxLogMessage(brief);
+#endif // wxUSE_GUI
 }
 
 // ----------------------------------------------------------------------------