X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b82827dd43caa489eade15cc02edef7fb79e8c20..eeccd5d94ce6b11f36af95db4ac528a2e2e0c4c5:/src/msw/app.cpp diff --git a/src/msw/app.cpp b/src/msw/app.cpp index de414f743c..de98ccfba2 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -34,6 +34,7 @@ #include "wx/dialog.h" #include "wx/msgdlg.h" #include "wx/intl.h" + #include "wx/dynarray.h" #endif #include "wx/msw/private.h" @@ -59,15 +60,16 @@ // if you don't do the same for the Ole calls further down. // Also, OLE is used not just for drag and drop (it's used by automatn.cpp). // #if wxUSE_DRAG_AND_DROP -#if !defined(__GNUWIN32__) && !defined(__SC__) +#if !defined(__GNUWIN32__) && !defined(__SC__) && !defined(__SALFORDC__) #include #endif + // #endif #include #include -#if defined(__WIN95__) && !defined(__GNUWIN32__) +#if (defined(__WIN95__) && !defined(__GNUWIN32__)) || defined(__TWIN32__) #include #endif @@ -115,15 +117,15 @@ char wxMDIChildFrameClassName[] = "wxMDIChildFrameClass"; char wxPanelClassName[] = "wxPanelClass"; char wxCanvasClassName[] = "wxCanvasClass"; -HICON wxSTD_FRAME_ICON = NULL; -HICON wxSTD_MDICHILDFRAME_ICON = NULL; -HICON wxSTD_MDIPARENTFRAME_ICON = NULL; +HICON wxSTD_FRAME_ICON = (HICON) NULL; +HICON wxSTD_MDICHILDFRAME_ICON = (HICON) NULL; +HICON wxSTD_MDIPARENTFRAME_ICON = (HICON) NULL; -HICON wxDEFAULT_FRAME_ICON = NULL; -HICON wxDEFAULT_MDICHILDFRAME_ICON = NULL; -HICON wxDEFAULT_MDIPARENTFRAME_ICON = NULL; +HICON wxDEFAULT_FRAME_ICON = (HICON) NULL; +HICON wxDEFAULT_MDICHILDFRAME_ICON = (HICON) NULL; +HICON wxDEFAULT_MDIPARENTFRAME_ICON = (HICON) NULL; -HBRUSH wxDisableButtonBrush = 0; +HBRUSH wxDisableButtonBrush = (HBRUSH) 0; LRESULT APIENTRY wxWndProc(HWND, UINT, WPARAM, LPARAM); @@ -139,8 +141,14 @@ LRESULT APIENTRY wxWndProc(HWND, UINT, WPARAM, LPARAM); long wxApp::sm_lastMessageTime = 0; -#ifdef __WIN95__ - static HINSTANCE gs_hRichEdit = NULL; +#if defined(__WIN95__) && !defined(__TWIN32__) +#define wxUSE_RICHEDIT 1 +#else +#define wxUSE_RICHEDIT 0 +#endif + +#if wxUSE_RICHEDIT + static HINSTANCE gs_hRichEdit = (HINSTANCE) NULL; #endif //// Initialize @@ -182,23 +190,27 @@ bool wxApp::Initialize() #if defined(__WIN95__) InitCommonControls(); + +#if wxUSE_RICHEDIT gs_hRichEdit = LoadLibrary("RICHED32.DLL"); - if (gs_hRichEdit == NULL) + if (gs_hRichEdit == (HINSTANCE) NULL) { wxMessageBox("Could not initialise Rich Edit DLL"); } +#endif + #endif int iMsg = 96; - + // for OLE, enlarge message queue to be as large as possible while (!SetMessageQueue(iMsg) && (iMsg -= 8)); /* DWORD dwOleVer; dwOleVer = CoBuildVersion(); - + // check the OLE library version if (rmm != HIWORD(dwOleVer)) { @@ -207,7 +219,7 @@ bool wxApp::Initialize() } */ -#if !defined(__GNUWIN32__) && !defined(__SC__) +#if !defined(__GNUWIN32__) && !defined(__SC__) && !defined(__SALFORDC__) // we need to initialize OLE library if ( FAILED(::OleInitialize(NULL)) ) wxFatalError(_("Cannot initialize OLE")); @@ -248,6 +260,7 @@ bool wxApp::Initialize() // This is to foil optimizations in Visual C++ that // throw out dummy.obj. + // PLEASE DO NOT ALTER THIS. #if defined(_MSC_VER) && !defined(WXMAKINGDLL) extern char wxDummyChar; if (wxDummyChar) wxDummyChar++; @@ -274,8 +287,8 @@ bool wxApp::RegisterWindowClasses() wndclass.cbClsExtra = 0; wndclass.cbWndExtra = sizeof( DWORD ); // was 4 wndclass.hInstance = wxhInstance; - wndclass.hIcon = NULL; // wxSTD_FRAME_ICON; - wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ); + wndclass.hIcon = (HICON) NULL; // wxSTD_FRAME_ICON; + wndclass.hCursor = LoadCursor( (HINSTANCE) NULL, IDC_ARROW ); wndclass.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1) ; // wndclass.hbrBackground = GetStockObject( WHITE_BRUSH ); wndclass.lpszMenuName = NULL; @@ -298,10 +311,10 @@ bool wxApp::RegisterWindowClasses() wndclass1.cbClsExtra = 0; wndclass1.cbWndExtra = sizeof( DWORD ); // was 4 wndclass1.hInstance = wxhInstance; - wndclass1.hIcon = NULL; // wxSTD_MDIPARENTFRAME_ICON; - wndclass1.hCursor = LoadCursor( NULL, IDC_ARROW ); + wndclass1.hIcon = (HICON) NULL; // wxSTD_MDIPARENTFRAME_ICON; + wndclass1.hCursor = LoadCursor( (HINSTANCE) NULL, IDC_ARROW ); // wndclass1.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1) ; - wndclass1.hbrBackground = NULL; + wndclass1.hbrBackground = (HBRUSH) NULL; wndclass1.lpszMenuName = NULL; wndclass1.lpszClassName = wxMDIFrameClassName; @@ -320,8 +333,8 @@ bool wxApp::RegisterWindowClasses() wndclass4.cbClsExtra = 0; wndclass4.cbWndExtra = sizeof( DWORD ); // was 4 wndclass4.hInstance = wxhInstance; - wndclass4.hIcon = NULL; // wxSTD_MDICHILDFRAME_ICON; - wndclass4.hCursor = LoadCursor( NULL, IDC_ARROW ); + wndclass4.hIcon = (HICON) NULL; // wxSTD_MDICHILDFRAME_ICON; + wndclass4.hCursor = LoadCursor( (HINSTANCE) NULL, IDC_ARROW ); // TODO: perhaps this should be NULL so that Windows doesn't // paint the background itself (would OnEraseBackground duplicate // this?) @@ -347,8 +360,8 @@ bool wxApp::RegisterWindowClasses() wndclass2.cbClsExtra = 0; wndclass2.cbWndExtra = sizeof( DWORD ); // was 4 wndclass2.hInstance = wxhInstance; - wndclass2.hIcon = NULL; - wndclass2.hCursor = NULL; + wndclass2.hIcon = (HICON) NULL; + wndclass2.hCursor = (HCURSOR) NULL; // wndclass2.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1) ; wndclass2.hbrBackground = (HBRUSH) GetStockObject( LTGRAY_BRUSH ); wndclass2.lpszMenuName = NULL; @@ -372,10 +385,10 @@ bool wxApp::RegisterWindowClasses() wndclass3.cbClsExtra = 0; wndclass3.cbWndExtra = sizeof( DWORD ); // was 4 wndclass3.hInstance = wxhInstance; - wndclass3.hIcon = NULL; - wndclass3.hCursor = NULL; + wndclass3.hIcon = (HICON) NULL; + wndclass3.hCursor = (HCURSOR) NULL; // wndclass3.hbrBackground = (HBRUSH)(COLOR_WINDOW+1) ; - wndclass3.hbrBackground = NULL; + wndclass3.hbrBackground = (HBRUSH) NULL; wndclass3.lpszMenuName = NULL; wndclass3.lpszClassName = wxCanvasClassName; if (!RegisterClass( &wndclass3)) @@ -499,10 +512,14 @@ void wxApp::CleanUp() wxSetKeyboardHook(FALSE); #ifdef __WIN95__ - if (gs_hRichEdit != NULL) + +#if wxUSE_RICHEDIT + if (gs_hRichEdit != (HINSTANCE) NULL) FreeLibrary(gs_hRichEdit); #endif +#endif + #if wxUSE_PENWINDOWS wxCleanUpPenWin(); #endif @@ -524,7 +541,7 @@ void wxApp::CleanUp() if ( wxDisableButtonBrush ) ::DeleteObject( wxDisableButtonBrush ) ; -#if !defined(__GNUWIN32__) && !defined(__SC__) +#if !defined(__GNUWIN32__) && !defined(__SC__) && !defined(__SALFORDC__) ::OleUninitialize(); #endif @@ -774,7 +791,7 @@ bool wxApp::DoMessage() { // got WM_QUIT m_keepGoing = FALSE; - + return FALSE; } else if ( rc == -1 ) @@ -798,7 +815,13 @@ bool wxApp::DoMessage() { s_hadGuiLock = FALSE; - s_aSavedMessages.Add(s_currentMsg); + // leave out WM_COMMAND messages: too dangerous, sometimes + // the message will be processed twice + if ( !wxIsWaitingForThread() || + s_currentMsg.message != WM_COMMAND ) + { + s_aSavedMessages.Add(s_currentMsg); + } return TRUE; } @@ -915,7 +938,7 @@ bool wxApp::ProcessMessage(WXMSG *Msg) // Try translations first; find the youngest window with // a translation table. - for (hWnd = msg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd)) + for (hWnd = msg->hwnd; hWnd != (HWND) NULL; hWnd = ::GetParent(hWnd)) { wxWindow *wnd = wxFindWinFromHandle((WXHWND) hWnd); if (wnd) @@ -926,7 +949,7 @@ bool wxApp::ProcessMessage(WXMSG *Msg) } // Anyone for a non-translation message? Try youngest descendants first. - for (hWnd = msg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd)) + for (hWnd = msg->hwnd; hWnd != (HWND) NULL; hWnd = ::GetParent(hWnd)) { wxWindow *wnd = wxFindWinFromHandle((WXHWND) hWnd); if (wnd) @@ -1026,7 +1049,7 @@ void wxApp::DeletePendingObjects() } } -void wxApp::OnEndSession(wxCloseEvent& event) +void wxApp::OnEndSession(wxCloseEvent& WXUNUSED(event)) { if (GetTopWindow()) GetTopWindow()->Close(TRUE); @@ -1129,6 +1152,6 @@ HINSTANCE wxGetInstance() // For some reason, with MSVC++ 1.5, WinMain isn't linked in properly // if in a separate file. So include it here to ensure it's linked. -#if (defined(_MSC_VER) && !defined(__WIN32__)) || defined(__GNUWIN32__) +#if (defined(_MSC_VER) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !defined(__TWIN32__)) #include "main.cpp" #endif