+ wxBitmap::InitStandardHandlers();
+
+ g_globalCursor = new wxCursor;
+
+// TODO:
+/*
+ wxSTD_FRAME_ICON = LoadIcon(wxhInstance, wxT("wxSTD_FRAME"));
+ wxSTD_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, wxT("wxSTD_MDIPARENTFRAME"));
+ wxSTD_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, wxT("wxSTD_MDICHILDFRAME"));
+
+ wxDEFAULT_FRAME_ICON = LoadIcon(wxhInstance, wxT("wxDEFAULT_FRAME"));
+ wxDEFAULT_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, wxT("wxDEFAULT_MDIPARENTFRAME"));
+ wxDEFAULT_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, wxT("wxDEFAULT_MDICHILDFRAME"));
+*/
+ RegisterWindowClasses();
+
+ // Create the brush for disabling bitmap buttons
+// TODO:
+/*
+ LOGBRUSH lb;
+ lb.lbStyle = BS_PATTERN;
+ lb.lbHatch = (int)LoadBitmap( wxhInstance, wxT("wxDISABLE_BUTTON_BITMAP") );
+ if ( lb.lbHatch )
+ {
+ wxDisableButtonBrush = ::CreateBrushIndirect( & lb );
+ ::DeleteObject( (HGDIOBJ)lb.lbHatch );
+ }
+ */
+ //else: wxWindows resources are probably not linked in
+
+ wxWinHandleList = new wxList(wxKEY_INTEGER);
+
+ // This is to foil optimizations in Visual C++ that throw out dummy.obj.
+ // PLEASE DO NOT ALTER THIS.
+#if !defined(WXMAKINGDLL)
+ extern char wxDummyChar;
+ if (wxDummyChar) wxDummyChar++;
+#endif
+
+ wxSetKeyboardHook(TRUE);
+
+ wxModule::RegisterModules();
+ if (!wxModule::InitializeModules())
+ return FALSE;
+ return TRUE;
+}
+
+// ---------------------------------------------------------------------------
+// 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;
+ }