mirror of
https://github.com/cookiengineer/audacity
synced 2025-07-14 15:48:21 +02:00
Add full file replacements for the patched wxWidgets source files
This commit is contained in:
parent
e4bb5082bc
commit
3715b21167
@ -1,9 +1,16 @@
|
|||||||
Distributed versions of Audacity are built with accessibility
|
There's a few changes that need to be made to the wxWidgets 3.0.2 source
|
||||||
enabled. This requires a patch to wxWidgets:
|
before you build it. You can choose to apply the patches listed below.
|
||||||
|
|
||||||
|
Or you may copy the wxWidgets-3.0.2 subdirectory in this directory to
|
||||||
|
where your wxWidgets-3.0.2 source tree is located, overlaying the existing
|
||||||
|
files.
|
||||||
|
|
||||||
|
Distributed versions of Audacity are built with accessibility enabled.
|
||||||
|
This requires a patch to wxWidgets:
|
||||||
|
|
||||||
accessibility.diff
|
accessibility.diff
|
||||||
|
|
||||||
Patches that need to be applied to wxWidgets 3.0.2. These should not
|
Other patches that need to be applied to wxWidgets 3.0.2. These should not
|
||||||
be required for later versions:
|
be required for later versions:
|
||||||
|
|
||||||
changeset_0797a6f8754db982b87a1df63975ccf76df2905f.diff
|
changeset_0797a6f8754db982b87a1df63975ccf76df2905f.diff
|
||||||
|
5180
win/wxWidgets_additions/wxWidgets-3.0.2/docs/changes.txt
Normal file
5180
win/wxWidgets_additions/wxWidgets-3.0.2/docs/changes.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,94 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/msw/init.h
|
||||||
|
// Purpose: Windows-specific wxEntry() overload
|
||||||
|
// Author: Julian Smart
|
||||||
|
// Modified by:
|
||||||
|
// Created: 01/02/97
|
||||||
|
// Copyright: (c) Julian Smart
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_MSW_INIT_H_
|
||||||
|
#define _WX_MSW_INIT_H_
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Windows-specific wxEntry() overload and wxIMPLEMENT_WXWIN_MAIN definition
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// we need HINSTANCE declaration to define WinMain()
|
||||||
|
#include "wx/msw/wrapwin.h"
|
||||||
|
|
||||||
|
#ifndef SW_SHOWNORMAL
|
||||||
|
#define SW_SHOWNORMAL 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// WinMain() is always ANSI, even in Unicode build, under normal Windows
|
||||||
|
// but is always Unicode under CE
|
||||||
|
#ifdef __WXWINCE__
|
||||||
|
typedef wchar_t *wxCmdLineArgType;
|
||||||
|
#else
|
||||||
|
typedef char *wxCmdLineArgType;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Call this function to prevent wxMSW from calling SetProcessDPIAware().
|
||||||
|
// Must be called before wxEntry().
|
||||||
|
extern WXDLLIMPEXP_CORE void wxMSWDisableSettingHighDPIAware();
|
||||||
|
|
||||||
|
// Windows-only overloads of wxEntry() and wxEntryStart() which take the
|
||||||
|
// parameters passed to WinMain() instead of those passed to main()
|
||||||
|
extern WXDLLIMPEXP_CORE bool
|
||||||
|
wxEntryStart(HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance = NULL,
|
||||||
|
wxCmdLineArgType pCmdLine = NULL,
|
||||||
|
int nCmdShow = SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
extern WXDLLIMPEXP_CORE int
|
||||||
|
wxEntry(HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance = NULL,
|
||||||
|
wxCmdLineArgType pCmdLine = NULL,
|
||||||
|
int nCmdShow = SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
#if defined(__BORLANDC__) && wxUSE_UNICODE
|
||||||
|
// Borland C++ has the following nonstandard behaviour: when the -WU
|
||||||
|
// command line flag is used, the linker expects to find wWinMain instead
|
||||||
|
// of WinMain. This flag causes the compiler to define _UNICODE and
|
||||||
|
// UNICODE symbols and there's no way to detect its use, so we have to
|
||||||
|
// define both WinMain and wWinMain so that wxIMPLEMENT_WXWIN_MAIN works
|
||||||
|
// for both code compiled with and without -WU.
|
||||||
|
// See http://sourceforge.net/tracker/?func=detail&atid=309863&aid=1935997&group_id=9863
|
||||||
|
// for more details.
|
||||||
|
#define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD \
|
||||||
|
extern "C" int WINAPI wWinMain(HINSTANCE hInstance, \
|
||||||
|
HINSTANCE hPrevInstance, \
|
||||||
|
wchar_t * WXUNUSED(lpCmdLine), \
|
||||||
|
int nCmdShow) \
|
||||||
|
{ \
|
||||||
|
wxDISABLE_DEBUG_SUPPORT(); \
|
||||||
|
\
|
||||||
|
/* NB: wxEntry expects lpCmdLine argument to be char*, not */ \
|
||||||
|
/* wchar_t*, but fortunately it's not used anywhere */ \
|
||||||
|
/* and we can simply pass NULL in: */ \
|
||||||
|
return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
|
||||||
|
#endif // defined(__BORLANDC__) && wxUSE_UNICODE
|
||||||
|
|
||||||
|
#define wxIMPLEMENT_WXWIN_MAIN \
|
||||||
|
extern "C" int WINAPI WinMain(HINSTANCE hInstance, \
|
||||||
|
HINSTANCE hPrevInstance, \
|
||||||
|
wxCmdLineArgType WXUNUSED(lpCmdLine), \
|
||||||
|
int nCmdShow) \
|
||||||
|
{ \
|
||||||
|
wxDISABLE_DEBUG_SUPPORT(); \
|
||||||
|
\
|
||||||
|
/* NB: We pass NULL in place of lpCmdLine to behave the same as */ \
|
||||||
|
/* Borland-specific wWinMain() above. If it becomes needed */ \
|
||||||
|
/* to pass lpCmdLine to wxEntry() here, you'll have to fix */ \
|
||||||
|
/* wWinMain() above too. */ \
|
||||||
|
return wxEntry(hInstance, hPrevInstance, NULL, nCmdShow); \
|
||||||
|
} \
|
||||||
|
wxIMPLEMENT_WXWIN_MAIN_BORLAND_NONSTANDARD
|
||||||
|
|
||||||
|
|
||||||
|
#endif // _WX_MSW_INIT_H_
|
1665
win/wxWidgets_additions/wxWidgets-3.0.2/include/wx/msw/setup.h
Normal file
1665
win/wxWidgets_additions/wxWidgets-3.0.2/include/wx/msw/setup.h
Normal file
File diff suppressed because it is too large
Load Diff
1156
win/wxWidgets_additions/wxWidgets-3.0.2/interface/wx/app.h
Normal file
1156
win/wxWidgets_additions/wxWidgets-3.0.2/interface/wx/app.h
Normal file
File diff suppressed because it is too large
Load Diff
128
win/wxWidgets_additions/wxWidgets-3.0.2/interface/wx/init.h
Normal file
128
win/wxWidgets_additions/wxWidgets-3.0.2/interface/wx/init.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: init.h
|
||||||
|
// Purpose: interface of global functions
|
||||||
|
// Author: wxWidgets team
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@class wxInitializer
|
||||||
|
|
||||||
|
Create an object of this class on the stack to initialize/cleanup the library
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
@library{wxbase}
|
||||||
|
@category{appmanagement}
|
||||||
|
|
||||||
|
@see wxGLContext
|
||||||
|
*/
|
||||||
|
class wxInitializer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
Initializes the library.
|
||||||
|
Calls wxInitialize().
|
||||||
|
*/
|
||||||
|
wxInitializer(int argc = 0, wxChar **argv = NULL);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Has the initialization been successful? (explicit test)
|
||||||
|
*/
|
||||||
|
bool IsOk() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This dtor only does clean up if we initialized the library properly.
|
||||||
|
Calls wxUninitialize().
|
||||||
|
*/
|
||||||
|
~wxInitializer();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup group_funcmacro_appinitterm */
|
||||||
|
//@{
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function can be used to perform the initialization of wxWidgets if you
|
||||||
|
can't use the default initialization code for any reason.
|
||||||
|
|
||||||
|
If the function returns true, the initialization was successful and the
|
||||||
|
global wxApp object ::wxTheApp has been created. Moreover, wxEntryCleanup()
|
||||||
|
must be called afterwards. If the function returns false, a catastrophic
|
||||||
|
initialization error occurred and (at least the GUI part of) the library
|
||||||
|
can't be used at all.
|
||||||
|
|
||||||
|
Notice that parameters @c argc and @c argv may be modified by this
|
||||||
|
function.
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
*/
|
||||||
|
bool wxEntryStart(int& argc, wxChar** argv);
|
||||||
|
|
||||||
|
/**
|
||||||
|
See wxEntryStart(int&,wxChar**) for more info about this function.
|
||||||
|
|
||||||
|
This is an additional overload of wxEntryStart() provided under MSW only.
|
||||||
|
It is meant to be called with the parameters passed to WinMain().
|
||||||
|
|
||||||
|
@note Under Windows CE platform, and only there, the type of @a pCmdLine is
|
||||||
|
@c wchar_t *, otherwise it is @c char *, even in Unicode build.
|
||||||
|
|
||||||
|
@onlyfor{wxmsw}
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
*/
|
||||||
|
bool wxEntryStart(HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance = NULL,
|
||||||
|
char* pCmdLine = NULL,
|
||||||
|
int nCmdShow = SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Free resources allocated by a successful call to wxEntryStart().
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
*/
|
||||||
|
void wxEntryCleanup();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Initialize the library (may be called as many times as needed, but each
|
||||||
|
call to wxInitialize() must be matched by wxUninitialize()).
|
||||||
|
|
||||||
|
With this function you may avoid wxDECLARE_APP() and wxIMPLEMENT_APP() macros
|
||||||
|
and use wxInitialize() and wxUninitialize() dynamically in the
|
||||||
|
program startup and termination.
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
*/
|
||||||
|
bool wxInitialize(int argc = 0, wxChar **argv = NULL);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Clean up; the library can't be used any more after the last call to
|
||||||
|
wxUninitialize().
|
||||||
|
|
||||||
|
See wxInitialize() for more info.
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
*/
|
||||||
|
void wxUninitialize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Prevents wxWidgets from setting HighDPI awareness mode.
|
||||||
|
|
||||||
|
wxEntry calls SetDPIProcessAware() early during initialization on Windows.
|
||||||
|
To prevent this (e.g. because wx is embedded in native code and disabling
|
||||||
|
DPI awareness in the manifest is not an option), call this function
|
||||||
|
*before* wxEntry() is called.
|
||||||
|
|
||||||
|
@onlyfor{wxmsw}
|
||||||
|
|
||||||
|
@header{wx/init.h}
|
||||||
|
|
||||||
|
@since 3.0.3, but only available in 3.0.x, not 3.1+ which doesn't make
|
||||||
|
the SetDPIProcessAware() call anymore.
|
||||||
|
*/
|
||||||
|
void wxMSWDisableSettingHighDPIAware();
|
||||||
|
|
||||||
|
//@}
|
||||||
|
|
455
win/wxWidgets_additions/wxWidgets-3.0.2/src/msw/main.cpp
Normal file
455
win/wxWidgets_additions/wxWidgets-3.0.2/src/msw/main.cpp
Normal file
@ -0,0 +1,455 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: src/msw/main.cpp
|
||||||
|
// Purpose: WinMain/DllMain
|
||||||
|
// Author: Julian Smart
|
||||||
|
// Modified by:
|
||||||
|
// Created: 04/01/98
|
||||||
|
// Copyright: (c) Julian Smart
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/event.h"
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/utils.h"
|
||||||
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cmdline.h"
|
||||||
|
#include "wx/dynlib.h"
|
||||||
|
#include "wx/scopeguard.h"
|
||||||
|
|
||||||
|
#include "wx/msw/private.h"
|
||||||
|
#include "wx/msw/seh.h"
|
||||||
|
|
||||||
|
#if wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
#include "wx/datetime.h"
|
||||||
|
#include "wx/msw/crashrpt.h"
|
||||||
|
#endif // wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
|
||||||
|
#ifdef __WXWINCE__
|
||||||
|
// there is no ExitProcess() under CE but exiting the main thread has the
|
||||||
|
// same effect
|
||||||
|
#ifndef ExitProcess
|
||||||
|
#define ExitProcess ExitThread
|
||||||
|
#endif
|
||||||
|
#endif // __WXWINCE__
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
// BC++ has to be special: its run-time expects the DLL entry point to be
|
||||||
|
// named DllEntryPoint instead of the (more) standard DllMain
|
||||||
|
#define DllMain DllEntryPoint
|
||||||
|
#endif // __BORLANDC__
|
||||||
|
|
||||||
|
#if defined(__WXMICROWIN__)
|
||||||
|
#define HINSTANCE HANDLE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// defined in common/init.cpp
|
||||||
|
extern int wxEntryReal(int& argc, wxChar **argv);
|
||||||
|
extern int wxEntryCleanupReal(int& argc, wxChar **argv);
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation: various entry points
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
#if wxUSE_BASE
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wrapper wxEntry catching all Win32 exceptions occurring in a wx program
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// wrap real wxEntry in a try-except block to be able to call
|
||||||
|
// OnFatalException() if necessary
|
||||||
|
#if wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
|
||||||
|
// global pointer to exception information, only valid inside OnFatalException,
|
||||||
|
// used by wxStackWalker and wxCrashReport
|
||||||
|
extern EXCEPTION_POINTERS *wxGlobalSEInformation = NULL;
|
||||||
|
|
||||||
|
// flag telling us whether the application wants to handle exceptions at all
|
||||||
|
static bool gs_handleExceptions = false;
|
||||||
|
|
||||||
|
static void wxFatalExit()
|
||||||
|
{
|
||||||
|
// use the same exit code as abort()
|
||||||
|
::ExitProcess(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long wxGlobalSEHandler(EXCEPTION_POINTERS *pExcPtrs)
|
||||||
|
{
|
||||||
|
if ( gs_handleExceptions && wxTheApp )
|
||||||
|
{
|
||||||
|
// store the pointer to exception info
|
||||||
|
wxGlobalSEInformation = pExcPtrs;
|
||||||
|
|
||||||
|
// give the user a chance to do something special about this
|
||||||
|
wxSEH_TRY
|
||||||
|
{
|
||||||
|
wxTheApp->OnFatalException();
|
||||||
|
}
|
||||||
|
wxSEH_IGNORE // ignore any exceptions inside the exception handler
|
||||||
|
|
||||||
|
wxGlobalSEInformation = NULL;
|
||||||
|
|
||||||
|
// this will execute our handler and terminate the process
|
||||||
|
return EXCEPTION_EXECUTE_HANDLER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXCEPTION_CONTINUE_SEARCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __VISUALC__
|
||||||
|
|
||||||
|
void wxSETranslator(unsigned int WXUNUSED(code), EXCEPTION_POINTERS *ep)
|
||||||
|
{
|
||||||
|
switch ( wxGlobalSEHandler(ep) )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( wxT("unexpected wxGlobalSEHandler() return value") );
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case EXCEPTION_EXECUTE_HANDLER:
|
||||||
|
// if wxApp::OnFatalException() had been called we should exit the
|
||||||
|
// application -- but we shouldn't kill our host when we're a DLL
|
||||||
|
#ifndef WXMAKINGDLL
|
||||||
|
wxFatalExit();
|
||||||
|
#endif // not a DLL
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXCEPTION_CONTINUE_SEARCH:
|
||||||
|
// we're called for each "catch ( ... )" and if we (re)throw from
|
||||||
|
// here, the catch handler body is not executed, so the effect is
|
||||||
|
// as if had inhibited translation of SE to C++ ones because the
|
||||||
|
// handler will never see any structured exceptions
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __VISUALC__
|
||||||
|
|
||||||
|
bool wxHandleFatalExceptions(bool doit)
|
||||||
|
{
|
||||||
|
// assume this can only be called from the main thread
|
||||||
|
gs_handleExceptions = doit;
|
||||||
|
|
||||||
|
#if wxUSE_CRASHREPORT
|
||||||
|
if ( doit )
|
||||||
|
{
|
||||||
|
// try to find a place where we can put out report file later
|
||||||
|
wxChar fullname[MAX_PATH];
|
||||||
|
if ( !::GetTempPath(WXSIZEOF(fullname), fullname) )
|
||||||
|
{
|
||||||
|
wxLogLastError(wxT("GetTempPath"));
|
||||||
|
|
||||||
|
// when all else fails...
|
||||||
|
wxStrcpy(fullname, wxT("c:\\"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// use PID and date to make the report file name more unique
|
||||||
|
wxString name = wxString::Format
|
||||||
|
(
|
||||||
|
wxT("%s_%s_%lu.dmp"),
|
||||||
|
wxTheApp ? (const wxChar*)wxTheApp->GetAppDisplayName().c_str()
|
||||||
|
: wxT("wxwindows"),
|
||||||
|
wxDateTime::Now().Format(wxT("%Y%m%dT%H%M%S")).c_str(),
|
||||||
|
::GetCurrentProcessId()
|
||||||
|
);
|
||||||
|
|
||||||
|
wxStrncat(fullname, name, WXSIZEOF(fullname) - wxStrlen(fullname) - 1);
|
||||||
|
|
||||||
|
wxCrashReport::SetFileName(fullname);
|
||||||
|
}
|
||||||
|
#endif // wxUSE_CRASHREPORT
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxEntry(int& argc, wxChar **argv)
|
||||||
|
{
|
||||||
|
DisableAutomaticSETranslator();
|
||||||
|
|
||||||
|
wxSEH_TRY
|
||||||
|
{
|
||||||
|
return wxEntryReal(argc, argv);
|
||||||
|
}
|
||||||
|
wxSEH_HANDLE(-1)
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // !wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
|
||||||
|
int wxEntry(int& argc, wxChar **argv)
|
||||||
|
{
|
||||||
|
return wxEntryReal(argc, argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_ON_FATAL_EXCEPTION/!wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
|
||||||
|
#endif // wxUSE_BASE
|
||||||
|
|
||||||
|
#if wxUSE_GUI
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
#if wxUSE_UNICODE && !defined(__WXWINCE__)
|
||||||
|
#define NEED_UNICODE_CHECK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef NEED_UNICODE_CHECK
|
||||||
|
|
||||||
|
// check whether Unicode is available
|
||||||
|
bool wxIsUnicodeAvailable()
|
||||||
|
{
|
||||||
|
static const wchar_t *ERROR_STRING = L"wxWidgets Fatal Error";
|
||||||
|
|
||||||
|
if ( wxGetOsVersion() != wxOS_WINDOWS_NT )
|
||||||
|
{
|
||||||
|
// we need to be built with MSLU support
|
||||||
|
#if !wxUSE_UNICODE_MSLU
|
||||||
|
// note that we can use MessageBoxW() as it's implemented even under
|
||||||
|
// Win9x - OTOH, we can't use wxGetTranslation() because the file APIs
|
||||||
|
// used by wxLocale are not
|
||||||
|
::MessageBox
|
||||||
|
(
|
||||||
|
NULL,
|
||||||
|
L"This program uses Unicode and requires Windows NT/2000/XP.\n"
|
||||||
|
L"\n"
|
||||||
|
L"Program aborted.",
|
||||||
|
ERROR_STRING,
|
||||||
|
MB_ICONERROR | MB_OK
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
#else // wxUSE_UNICODE_MSLU
|
||||||
|
// and the MSLU DLL must also be available
|
||||||
|
HMODULE hmod = ::LoadLibraryA("unicows.dll");
|
||||||
|
if ( !hmod )
|
||||||
|
{
|
||||||
|
::MessageBox
|
||||||
|
(
|
||||||
|
NULL,
|
||||||
|
L"This program uses Unicode and requires unicows.dll to work "
|
||||||
|
L"under current operating system.\n"
|
||||||
|
L"\n"
|
||||||
|
L"Please install unicows.dll and relaunch the program.",
|
||||||
|
ERROR_STRING,
|
||||||
|
MB_ICONERROR | MB_OK
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// this is not really necessary but be tidy
|
||||||
|
::FreeLibrary(hmod);
|
||||||
|
|
||||||
|
// finally do the last check: has unicows.lib initialized correctly?
|
||||||
|
hmod = ::LoadLibraryW(L"unicows.dll");
|
||||||
|
if ( !hmod )
|
||||||
|
{
|
||||||
|
::MessageBox
|
||||||
|
(
|
||||||
|
NULL,
|
||||||
|
L"This program uses Unicode but is not using unicows.dll\n"
|
||||||
|
L"correctly and so cannot work under current operating system.\n"
|
||||||
|
L"Please contact the program author for an updated version.\n"
|
||||||
|
L"\n"
|
||||||
|
L"Program aborted.",
|
||||||
|
ERROR_STRING,
|
||||||
|
MB_ICONERROR | MB_OK
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
::FreeLibrary(hmod);
|
||||||
|
#endif // !wxUSE_UNICODE_MSLU
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // NEED_UNICODE_CHECK
|
||||||
|
|
||||||
|
void wxSetProcessDPIAware()
|
||||||
|
{
|
||||||
|
#if wxUSE_DYNLIB_CLASS
|
||||||
|
typedef BOOL (WINAPI *SetProcessDPIAware_t)(void);
|
||||||
|
wxDynamicLibrary dllUser32(wxT("user32.dll"));
|
||||||
|
SetProcessDPIAware_t pfnSetProcessDPIAware =
|
||||||
|
(SetProcessDPIAware_t)dllUser32.RawGetSymbol(wxT("SetProcessDPIAware"));
|
||||||
|
|
||||||
|
if ( pfnSetProcessDPIAware )
|
||||||
|
pfnSetProcessDPIAware();
|
||||||
|
#endif // wxUSE_DYNLIB_CLASS
|
||||||
|
}
|
||||||
|
|
||||||
|
// It is sometimes undesirable to force DPI awareness on appplications, e.g.
|
||||||
|
// when they are artwork heavy and don't have appropriately scaled bitmaps, or
|
||||||
|
// when they are using non-wx, DPI-unaware code. Allow disabling
|
||||||
|
// SetProcessDPIAware() call.
|
||||||
|
//
|
||||||
|
// Further discussion:
|
||||||
|
// http://trac.wxwidgets.org/ticket/16116
|
||||||
|
// https://groups.google.com/d/topic/wx-dev/Z0VpgzCY34U/discussion
|
||||||
|
bool gs_allowChangingDPIAwareness = true;
|
||||||
|
|
||||||
|
} //anonymous namespace
|
||||||
|
|
||||||
|
void wxMSWDisableSettingHighDPIAware()
|
||||||
|
{
|
||||||
|
gs_allowChangingDPIAwareness = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Windows-specific wxEntry
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
struct wxMSWCommandLineArguments
|
||||||
|
{
|
||||||
|
wxMSWCommandLineArguments() { argc = 0; argv = NULL; }
|
||||||
|
|
||||||
|
void Init(const wxArrayString& args)
|
||||||
|
{
|
||||||
|
argc = args.size();
|
||||||
|
|
||||||
|
// +1 here for the terminating NULL
|
||||||
|
argv = new wxChar *[argc + 1];
|
||||||
|
for ( int i = 0; i < argc; i++ )
|
||||||
|
{
|
||||||
|
argv[i] = wxStrdup(args[i].t_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// argv[] must be NULL-terminated
|
||||||
|
argv[argc] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Free()
|
||||||
|
{
|
||||||
|
if ( !argc )
|
||||||
|
return;
|
||||||
|
|
||||||
|
for ( int i = 0; i < argc; i++ )
|
||||||
|
{
|
||||||
|
free(argv[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDELETEA(argv);
|
||||||
|
argc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int argc;
|
||||||
|
wxChar **argv;
|
||||||
|
};
|
||||||
|
|
||||||
|
static wxMSWCommandLineArguments wxArgs;
|
||||||
|
|
||||||
|
// common part of wxMSW-specific wxEntryStart() and wxEntry() overloads
|
||||||
|
static bool
|
||||||
|
wxMSWEntryCommon(HINSTANCE hInstance, int nCmdShow)
|
||||||
|
{
|
||||||
|
// the first thing to do is to check if we're trying to run an Unicode
|
||||||
|
// program under Win9x w/o MSLU emulation layer - if so, abort right now
|
||||||
|
// as it has no chance to work and has all chances to crash
|
||||||
|
#ifdef NEED_UNICODE_CHECK
|
||||||
|
if ( !wxIsUnicodeAvailable() )
|
||||||
|
return false;
|
||||||
|
#endif // NEED_UNICODE_CHECK
|
||||||
|
|
||||||
|
|
||||||
|
// remember the parameters Windows gave us
|
||||||
|
wxSetInstance(hInstance);
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
wxApp::m_nCmdShow = nCmdShow;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// parse the command line: we can't use pCmdLine in Unicode build so it is
|
||||||
|
// simpler to never use it at all (this also results in a more correct
|
||||||
|
// argv[0])
|
||||||
|
|
||||||
|
// break the command line in words
|
||||||
|
wxArrayString args;
|
||||||
|
|
||||||
|
const wxChar *cmdLine = ::GetCommandLine();
|
||||||
|
if ( cmdLine )
|
||||||
|
{
|
||||||
|
args = wxCmdLineParser::ConvertStringToArgs(cmdLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __WXWINCE__
|
||||||
|
// WinCE doesn't insert the program itself, so do it ourselves.
|
||||||
|
args.Insert(wxGetFullModuleName(), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxArgs.Init(args);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
WXDLLEXPORT bool wxEntryStart(HINSTANCE hInstance,
|
||||||
|
HINSTANCE WXUNUSED(hPrevInstance),
|
||||||
|
wxCmdLineArgType WXUNUSED(pCmdLine),
|
||||||
|
int nCmdShow)
|
||||||
|
{
|
||||||
|
if ( !wxMSWEntryCommon(hInstance, nCmdShow) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return wxEntryStart(wxArgs.argc, wxArgs.argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
WXDLLEXPORT int wxEntry(HINSTANCE hInstance,
|
||||||
|
HINSTANCE WXUNUSED(hPrevInstance),
|
||||||
|
wxCmdLineArgType WXUNUSED(pCmdLine),
|
||||||
|
int nCmdShow)
|
||||||
|
{
|
||||||
|
// wxWidgets library doesn't have problems with non-default DPI settings,
|
||||||
|
// so we can mark the app as "DPI aware" for Vista/Win7 (see
|
||||||
|
// http://msdn.microsoft.com/en-us/library/dd464659%28VS.85%29.aspx).
|
||||||
|
// Note that we intentionally do it here and not in wxApp, so that it
|
||||||
|
// doesn't happen if wx code is hosted in another app (e.g. a plugin).
|
||||||
|
// It can be disabled by calling wxMSWAllowChangingDPIAwareness().
|
||||||
|
if ( gs_allowChangingDPIAwareness )
|
||||||
|
wxSetProcessDPIAware();
|
||||||
|
|
||||||
|
if ( !wxMSWEntryCommon(hInstance, nCmdShow) )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
wxON_BLOCK_EXIT_OBJ0(wxArgs, wxMSWCommandLineArguments::Free);
|
||||||
|
|
||||||
|
return wxEntry(wxArgs.argc, wxArgs.argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_GUI
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// global HINSTANCE
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if wxUSE_BASE
|
||||||
|
|
||||||
|
HINSTANCE wxhInstance = 0;
|
||||||
|
|
||||||
|
extern "C" HINSTANCE wxGetInstance()
|
||||||
|
{
|
||||||
|
return wxhInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSetInstance(HINSTANCE hInst)
|
||||||
|
{
|
||||||
|
wxhInstance = hInst;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_BASE
|
7504
win/wxWidgets_additions/wxWidgets-3.0.2/src/msw/window.cpp
Normal file
7504
win/wxWidgets_additions/wxWidgets-3.0.2/src/msw/window.cpp
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user