]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/app.cpp
wxConfig changes to be more logical.
[wxWidgets.git] / src / msw / app.cpp
index 6a73f6d3222f42b32ba10ce9383beb8cfa21645f..2380393bfd4e94dff12297a1cd35f3f4a4bfdf5f 100644 (file)
 #include <commctrl.h>
 #endif
 
+// use debug CRT functions for memory leak detections in VC++
+/* Doesn't work when using the makefiles, for some reason.
+#if defined(__WXDEBUG__) && defined(_MSC_VER)
+  #include <crtdbg.h>
+#endif
+*/
+
 extern char *wxBuffer;
 extern char *wxOsVersion;
 extern wxList *wxWinHandleList;
@@ -263,9 +270,9 @@ bool wxApp::RegisterWindowClasses()
   memset(&wndclass3, 0, sizeof(WNDCLASS));   // start with NULL defaults
   // Use CS_OWNDC to avoid messing about restoring the context
   // for every graphic operation.
-//  wndclass3.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS ; 
+//  wndclass3.style         = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS ;
   // wxWin 2.0
-  wndclass3.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ; 
+  wndclass3.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS ;
   wndclass3.lpfnWndProc   = (WNDPROC)wxWndProc;
   wndclass3.cbClsExtra    = 0;
   wndclass3.cbWndExtra    = sizeof( DWORD ); // was 4
@@ -330,8 +337,9 @@ void wxApp::CleanUp()
 
   if (wxWinHandleList)
     delete wxWinHandleList ;
-    
+
   // do it as the very last thing because everything else can log messages
+  wxLog::DontCreateOnDemand();
   delete wxLog::SetActiveTarget(NULL);
 }
 
@@ -351,6 +359,8 @@ void wxApp::CommonInit()
 
   wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
   wxTheColourDatabase->Initialize();
+
+  wxInitializeStockLists();
   wxInitializeStockObjects();
 
 #if USE_WX_RESOURCES
@@ -376,6 +386,7 @@ void wxApp::CommonCleanUp()
 
 //  wxDefaultResourceTable->ClearTable();
 #endif
+
   // Indicate that the cursor can be freed,
   // so that cursor won't be deleted by deleting
   // the bitmap list before g_globalCursor goes out
@@ -386,17 +397,7 @@ void wxApp::CommonCleanUp()
   wxDeleteStockObjects() ;
 
   // Destroy all GDI lists, etc.
-  delete wxTheBrushList;
-  wxTheBrushList = NULL;
-
-  delete wxThePenList;
-  wxThePenList = NULL;
-
-  delete wxTheFontList;
-  wxTheFontList = NULL;
-
-  delete wxTheBitmapList;
-  wxTheBitmapList = NULL;
+  wxDeleteStockLists();
 
   delete wxTheColourDatabase;
   wxTheColourDatabase = NULL;
@@ -422,6 +423,15 @@ int wxEntry(WXHINSTANCE hInstance, WXHINSTANCE WXUNUSED(hPrevInstance), char *m_
 {
   wxhInstance = (HINSTANCE) hInstance;
 
+/* Doesn't work when using the makefiles, for some reason.
+  #if defined(__WXDEBUG__) && defined(_MSC_VER)
+    // do check for memory leaks on program exit
+    // (another useful flag is _CRTDBG_DELAY_FREE_MEM_DF which doesn't free
+    //  deallocated memory which may be used to simulate low-memory condition)
+    _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
+  #endif // debug build under MS VC++
+*/
+
 #if (WXDEBUG && USE_MEMORY_TRACING) || USE_DEBUG_CONTEXT
 
 #if !defined(_WINDLL)
@@ -432,7 +442,7 @@ int wxEntry(WXHINSTANCE hInstance, WXHINSTANCE WXUNUSED(hPrevInstance), char *m_
   ostream* oStr = new ostream(sBuf) ;
   wxDebugContext::SetStream(oStr, sBuf);
 
-#endif
+#endif  // USE_MEMORY_TRACING
 
   if (!wxApp::Initialize((WXHINSTANCE) wxhInstance))
     return 0;
@@ -458,10 +468,10 @@ int wxEntry(WXHINSTANCE hInstance, WXHINSTANCE WXUNUSED(hPrevInstance), char *m_
 
   // Split command line into tokens, as in usual main(argc, argv)
   char **command = new char*[50];
-  
+
   int count = 0;
   char *buf = new char[strlen(m_lpCmdLine) + 1];
-  
+
   // Hangs around until end of app. in case
   // user carries pointers to the tokens
 
@@ -563,7 +573,7 @@ int wxEntry(WXHINSTANCE hInstance, WXHINSTANCE WXUNUSED(hPrevInstance), char *m_
                wxTheApp->SetTopWindow(NULL);
        }
   }
-  
+
   wxTheApp->OnExit();
   wxApp::CleanUp();
 
@@ -681,7 +691,7 @@ bool wxApp::DoMessage()
   {
     return FALSE;
   }
-    
+
   // Process the message
   if (!ProcessMessage((WXMSG *)&s_currentMsg))
   {
@@ -856,7 +866,7 @@ void wxApp::DeletePendingObjects()
   while (node)
   {
     wxObject *obj = (wxObject *)node->Data();
-    
+
     delete obj;
 
     if (wxPendingDelete.Member(obj))
@@ -942,13 +952,13 @@ int wxApp::GetComCtl32Version() const
     // have we loaded COMCTL32 yet?
     HMODULE theModule = ::GetModuleHandle("COMCTL32");
     int version = 0;
-       
+
     // if so, then we can check for the version
     if (theModule)
     {
         // InitCommonControlsEx is unique to 4.7 and later
         FARPROC theProc = ::GetProcAddress(theModule, "InitCommonControlsEx");
-               
+
         if (! theProc)
         {                    // not found, must be 4.00
                        version = 400;