+// ---------------------------------------------------------------------------
+// RegisterWindowClasses
+// ---------------------------------------------------------------------------
+
+// TODO we should only register classes really used by the app. For this it
+// would be enough to just delay the class registration until an attempt
+// to create a window of this class is made.
+bool wxApp::RegisterWindowClasses()
+{
+// TODO:
+/*
+ WNDCLASS wndclass;
+
+ // for each class we register one with CS_(V|H)REDRAW style and one
+ // without for windows created with wxNO_FULL_REDRAW_ON_REPAINT flag
+ static const long styleNormal = 0; // TODO: CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
+ static const long styleNoRedraw = 0; // TODO: CS_DBLCLKS;
+
+ // the fields which are common to all classes
+ wndclass.lpfnWndProc = (WNDPROC)wxWndProc;
+ wndclass.cbClsExtra = 0;
+ wndclass.cbWndExtra = sizeof( DWORD ); // VZ: what is this DWORD used for?
+ wndclass.hInstance = wxhInstance;
+ wndclass.hIcon = (HICON) NULL;
+ wndclass.hCursor = 0; // TODO: ::LoadCursor((HINSTANCE)NULL, IDC_ARROW);
+ wndclass.lpszMenuName = NULL;
+
+ // Register the frame window class.
+ wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
+ wndclass.lpszClassName = wxFrameClassName;
+ wndclass.style = styleNormal;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(frame)");
+
+ return FALSE;
+ }
+
+ // "no redraw" frame
+ wndclass.lpszClassName = wxFrameClassNameNoRedraw;
+ wndclass.style = styleNoRedraw;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(no redraw frame)");
+
+ return FALSE;
+ }
+
+ // Register the MDI frame window class.
+ wndclass.hbrBackground = (HBRUSH)NULL; // paint MDI frame ourselves
+ wndclass.lpszClassName = wxMDIFrameClassName;
+ wndclass.style = styleNormal;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(MDI parent)");
+
+ return FALSE;
+ }
+
+ // "no redraw" MDI frame
+ wndclass.lpszClassName = wxMDIFrameClassNameNoRedraw;
+ wndclass.style = styleNoRedraw;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(no redraw MDI parent frame)");
+
+ return FALSE;
+ }
+
+ // Register the MDI child frame window class.
+ wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+ wndclass.lpszClassName = wxMDIChildFrameClassName;
+ wndclass.style = styleNormal;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(MDI child)");
+
+ return FALSE;
+ }
+
+ // "no redraw" MDI child frame
+ wndclass.lpszClassName = wxMDIChildFrameClassNameNoRedraw;
+ wndclass.style = styleNoRedraw;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(no redraw MDI child)");
+
+ return FALSE;
+ }
+
+ // Register the panel window class.
+ wndclass.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH );
+ wndclass.lpszClassName = wxPanelClassName;
+ wndclass.style = styleNormal;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(panel)");
+
+ return FALSE;
+ }
+
+ // Register the canvas and textsubwindow class name
+ wndclass.hbrBackground = (HBRUSH)NULL;
+ wndclass.lpszClassName = wxCanvasClassName;
+
+ if ( !RegisterClass(&wndclass) )
+ {
+ wxLogLastError("RegisterClass(canvas)");
+
+ return FALSE;
+ }
+*/
+ return TRUE;
+}
+
+// ---------------------------------------------------------------------------
+// Convert Windows to argc, argv style
+// ---------------------------------------------------------------------------
+
+void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine)
+{
+ wxStringList args;
+
+ wxString cmdLine(lpCmdLine);
+ int count = 0;
+
+ // Get application name
+ wxChar name[260]; // 260 is MAX_PATH value from windef.h
+// TODO: ::GetModuleFileName(wxhInstance, name, WXSIZEOF(name));
+
+ args.Add(name);
+ count++;
+
+ wxStrcpy(name, wxFileNameFromPath(name));
+ wxStripExtension(name);
+ wxTheApp->SetAppName(name);
+
+ // Break up string
+ // Treat strings enclosed in double-quotes as single arguments
+ int i = 0;
+ int len = cmdLine.Length();
+ while (i < len)
+ {
+ // Skip whitespace
+ while ((i < len) && wxIsspace(cmdLine.GetChar(i)))
+ i ++;
+
+ if (i < len)
+ {
+ if (cmdLine.GetChar(i) == wxT('"')) // We found the start of a string
+ {
+ i ++;
+ int first = i;
+ while ((i < len) && (cmdLine.GetChar(i) != wxT('"')))
+ i ++;
+
+ wxString arg(cmdLine.Mid(first, (i - first)));
+
+ args.Add(arg);
+ count ++;
+
+ if (i < len)
+ i ++; // Skip past 2nd quote
+ }
+ else // Unquoted argument
+ {
+ int first = i;
+ while ((i < len) && !wxIsspace(cmdLine.GetChar(i)))
+ i ++;
+
+ wxString arg(cmdLine.Mid(first, (i - first)));
+
+ args.Add(arg);
+ count ++;
+ }
+ }
+ }
+
+ wxTheApp->argv = new wxChar*[count + 1];
+ for (i = 0; i < count; i++)
+ {
+ wxString arg(args[i]);
+ wxTheApp->argv[i] = copystring((const wxChar*)arg);
+ }
+ wxTheApp->argv[count] = NULL; // argv[] is a NULL-terminated list
+ wxTheApp->argc = count;
+}
+
+//// Cleans up any wxWindows internal structures left lying around
+