X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/59d43911b4041a2da255829570aa415e2893f613..739c5499fcab1c165b8dd0591c9fd9e2329b3cf9:/src/msw/utilsgui.cpp diff --git a/src/msw/utilsgui.cpp b/src/msw/utilsgui.cpp index 68ca45db20..c4f2a2a112 100644 --- a/src/msw/utilsgui.cpp +++ b/src/msw/utilsgui.cpp @@ -1,12 +1,12 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: msw/utilsgui.cpp -// Purpose: Various utility functions only available in GUI +// Name: src/msw/utilsgui.cpp +// Purpose: Various utility functions only available in wxMSW GUI // Author: Vadim Zeitlin // Modified by: // Created: 21.06.2003 (extracted from msw/utils.cpp) // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -33,14 +33,17 @@ #include "wx/dynlib.h" #include "wx/msw/private.h" // includes -#include "wx/msw/registry.h" -#include // needed for SHELLEXECUTEINFO - // ============================================================================ // implementation // ============================================================================ +// Emit a beeeeeep +void wxBell() +{ + ::MessageBeep((UINT)-1); // default sound +} + // --------------------------------------------------------------------------- // helper functions for showing a "busy" cursor // --------------------------------------------------------------------------- @@ -104,48 +107,6 @@ bool wxCheckForInterrupt(wxWindow *wnd) return true; } -// MSW only: get user-defined resource from the .res file. -// Returns NULL or newly-allocated memory, so use delete[] to clean up. - -#ifndef __WXMICROWIN__ -char *wxLoadUserResource(const wxString& resourceName, const wxString& resourceType, int* pLen /* = NULL */) -{ - HRSRC hResource = ::FindResource(wxGetInstance(), - resourceName.wx_str(), - resourceType.wx_str()); - if ( hResource == 0 ) - return NULL; - - HGLOBAL hData = ::LoadResource(wxGetInstance(), hResource); - if ( hData == 0 ) - return NULL; - - void *theText = ::LockResource(hData); - if ( !theText ) - return NULL; - - // Not all compilers put a zero at the end of the resource (e.g. BC++ doesn't). - // so we need to find the length of the resource. - int len = ::SizeofResource(wxGetInstance(), hResource); - char *s = new char[len + 1]; - memcpy(s, theText, len); - s[len] = '\0'; // NUL-terminate in case the resource itself wasn't - - // Obsolete in WIN32 -#ifndef __WIN32__ - UnlockResource(hData); -#endif - - // No need?? - // GlobalFree(hData); - - if (pLen) - *pLen = len; - - return s; -} -#endif // __WXMICROWIN__ - // ---------------------------------------------------------------------------- // get display info // ---------------------------------------------------------------------------- @@ -155,7 +116,7 @@ char *wxLoadUserResource(const wxString& resourceName, const wxString& resourceT void wxGetMousePosition( int* x, int* y ) { POINT pt; - GetCursorPos( & pt ); + wxGetCursorPosMSW( & pt ); if ( x ) *x = pt.x; if ( y ) *y = pt.y; } @@ -233,24 +194,6 @@ void wxDisplaySizeMM(int *width, int *height) #endif } -void wxClientDisplayRect(int *x, int *y, int *width, int *height) -{ -#if defined(__WXMICROWIN__) - *x = 0; *y = 0; - wxDisplaySize(width, height); -#else - // Determine the desktop dimensions minus the taskbar and any other - // special decorations... - RECT r; - - SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0); - if (x) *x = r.left; - if (y) *y = r.top; - if (width) *width = r.right - r.left; - if (height) *height = r.bottom - r.top; -#endif -} - // --------------------------------------------------------------------------- // window information functions // --------------------------------------------------------------------------- @@ -405,118 +348,3 @@ extern bool wxEnableFileNameAutoComplete(HWND hwnd) return false; #endif // wxUSE_DYNLIB_CLASS/!wxUSE_DYNLIB_CLASS } - -// ---------------------------------------------------------------------------- -// Launch document with default app -// ---------------------------------------------------------------------------- - -bool wxLaunchDefaultApplication(const wxString& document, int flags) -{ - wxUnusedVar(flags); - - WinStruct sei; - sei.lpFile = document.wx_str(); - sei.lpVerb = wxT("open"); -#ifdef __WXWINCE__ - sei.nShow = SW_SHOWNORMAL; // SW_SHOWDEFAULT not defined under CE (#10216) -#else - sei.nShow = SW_SHOWDEFAULT; -#endif - - // avoid Windows message box in case of error for consistency with - // wxLaunchDefaultBrowser() even if don't show the error ourselves in this - // function - sei.fMask = SEE_MASK_FLAG_NO_UI; - - if ( ::ShellExecuteEx(&sei) ) - return true; - - return false; -} - -// ---------------------------------------------------------------------------- -// Launch default browser -// ---------------------------------------------------------------------------- - -bool wxDoLaunchDefaultBrowser(const wxString& url, const wxString& scheme, int flags) -{ - wxUnusedVar(flags); - -#if wxUSE_IPC - if ( flags & wxBROWSER_NEW_WINDOW ) - { - // ShellExecuteEx() opens the URL in an existing window by default so - // we can't use it if we need a new window - wxRegKey key(wxRegKey::HKCR, scheme + wxT("\\shell\\open")); - if ( !key.Exists() ) - { - // try the default browser, it must be registered at least for http URLs - key.SetName(wxRegKey::HKCR, wxT("http\\shell\\open")); - } - - if ( key.Exists() ) - { - wxRegKey keyDDE(key, wxT("DDEExec")); - if ( keyDDE.Exists() ) - { - // we only know the syntax of WWW_OpenURL DDE request for IE, - // optimistically assume that all other browsers are compatible - // with it - static const wxChar *TOPIC_OPEN_URL = wxT("WWW_OpenURL"); - wxString ddeCmd; - wxRegKey keyTopic(keyDDE, wxT("topic")); - bool ok = keyTopic.Exists() && - keyTopic.QueryDefaultValue() == TOPIC_OPEN_URL; - if ( ok ) - { - ddeCmd = keyDDE.QueryDefaultValue(); - ok = !ddeCmd.empty(); - } - - if ( ok ) - { - // for WWW_OpenURL, the index of the window to open the URL - // in is -1 (meaning "current") by default, replace it with - // 0 which means "new" (see KB article 160957) - ok = ddeCmd.Replace(wxT("-1"), wxT("0"), - false /* only first occurrence */) == 1; - } - - if ( ok ) - { - // and also replace the parameters: the topic should - // contain a placeholder for the URL - ok = ddeCmd.Replace(wxT("%1"), url, false) == 1; - } - - if ( ok ) - { - // try to send it the DDE request now but ignore the errors - wxLogNull noLog; - - const wxString ddeServer = wxRegKey(keyDDE, wxT("application")); - if ( wxExecuteDDE(ddeServer, TOPIC_OPEN_URL, ddeCmd) ) - return true; - - // this is not necessarily an error: maybe browser is - // simply not running, but no matter, in any case we're - // going to launch it using ShellExecuteEx() below now and - // we shouldn't try to open a new window if we open a new - // browser anyhow - } - } - } - } -#endif // wxUSE_IPC - - WinStruct sei; - sei.lpFile = url.c_str(); - sei.lpVerb = wxT("open"); - sei.nShow = SW_SHOWNORMAL; - sei.fMask = SEE_MASK_FLAG_NO_UI; // we give error message ourselves - - if ( ::ShellExecuteEx(&sei) ) - return true; - - return false; -}