X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/546db2a8f8e9975eba9e54d7f4b7f3546a4a515d..25a2a4b05ee3b0f457ac89db2c93c0b11af5955a:/src/msw/app.cpp?ds=sidebyside diff --git a/src/msw/app.cpp b/src/msw/app.cpp index dc629191c1..2982fd9716 100644 --- a/src/msw/app.cpp +++ b/src/msw/app.cpp @@ -19,6 +19,7 @@ #ifdef __GNUG__ #pragma implementation "app.h" + #pragma implementation "appbase.h" #endif // For compilers that support precompilation, includes "wx.h". @@ -43,12 +44,15 @@ #include "wx/msgdlg.h" #include "wx/intl.h" #include "wx/dynarray.h" +# include "wx/wxchar.h" +# include "wx/icon.h" #endif -#include "wx/msw/private.h" #include "wx/log.h" #include "wx/module.h" +#include "wx/msw/private.h" + #if wxUSE_THREADS #include "wx/thread.h" @@ -88,8 +92,8 @@ // global variables // --------------------------------------------------------------------------- -extern char *wxBuffer; -extern char *wxOsVersion; +extern wxChar *wxBuffer; +extern wxChar *wxOsVersion; extern wxList *wxWinHandleList; extern wxList WXDLLEXPORT wxPendingDelete; #if wxUSE_THREADS @@ -104,11 +108,11 @@ MSG s_currentMsg; wxApp *wxTheApp = NULL; // FIXME why not const? and not static? -char wxFrameClassName[] = "wxFrameClass"; -char wxMDIFrameClassName[] = "wxMDIFrameClass"; -char wxMDIChildFrameClassName[] = "wxMDIChildFrameClass"; -char wxPanelClassName[] = "wxPanelClass"; -char wxCanvasClassName[] = "wxCanvasClass"; +wxChar wxFrameClassName[] = _T("wxFrameClass"); +wxChar wxMDIFrameClassName[] = _T("wxMDIFrameClass"); +wxChar wxMDIChildFrameClassName[] = _T("wxMDIChildFrameClass"); +wxChar wxPanelClassName[] = _T("wxPanelClass"); +wxChar wxCanvasClassName[] = _T("wxCanvasClass"); HICON wxSTD_FRAME_ICON = (HICON) NULL; HICON wxSTD_MDICHILDFRAME_ICON = (HICON) NULL; @@ -159,12 +163,12 @@ bool wxApp::Initialize() // wxRedirectIOToConsole(); #endif - wxBuffer = new char[1500]; // FIXME + wxBuffer = new wxChar[1500]; // FIXME wxClassInfo::InitializeClasses(); #if wxUSE_RESOURCES - wxGetResource("wxWindows", "OsVersion", &wxOsVersion); + wxGetResource(_T("wxWindows"), _T("OsVersion"), &wxOsVersion); #endif // I'm annoyed ... I don't know where to put this and I don't want to @@ -190,7 +194,7 @@ bool wxApp::Initialize() InitCommonControls(); #if wxUSE_RICHEDIT - gs_hRichEdit = LoadLibrary("RICHED32.DLL"); + gs_hRichEdit = LoadLibrary(_T("RICHED32.DLL")); if (gs_hRichEdit == (HINSTANCE) NULL) { @@ -212,20 +216,20 @@ bool wxApp::Initialize() #if wxUSE_CTL3D if (!Ctl3dRegister(wxhInstance)) - wxLogError("Cannot register CTL3D"); + wxLogError(_T("Cannot register CTL3D")); Ctl3dAutoSubclass(wxhInstance); #endif g_globalCursor = new wxCursor; - wxSTD_FRAME_ICON = LoadIcon(wxhInstance, "wxSTD_FRAME"); - wxSTD_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, "wxSTD_MDIPARENTFRAME"); - wxSTD_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, "wxSTD_MDICHILDFRAME"); + wxSTD_FRAME_ICON = LoadIcon(wxhInstance, _T("wxSTD_FRAME")); + wxSTD_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, _T("wxSTD_MDIPARENTFRAME")); + wxSTD_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, _T("wxSTD_MDICHILDFRAME")); - wxDEFAULT_FRAME_ICON = LoadIcon(wxhInstance, "wxDEFAULT_FRAME"); - wxDEFAULT_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, "wxDEFAULT_MDIPARENTFRAME"); - wxDEFAULT_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, "wxDEFAULT_MDICHILDFRAME"); + wxDEFAULT_FRAME_ICON = LoadIcon(wxhInstance, _T("wxDEFAULT_FRAME")); + wxDEFAULT_MDIPARENTFRAME_ICON = LoadIcon(wxhInstance, _T("wxDEFAULT_MDIPARENTFRAME")); + wxDEFAULT_MDICHILDFRAME_ICON = LoadIcon(wxhInstance, _T("wxDEFAULT_MDICHILDFRAME")); RegisterWindowClasses(); @@ -233,9 +237,13 @@ bool wxApp::Initialize() LOGBRUSH lb; lb.lbStyle = BS_PATTERN; - lb.lbHatch = (int)LoadBitmap( wxhInstance, "wxDISABLE_BUTTON_BITMAP" ); - wxDisableButtonBrush = ::CreateBrushIndirect( & lb ); - ::DeleteObject( (HGDIOBJ)lb.lbHatch ); + lb.lbHatch = (int)LoadBitmap( wxhInstance, _T("wxDISABLE_BUTTON_BITMAP") ); + if ( lb.lbHatch ) + { + wxDisableButtonBrush = ::CreateBrushIndirect( & lb ); + ::DeleteObject( (HGDIOBJ)lb.lbHatch ); + } + //else: wxWindows resources are probably not linked in #if wxUSE_PENWINDOWS wxRegisterPenWin(); @@ -349,13 +357,13 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine) int count = 0; // Get application name - char name[260]; // 260 is MAX_PATH value from windef.h + wxChar name[260]; // 260 is MAX_PATH value from windef.h ::GetModuleFileName(wxhInstance, name, WXSIZEOF(name)); args.Add(name); count++; - strcpy(name, wxFileNameFromPath(name)); + wxStrcpy(name, wxFileNameFromPath(name)); wxStripExtension(name); wxTheApp->SetAppName(name); @@ -366,16 +374,16 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine) while (i < len) { // Skip whitespace - while ((i < len) && isspace(cmdLine.GetChar(i))) + while ((i < len) && wxIsspace(cmdLine.GetChar(i))) i ++; if (i < len) { - if (cmdLine.GetChar(i) == '"') // We found the start of a string + if (cmdLine.GetChar(i) == _T('"')) // We found the start of a string { i ++; int first = i; - while ((i < len) && (cmdLine.GetChar(i) != '"')) + while ((i < len) && (cmdLine.GetChar(i) != _T('"'))) i ++; wxString arg(cmdLine.Mid(first, (i - first))); @@ -389,7 +397,7 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine) else // Unquoted argument { int first = i; - while ((i < len) && !isspace(cmdLine.GetChar(i))) + while ((i < len) && !wxIsspace(cmdLine.GetChar(i))) i ++; wxString arg(cmdLine.Mid(first, (i - first))); @@ -400,11 +408,11 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine) } } - wxTheApp->argv = new char*[count + 1]; + wxTheApp->argv = new wxChar*[count + 1]; for (i = 0; i < count; i++) { wxString arg(args[i]); - wxTheApp->argv[i] = copystring((const char*)arg); + wxTheApp->argv[i] = copystring((const wxChar*)arg); } wxTheApp->argv[count] = NULL; // argv[] is a NULL-terminated list wxTheApp->argc = count; @@ -524,7 +532,7 @@ void wxApp::CleanUp() // wxDebugContext, too. if (wxDebugContext::CountObjectsLeft(TRUE) > 0) { - wxLogDebug("There were memory leaks."); + wxLogDebug(_T("There were memory leaks.")); wxDebugContext::Dump(); wxDebugContext::PrintStatistics(); } @@ -581,12 +589,12 @@ int wxEntry(WXHINSTANCE hInstance, // the IMPLEMENT_APP macro is used instead, which sets an initializer // function for delayed, dynamic app object construction. wxCHECK_MSG( wxApp::GetInitializerFunction(), 0, - "No initializer - use IMPLEMENT_APP macro." ); + _T("No initializer - use IMPLEMENT_APP macro.") ); wxTheApp = (*wxApp::GetInitializerFunction()) (); } - wxCHECK_MSG( wxTheApp, 0, "You have to define an instance of wxApp!" ); + wxCHECK_MSG( wxTheApp, 0, _T("You have to define an instance of wxApp!") ); // save the WinMain() parameters wxTheApp->ConvertToStandardCommandArgs(lpCmdLine); @@ -701,7 +709,7 @@ int wxEntry(WXHINSTANCE hInstance) //// Static member initialization -wxAppInitializerFunction wxApp::m_appInitFn = (wxAppInitializerFunction) NULL; +wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL; wxApp::wxApp() { @@ -764,7 +772,7 @@ bool wxApp::DoMessage() { #if wxUSE_THREADS wxASSERT_MSG( wxThread::IsMain(), - "only the main thread can process Windows messages" ); + _T("only the main thread can process Windows messages") ); static bool s_hadGuiLock = TRUE; static wxMsgArray s_aSavedMessages; @@ -917,6 +925,15 @@ bool wxApp::ProcessMessage(WXMSG *wxmsg) HWND hWnd = msg->hwnd; wxWindow *wndThis = wxFindWinFromHandle((WXHWND)hWnd), *wnd; + // for some composite controls (like a combobox), wndThis might be NULL + // because the subcontrol is not a wxWindow, but only the control itself + // is - try to catch this case + while ( hWnd && !wndThis ) + { + hWnd = ::GetParent(hWnd); + wndThis = wxFindWinFromHandle((WXHWND)hWnd); + } + // Try translations first; find the youngest window with // a translation table. for ( wnd = wndThis; wnd; wnd = wnd->GetParent() ) @@ -1046,25 +1063,10 @@ void wxApp::OnQueryEndSession(wxCloseEvent& event) } } -wxLog* wxApp::CreateLogTarget() -{ - return new wxLogGui; -} - -wxWindow* wxApp::GetTopWindow() const -{ - if (m_topWindow) - return m_topWindow; - else if (wxTopLevelWindows.GetCount() > 0) - return wxTopLevelWindows.GetFirst()->GetData(); - else - return NULL; -} - int wxApp::GetComCtl32Version() const { // have we loaded COMCTL32 yet? - HMODULE theModule = ::GetModuleHandle("COMCTL32"); + HMODULE theModule = ::GetModuleHandle(_T("COMCTL32")); int version = 0; // if so, then we can check for the version @@ -1117,7 +1119,11 @@ bool wxYield() MSG msg; // We want to go back to the main message loop // if we see a WM_QUIT. (?) +#ifdef __WXWINE__ + while (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_NOREMOVE) && msg.message != WM_QUIT) +#else while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) && msg.message != WM_QUIT) +#endif { if ( !wxTheApp->DoMessage() ) break; @@ -1130,6 +1136,30 @@ bool wxYield() return TRUE; } +wxIcon +wxApp::GetStdIcon(int which) const +{ + switch(which) + { + case wxICON_INFORMATION: + return wxIcon("wxICON_INFO"); + + case wxICON_QUESTION: + return wxIcon("wxICON_QUESTION"); + + case wxICON_EXCLAMATION: + return wxIcon("wxICON_WARNING"); + + default: + wxFAIL_MSG(_T("requested non existent standard icon")); + // still fall through + + case wxICON_HAND: + return wxIcon("wxICON_ERROR"); + } +} + + HINSTANCE wxGetInstance() { return wxhInstance;