#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;
extern void wxSetKeyboardHook(bool doIt);
extern wxCursor *g_globalCursor;
-HANDLE wxhInstance = 0;
+HINSTANCE wxhInstance = 0;
static MSG s_currentMsg;
wxApp *wxTheApp = NULL;
static HINSTANCE gs_hRichEdit = NULL;
#endif
-bool wxApp::Initialize(WXHANDLE instance)
+bool wxApp::Initialize(WXHINSTANCE instance)
{
- HANDLE hInstance = (HANDLE)instance;
+ HINSTANCE hInstance = (HINSTANCE) instance;
CommonInit();
wndclass2.hIcon = NULL;
wndclass2.hCursor = NULL;
// wndclass2.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1) ;
- wndclass2.hbrBackground = GetStockObject( LTGRAY_BRUSH );
+ wndclass2.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH );
wndclass2.lpszMenuName = NULL;
wndclass2.lpszClassName = wxPanelClassName;
if (!RegisterClass( &wndclass2 ))
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
if (wxWinHandleList)
delete wxWinHandleList ;
-
+
// do it as the very last thing because everything else can log messages
+ wxLog::DontCreateOnDemand();
delete wxLog::SetActiveTarget(NULL);
}
void wxApp::CommonInit()
{
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
wxBuffer = new char[1500];
#else
wxBuffer = new char[BUFSIZ + 512];
wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
wxTheColourDatabase->Initialize();
+
+ wxInitializeStockLists();
wxInitializeStockObjects();
#if USE_WX_RESOURCES
// 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
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;
{
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)
ostream* oStr = new ostream(sBuf) ;
wxDebugContext::SetStream(oStr, sBuf);
-#endif
+#endif // USE_MEMORY_TRACING
if (!wxApp::Initialize((WXHINSTANCE) wxhInstance))
return 0;
// 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
wxTheApp->SetTopWindow(NULL);
}
}
-
+
wxTheApp->OnExit();
wxApp::CleanUp();
m_appName = "";
argc = 0;
argv = NULL;
-#ifdef __WINDOWS__
+#ifdef __WXMSW__
m_printMode = wxPRINT_WINDOWS;
#else
m_printMode = wxPRINT_POSTSCRIPT;
{
return FALSE;
}
-
+
// Process the message
if (!ProcessMessage((WXMSG *)&s_currentMsg))
{
HWND hWnd;
- // Anyone for a message? Try youngest descendants first.
+ // Try translations first; find the youngest window with
+ // a translation table.
for (hWnd = msg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))
{
wxWindow *wnd = wxFindWinFromHandle((WXHWND) hWnd);
if (wnd)
{
- if (wnd->MSWProcessMessage(Msg))
+ if (wnd->MSWTranslateMessage(Msg))
return TRUE;
-
- // STOP if we've reached the top of the hierarchy!
-// if (m_topWindow && (wnd == m_topWindow))
-// return FALSE;
}
}
- // TODO: Is this now obsolete, given that m_topWindow may not be defined?
- // Does it do anything useful anyway?
-// if (m_topWindow && m_topWindow->MSWProcessMessage(Msg))
-// return TRUE;
- return FALSE;
+ // Anyone for a non-translation message? Try youngest descendants first.
+ for (hWnd = msg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))
+ {
+ wxWindow *wnd = wxFindWinFromHandle((WXHWND) hWnd);
+ if (wnd)
+ {
+ if (wnd->MSWProcessMessage(Msg))
+ return TRUE;
+ }
+ }
+ return FALSE;
}
void wxApp::OnIdle(wxIdleEvent& event)
while (node)
{
wxObject *obj = (wxObject *)node->Data();
-
+
delete obj;
if (wxPendingDelete.Member(obj))
// 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;