Some WinCE fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart 2003-07-10 21:14:50 +00:00
parent fc10daf37c
commit 7f0586ef60
7 changed files with 254 additions and 278 deletions

View File

@ -20,6 +20,10 @@
#include <stddef.h> // for ptrdiff_t
#ifdef __WXWINCE__
typedef int ptrdiff_t;
#endif
// private
struct WXDLLIMPEXP_BASE _wxHashTable_NodeBase
{
@ -70,7 +74,11 @@ protected:
static void** AllocTable( size_t sz )
{
#ifdef __WXWINCE__
return (void **)malloc(sz * sizeof(void*));
#else
return (void **)calloc(sz, sizeof(void*));
#endif
}
};

View File

@ -80,7 +80,7 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
// define things missing from some compilers' headers
// ---------------------------------------------------------------------------
#if defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS
#if defined(__WXWINCE__) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)
#ifndef ZeroMemory
inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); }
#endif
@ -88,9 +88,7 @@ WXDLLEXPORT_DATA(extern HFONT) wxSTATUS_LINE_FONT;
// this defines a CASTWNDPROC macro which casts a pointer to the type of a
// window proc
#if defined(__WXWINCE__)
typedef FARPROC WndProcCast;
#elif defined(STRICT) || defined(__GNUC__)
#if defined(STRICT) || defined(__GNUC__)
typedef WNDPROC WndProcCast;
#else
typedef FARPROC WndProcCast;
@ -402,6 +400,7 @@ private:
DECLARE_NO_COPY_CLASS(SelectInHDC)
};
#ifndef __WXWINCE__
// when working with global pointers (which is unfortunately still necessary
// sometimes, e.g. for clipboard) it is important to unlock them exactly as
// many times as we lock them which just asks for using a "smart lock" class
@ -440,6 +439,7 @@ private:
DECLARE_NO_COPY_CLASS(GlobalPtr)
};
#endif
// ---------------------------------------------------------------------------
// macros to make casting between WXFOO and FOO a bit easier: the GetFoo()

View File

@ -12,8 +12,16 @@
#ifndef _WX_CE_MISSING_H_
#define _WX_CE_MISSING_H_
BOOL IsIconic( HWND hWnd )
{
// Probably not right...
#if 0
long style = GetWindowLong(hWnd, GWL_STYLE);
return ((style & WS_MINIMIZE) == 0);
#endif
return FALSE;
}
#include "wx/msw/private.h"
/*
Most of these are in MSVC++6.0 <wx\wince\winuser.h>
@ -21,6 +29,13 @@ see also <wx\msw\gnuwin32\winresrc.h>
*/
////////////////////////////////////////////////////////
// JACS: I've commented these out in order to start from
// scratch. I don't think we should simply add styles,
// classes etc. when we don't know if they're supported
// by WinCE libraries.
#if 0
/*
* Extended Window Styles
*/
@ -134,6 +149,8 @@ CallWindowProcW(
#define CallWindowProc CallWindowProcA
#endif // !UNICODE
#endif
////////////////////////////////////////////////////////
#endif // _WX_CE_MISSING_H_

View File

@ -1,13 +1,13 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/wince/setup.h
// Name: wx/msw/setup.h
// Purpose: Configuration for the library
// Author: Marco Cavallini
// Author: Julian Smart
// Modified by:
// Created: 08/11/2002
// RCS-ID:
// Copyright: (c) KOAN SAS ( www.koansoftware.com )
// Created: 01/02/97
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_SETUP_H_
#define _WX_SETUP_H_
@ -44,26 +44,23 @@
// Recommended setting: 0 (please update your code instead!)
#define WXWIN_COMPATIBILITY_2 0
// This setting determines the compatibility with 2.0 API: set it to 1 to
// enable it
// This setting determines the compatibility with 2.2 API: set it to 1 to
// enable it but please consider updating your code instead.
//
// Default is 1.
// Default is 0
//
// Recommended setting: 0 (please update your code instead!)
// Recommended setting: 0 (please update your code)
#define WXWIN_COMPATIBILITY_2_2 1
// in wxMSW version 2.1.11 and earlier, wxIcon always derives from wxBitmap,
// but this is very dangerous because you can mistakenly pass an icon instead
// of a bitmap to a function taking "const wxBitmap&" - which will *not* work
// because an icon is not a valid bitmap
// This setting determines the compatibility with 2.4 API: set it to 0 to
// flag all cases of using deprecated functions.
//
// Starting from 2.1.12, you have the choice under this backwards compatible
// behaviour (your code will still compile, but probably won't behave as
// expected!) and not deriving wxIcon class from wxBitmap, but providing a
// conversion ctor wxBitmap(const wxIcon&) instead.
// Default is 1 but please try building your code with 0 as the default will
// change to 0 in the next version and the deprecated functions will disappear
// in the version after it completely.
//
// Recommended setting: 0
#define wxICON_IS_BITMAP 0
// Recommended setting: 0 (please update your code)
#define WXWIN_COMPATIBILITY_2_4 1
// Define as 1 for font size to be backward compatible to 1.63 and earlier.
// 1.64 and later define point sizes to be compatible with Windows.
@ -161,29 +158,31 @@
// defined as wchar_t, wxString will use Unicode internally. If you set this
// to 1, you must use wxT() macro for all literal strings in the program.
//
// Unicode is currently only fully supported under Windows NT/2000/XP (Windows 9x
// doesn't support it and the programs compiled in Unicode mode will not run
// under 9x).
// Unicode is currently only fully supported under Windows NT/2000/XP
// (Windows 9x doesn't support it and the programs compiled in Unicode mode
// will not run under 9x -- but see wxUSE_UNICODE_MSLU below).
//
// Default is 0
//
// Recommended setting: 0 (unless you only plan to use Windows NT/2000/XP)
#define wxUSE_UNICODE 0
#ifndef wxUSE_UNICODE
#define wxUSE_UNICODE 0
#endif
// Set wxUSE_UNICODE_MSLU to 1 if you want to compile wxWindows in Unicode mode
// and be able to run compiled apps under Windows 9x as well as NT/2000/XP. This
// setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see
// http://www.microsoft.com/globaldev/Articles/mslu_announce.asp). Note that you
// will have to modify the makefiles to include unicows.lib import library as the first
// library (if you use MSVC, you can run the makefile with "nmake MSLU=1 UNICODE=1"
// command).
// and be able to run compiled apps under Windows 9x as well as NT/2000/XP.
// This setting enables use of unicows.dll from MSLU (MS Layer for Unicode, see
// http://www.microsoft.com/globaldev/handson/dev/mslu_announce.mspx). Note that
// you will have to modify the makefiles to include unicows.lib import library
// as the first library (if you use MSVC, you can run the makefile with "nmake
// MSLU=1 UNICODE=1" command).
//
// If your compiler doesn't have unicows.lib, you can get a version of it at
// http://libunicows.sourceforge.net
//
// Default is 0
//
// Recommended setting: 0
// Recommended setting: 0 (1 if you want to deploy Unicode apps on 9x systems)
#define wxUSE_UNICODE_MSLU 0
// Setting wxUSE_WCHAR_T to 1 gives you some degree of Unicode support without
@ -200,6 +199,15 @@
// global features
// ----------------------------------------------------------------------------
// Set wxUSE_STL to 1 to derive wxList(Foo) and wxArray(Foo) from
// std::list<Foo*> and std::vector<Foo*>, with a compatibility interface,
// and for wxHashMap to be implemented with templates.
//
// Default is 0
//
// Recommended setting: YMMV
#define wxUSE_STL 0
// Support for message/error logging. This includes wxLogXXX() functions and
// wxLog and derived classes. Don't set this to 0 unless you really know what
// you are doing.
@ -209,13 +217,6 @@
// Recommended setting: 1 (always)
#define wxUSE_LOG 1
// Support for command line parsing using wxCmdLineParser class.
//
// Default is 1
//
// Recommended setting: 1 (can be set to 0 if you don't use the cmd line)
#define wxUSE_CMDLINE_PARSER 1
// Recommended setting: 1
#define wxUSE_LOGWINDOW 1
@ -225,6 +226,13 @@
// Recommended setting: 1
#define wxUSE_LOG_DIALOG 1
// Support for command line parsing using wxCmdLineParser class.
//
// Default is 1
//
// Recommended setting: 1 (can be set to 0 if you don't use the cmd line)
#define wxUSE_CMDLINE_PARSER 1
// Support for multithreaded applications: if 1, compile in thread classes
// (thread.h) and make the library a bit more thread safe. Although thread
// support is quite stable by now, you may still consider recompiling the
@ -305,15 +313,6 @@
// Recommended setting: 1
#define wxUSE_DATETIME 1
// wxUSE_TIMEDATE enables compilation of the old wxDate and wxTime classes (not
// the same as wxDateTime!). These classes are obsolete and shouldn't be used
// in new code
//
// Default is 0
//
// Recommended setting: 0 unless you have legacy code which uses these classes
#define wxUSE_TIMEDATE 0
// Set wxUSE_TIMER to 1 to compile wxTimer class
//
// Default is 1
@ -555,23 +554,13 @@
// Recommended setting: 0 (use wxNotebook)
#define wxUSE_TAB_DIALOG 0
// wxGrid class comes in two flavours: the original (pre wxWin 2.2) one and
// the new, much imporved and enhanced version. The new version is backwards
// compatible with the old one and should be used whenever possible, i.e. if
// you set wxUSE_GRID to 1, set wxUSE_NEW_GRID to 1 too.
// wxGrid class
//
// Default is 1 for both options.
//
// Recommended setting: 1 for wxUSE_NEW_GRID, 0 if you have an old code using
// wxGrid and 100% backwards compatibality (with all old wxGrid quirks) is
// essential.
// Recommended setting: 1
//
// WIN16/BC++ resets wxUSE_NEW_GRID to 0 because it exceeds the data limit.
#define wxUSE_GRID 1
#define wxUSE_NEW_GRID 1
// wxProperty[Value/Form/List] classes, used by Dialog Editor
#define wxUSE_PROPSHEET 1
// ----------------------------------------------------------------------------
// Miscellaneous GUI stuff
@ -580,6 +569,9 @@
// wxAcceleratorTable/Entry classes and support for them in wxMenu(Bar)
#define wxUSE_ACCEL 1
// Hotkey support (currently Windows only)
#define wxUSE_HOTKEY 1
// Use wxCaret: a class implementing a "cursor" in a text control (called caret
// under Windows).
//
@ -588,6 +580,14 @@
// Recommended setting: 1 (can be safely set to 0, not used by the library)
#define wxUSE_CARET 1
// Use wxDisplay class: it allows enumerating all displays on a system and
// working with them.
//
// Default is 0 because it isn't yet implemented on all platforms
//
// Recommended setting: 1 if you need it, can be safely set to 0 otherwise
#define wxUSE_DISPLAY 0
// Miscellaneous geometry code: needed for Canvas library
#define wxUSE_GEOMETRY 1
@ -626,7 +626,7 @@
// Default is 1.
//
// Recommended setting: 1
#define wxUSE_TOOLTIPS 1
#define wxUSE_TOOLTIPS 0
// wxValidator class and related methods
#define wxUSE_VALIDATORS 1
@ -634,6 +634,10 @@
// wxDC cacheing implementation
#define wxUSE_DC_CACHEING 1
// Set this to 1 to enable the use of DIB's for wxBitmap to support
// bitmaps > 16MB on Win95/98/Me. Set to 0 to use DDB's only.
#define wxUSE_DIB_FOR_BITMAP 0
// ----------------------------------------------------------------------------
// common dialogs
// ----------------------------------------------------------------------------
@ -768,12 +772,17 @@
// smaller library.
#define wxUSE_HTML 1
// OpenGL canvas
// Setting wxUSE_GLCANVAS to 1 enables OpenGL support. You need to have OpenGL
// headers and libraries to be able to compile the library with wxUSE_GLCANVAS
// set to 1. Note that for some compilers (notably Microsoft Visual C++) you
// will need to manually add opengl32.lib and glu32.lib to the list of
// libraries linked with your program if you use OpenGL.
//
// Default is 0.
//
// Recommended setting: 1 if you intend to use OpenGL, 0 otherwise
#define wxUSE_GLCANVAS 0
// wxTreeLayout class
#define wxUSE_TREELAYOUT 1
// ----------------------------------------------------------------------------
// Data transfer
// ----------------------------------------------------------------------------
@ -797,10 +806,18 @@
// different from "built in" drag and drop in wxTreeCtrl which is always
// available). Requires wxUSE_DATAOBJ.
//
// Default is 1.
//
// Recommended setting: 1
#define wxUSE_DRAG_AND_DROP 1
// Use wxAccessible for enhanced and customisable accessibility.
// Depends on wxUSE_OLE.
//
// Default is 0.
//
// Recommended WinCE setting: 0
#define wxUSE_DRAG_AND_DROP 0
// Recommended setting (at present): 0
#define wxUSE_ACCESSIBILITY 0
// ----------------------------------------------------------------------------
// miscellaneous settings
@ -819,13 +836,13 @@
#define wxUSE_IPC 1
// 0 for no interprocess comms
#define wxUSE_HELP 1
#define wxUSE_HELP 0
// 0 for no help facility
#define wxUSE_MS_HTML_HELP 1
// 0 for no MS HTML Help
// Use wxHTML-based help controller?
#define wxUSE_WXHTML_HELP 1
#define wxUSE_WXHTML_HELP 0
#define wxUSE_RESOURCES 1
// 0 for no wxGetResource/wxWriteResource
@ -835,23 +852,6 @@
#define wxUSE_SPLINES 1
// 0 for no splines
#define wxUSE_XPM_IN_MSW 1
// 0 for no XPM support in wxBitmap.
// Default is 1, as XPM is now fully
// supported this makes easier the issue
// of portable icons and bitmaps.
#define wxUSE_IMAGE_LOADING_IN_MSW 1
// Use dynamic DIB loading/saving code in utils/dib under MSW.
#define wxUSE_RESOURCE_LOADING_IN_MSW 1
// Use dynamic icon/cursor loading/saving code
// under MSW.
// use wxExpr (a.k.a. PrologIO)
#define wxUSE_PROLOGIO 0
#define wxUSE_WX_RESOURCES 0
// Use .wxr resource mechanism (requires PrologIO library)
#define wxUSE_MOUSEWHEEL 1
// Include mouse wheel support
@ -874,7 +874,7 @@
// ----------------------------------------------------------------------------
// Define 1 to use ODBC classes
#define wxUSE_ODBC 1
#define wxUSE_ODBC 0
// For backward compatibility reasons, this parameter now only controls the
// default scrolling method used by cursors. This default behavior can be
@ -905,7 +905,9 @@
#define REMOVE_UNUSED_ARG 1
// VC++ 4.2 and above allows <iostream> and <iostream.h> but you can't mix
// them. Set to 1 for <iostream.h>, 0 for <iostream>
// them. Set to 1 for <iostream.h>, 0 for <iostream>. Note that VC++ 7.1
// and later doesn't support wxUSE_IOSTREAMH == 1 and so <iostream> will be
// used anyhow.
//
// Default is 1.
//
@ -1031,6 +1033,13 @@
// Recommended setting: 1, set to 0 for a small library size reduction
#define wxUSE_OWNER_DRAWN 1
// Set to 1 to compile MS Windows XP theme engine support
#define wxUSE_UXTHEME 1
// Set to 1 to auto-adapt to MS Windows XP themes where possible
// (notably, wxNotebook pages)
#define wxUSE_UXTHEME_AUTO 1
// ----------------------------------------------------------------------------
// obsolete settings
// ----------------------------------------------------------------------------
@ -1048,170 +1057,5 @@
// NOW MANDATORY: don't change.
#define wxUSE_DYNAMIC_CLASSES 1
// ----------------------------------------------------------------------------
// disable the settings which don't work for some compilers
// ----------------------------------------------------------------------------
#ifndef wxUSE_NORLANDER_HEADERS
#if (defined(__MINGW32__) || defined(__CYGWIN__)) && ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
# define wxUSE_NORLANDER_HEADERS 1
#else
# define wxUSE_NORLANDER_HEADERS 0
#endif
#endif
// wxUSE_DEBUG_NEW_ALWAYS doesn't work with CodeWarrior
#if defined(__MWERKS__)
#undef wxUSE_DEBUG_NEW_ALWAYS
#define wxUSE_DEBUG_NEW_ALWAYS 0
#endif
#if defined(__GNUWIN32__)
// These don't work as expected for mingw32 and cygwin32
#undef wxUSE_MEMORY_TRACING
#define wxUSE_MEMORY_TRACING 0
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
#undef wxUSE_DEBUG_NEW_ALWAYS
#define wxUSE_DEBUG_NEW_ALWAYS 0
// Cygwin betas don't have wcslen
#if defined(__CYGWIN__) || defined(__CYGWIN32__)
# if ! ((__GNUC__>2) ||((__GNUC__==2) && (__GNUC_MINOR__>=95)))
# undef wxUSE_WCHAR_T
# define wxUSE_WCHAR_T 0
# endif
#endif
#endif // __GNUWIN32__
// MFC duplicates these operators
#if wxUSE_MFC
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
#undef wxUSE_DEBUG_NEW_ALWAYS
#define wxUSE_DEBUG_NEW_ALWAYS 0
#endif // wxUSE_MFC
#if (!defined(WIN32) && !defined(__WIN32__)) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)
// Can't use OLE drag and drop in Windows 3.1 because we don't know how
// to implement UUIDs
// GnuWin32 doesn't have appropriate headers for e.g. IUnknown.
#undef wxUSE_DRAG_AND_DROP
#define wxUSE_DRAG_AND_DROP 0
#endif
// Only WIN32 supports wxStatusBar95
#if !defined(__WIN32__) && wxUSE_NATIVE_STATUSBAR
#undef wxUSE_NATIVE_STATUSBAR
#define wxUSE_NATIVE_STATUSBAR 0
#endif
#if !wxUSE_OWNER_DRAWN
#undef wxUSE_CHECKLISTBOX
#define wxUSE_CHECKLISTBOX 0
#endif
// Salford C++ doesn't like some of the memory operator definitions
#ifdef __SALFORDC__
#undef wxUSE_MEMORY_TRACING
#define wxUSE_MEMORY_TRACING 0
#undef wxUSE_GLOBAL_MEMORY_OPERATORS
#define wxUSE_GLOBAL_MEMORY_OPERATORS 0
#undef wxUSE_DEBUG_NEW_ALWAYS
#define wxUSE_DEBUG_NEW_ALWAYS 0
#undef wxUSE_THREADS
#define wxUSE_THREADS 0
#undef wxUSE_OWNER_DRAWN
#define wxUSE_OWNER_DRAWN 0
#endif // __SALFORDC__
// BC++/Win16 can't cope with the amount of data in resource.cpp
#if defined(__WIN16__) && defined(__BORLANDC__)
#undef wxUSE_WX_RESOURCES
#define wxUSE_WX_RESOURCES 0
#undef wxUSE_ODBC
#define wxUSE_ODBC 0
#undef wxUSE_NEW_GRID
#define wxUSE_NEW_GRID 0
#endif
#if defined(__BORLANDC__) && (__BORLANDC__ < 0x500)
// BC++ 4.0 can't compile JPEG library
#undef wxUSE_LIBJPEG
#define wxUSE_LIBJPEG 0
#endif
// wxUSE_DEBUG_NEW_ALWAYS = 1 not compatible with BC++ in DLL mode
#if defined(__BORLANDC__) && (defined(WXMAKINGDLL) || defined(WXUSINGDLL))
#undef wxUSE_DEBUG_NEW_ALWAYS
#define wxUSE_DEBUG_NEW_ALWAYS 0
#endif
#if defined(__WXMSW__) && defined(__WATCOMC__)
/*
#undef wxUSE_GLCANVAS
#define wxUSE_GLCANVAS 0
*/
#undef wxUSE_WCHAR_T
#define wxUSE_WCHAR_T 0
#endif
#if defined(__WXMSW__) && !defined(__WIN32__)
#undef wxUSE_SOCKETS
#define wxUSE_SOCKETS 0
#undef wxUSE_THREADS
#define wxUSE_THREADS 0
#undef wxUSE_TOOLTIPS
#define wxUSE_TOOLTIPS 0
#undef wxUSE_SPINCTRL
#define wxUSE_SPINCTRL 0
#undef wxUSE_SPINBTN
#define wxUSE_SPINBTN 0
#undef wxUSE_LIBPNG
#define wxUSE_LIBPNG 0
#undef wxUSE_LIBJPEG
#define wxUSE_LIBJPEG 0
#undef wxUSE_LIBTIFF
#define wxUSE_LIBTIFF 0
#undef wxUSE_GIF
#define wxUSE_GIF 0
#undef wxUSE_PNM
#define wxUSE_PNM 0
#undef wxUSE_PCX
#define wxUSE_PCX 0
#undef wxUSE_GLCANVAS
#define wxUSE_GLCANVAS 0
#undef wxUSE_MS_HTML_HELP
#define wxUSE_MS_HTML_HELP 0
#undef wxUSE_WCHAR_T
#define wxUSE_WCHAR_T 0
#endif // Win16
#endif
// _WX_SETUP_H_

View File

@ -121,7 +121,15 @@ inline size_t Strlen(const char *psz)
// portable strcasecmp/_stricmp
inline int Stricmp(const char *psz1, const char *psz2)
{
#if defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) )
#if defined(__VISUALC__) && defined(__WXWINCE__)
register char c1, c2;
do {
c1 = tolower(*psz1++);
c2 = tolower(*psz2++);
} while ( c1 && (c1 == c2) );
return c1 - c2;
#elif defined(__VISUALC__) || ( defined(__MWERKS__) && defined(__INTEL__) )
return _stricmp(psz1, psz2);
#elif defined(__SC__)
return _stricmp(psz1, psz2);

View File

@ -155,8 +155,10 @@ void wxCursorRefData::Free()
{
if ( m_hCursor )
{
#ifndef __WXWINCE__
if ( m_destroyCursor )
::DestroyCursor((HCURSOR)m_hCursor);
#endif
m_hCursor = 0;
}
@ -235,9 +237,11 @@ wxCursor::wxCursor(const wxString& filename,
hcursor = ::LoadCursor(wxGetInstance(), filename);
break;
#ifndef __WXWINCE__
case wxBITMAP_TYPE_CUR:
hcursor = ::LoadCursorFromFile(filename);
break;
#endif
case wxBITMAP_TYPE_ICO:
hcursor = wxBitmapToHCURSOR

View File

@ -95,7 +95,7 @@
#include <string.h>
#if (!defined(__GNUWIN32_OLD__) && !defined(__WXMICROWIN__)) || defined(__CYGWIN10__)
#if (!defined(__GNUWIN32_OLD__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__)) || defined(__CYGWIN10__)
#include <shellapi.h>
#include <mmsystem.h>
#endif
@ -104,11 +104,11 @@
#include <windowsx.h>
#endif
#if (!defined(__GNUWIN32_OLD__) && !defined(__WXMICROWIN__)) || defined(__CYGWIN10__)
#if (!defined(__GNUWIN32_OLD__) && !defined(__WXMICROWIN__) && !defined(__WXWINCE__)) || defined(__CYGWIN10__)
#ifdef __WIN95__
#include <commctrl.h>
#endif
#elif !defined(__WXMICROWIN__) // broken compiler
#elif !defined(__WXMICROWIN__) && !defined(__WXWINCE__) // broken compiler
#include "wx/msw/gnuwin32/extra.h"
#endif
@ -116,6 +116,10 @@
#include "wx/msw/missing.h"
#endif
#if defined(__WXWINCE__)
#include "wx/msw/wince/missing.h"
#endif
// ----------------------------------------------------------------------------
// standard constants not available with all compilers/headers
// ----------------------------------------------------------------------------
@ -448,7 +452,7 @@ void wxWindowMSW::SetFocus()
HWND hWnd = GetHwnd();
wxCHECK_RET( hWnd, _T("can't set focus to invalid window") );
#ifndef __WXMICROWIN__
#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
::SetLastError(0);
#endif
@ -744,7 +748,16 @@ inline int GetScrollPosition(HWND hWnd, int wOrient)
#ifdef __WXMICROWIN__
return ::GetScrollPosWX(hWnd, wOrient);
#else
return ::GetScrollPos(hWnd, wOrient);
SCROLLINFO scrollInfo;
scrollInfo.fMask = SIF_POS;
if ( !::GetScrollInfo(hWnd,
wOrient,
&scrollInfo) )
{
wxLogLastError(_T("GetScrollInfo"));
}
return scrollInfo.nPos;
// return ::GetScrollPos(hWnd, wOrient);
#endif
}
@ -760,13 +773,23 @@ int wxWindowMSW::GetScrollPos(int orient) const
// of positions that we can scroll.
int wxWindowMSW::GetScrollRange(int orient) const
{
int minPos, maxPos;
int maxPos;
HWND hWnd = GetHwnd();
if ( !hWnd )
return 0;
#if 0
::GetScrollRange(hWnd, orient == wxHORIZONTAL ? SB_HORZ : SB_VERT,
&minPos, &maxPos);
#endif
SCROLLINFO scrollInfo;
scrollInfo.fMask = SIF_RANGE;
if ( !::GetScrollInfo(hWnd,
orient == wxHORIZONTAL ? SB_HORZ : SB_VERT,
&scrollInfo) )
{
wxLogLastError(_T("GetScrollInfo"));
}
maxPos = scrollInfo.nMax;
// undo "range - 1" done in SetScrollbar()
return maxPos + 1;
@ -843,7 +866,12 @@ void wxWindowMSW::ScrollWindow(int dx, int dy, const wxRect *prect)
pr = NULL;
}
#ifdef __WXWINCE__
// FIXME: is this the exact equivalent of the line below?
::ScrollWindowEx(GetHwnd(), dx, dy, pr, pr, 0, 0, SW_ERASE|SW_INVALIDATE);
#else
::ScrollWindow(GetHwnd(), dx, dy, pr, pr);
#endif
}
static bool ScrollVertically(HWND hwnd, int kind, int count)
@ -1046,8 +1074,10 @@ WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
{
*exstyle = 0;
#ifndef __WXWINCE__
if ( flags & wxTRANSPARENT_WINDOW )
*exstyle |= WS_EX_TRANSPARENT;
#endif
switch ( border )
{
@ -1079,7 +1109,7 @@ WXDWORD wxWindowMSW::MSWGetStyle(long flags, WXDWORD *exstyle) const
}
// wxUniv doesn't use Windows dialog navigation functions at all
#ifndef __WXUNIVERSAL__
#if !defined(__WXUNIVERSAL__) && !defined(__WXWINCE__)
// to make the dialog navigation work with the nested panels we must
// use this style (top level windows such as dialogs don't need it)
if ( (flags & wxTAB_TRAVERSAL) && !IsTopLevel() )
@ -1265,7 +1295,7 @@ void wxWindowMSW::Update()
wxLogLastError(_T("UpdateWindow"));
}
#if !defined(__WXMICROWIN__)
#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
// just calling UpdateWindow() is not enough, what we did in our WM_PAINT
// handler needs to be really drawn right now
(void)::GdiFlush();
@ -1295,9 +1325,11 @@ void wxWindowMSW::SetDropTarget(wxDropTarget *pDropTarget)
// DragAcceptFiles in parallel with SetDropTarget.
void wxWindowMSW::DragAcceptFiles(bool accept)
{
#if !defined(__WXWINCE__)
HWND hWnd = GetHwnd();
if ( hWnd )
::DragAcceptFiles(hWnd, (BOOL)accept);
#endif
}
// ----------------------------------------------------------------------------
@ -1701,7 +1733,11 @@ bool wxWindowMSW::DoPopupMenu(wxMenu *menu, int x, int y)
point.y = y;
::ClientToScreen(hWnd, &point);
wxCurrentPopupMenu = menu;
::TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, point.x, point.y, 0, hWnd, NULL);
UINT flags = 0;
#if !defined(__WXWINCE__)
flags = TPM_RIGHTBUTTON;
#endif
::TrackPopupMenu(hMenu, flags, point.x, point.y, 0, hWnd, NULL);
// we need to do it righ now as otherwise the events are never going to be
// sent to wxCurrentPopupMenu from HandleCommand()
@ -1942,6 +1978,7 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg)
// style has the focus, it can happen. One such possibility is if
// all windows are either toplevel, wxDialog, wxPanel or static
// controls and no window can actually accept keyboard input.
#if !defined(__WXWINCE__)
if ( ::GetWindowLong(hwndFocus, GWL_EXSTYLE) & WS_EX_CONTROLPARENT )
{
// passimistic by default
@ -1959,6 +1996,7 @@ bool wxWindowMSW::MSWProcessMessage(WXMSG* pMsg)
}
}
}
#endif
if ( canSafelyCallIsDlgMsg )
{
@ -2169,6 +2207,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
processed = HandleMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
break;
#if !defined(__WXWINCE__)
case WM_MOVING:
{
LPRECT pRect = (LPRECT)lParam;
@ -2186,6 +2225,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
}
break;
#endif
case WM_SIZE:
switch ( wParam )
@ -2215,6 +2255,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
break;
#if !defined(__WXWINCE__)
case WM_SIZING:
{
LPRECT pRect = (LPRECT)lParam;
@ -2232,8 +2273,9 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
}
break;
#endif
#ifndef __WXMICROWIN__
#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
case WM_ACTIVATEAPP:
wxTheApp->SetActive(wParam != 0, FindFocus());
break;
@ -2389,11 +2431,9 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
break;
#ifdef __WIN95__
case WM_NOTIFY:
processed = HandleNotify((int)wParam, lParam, &rc.result);
break;
#endif // Win95
// for these messages we must return TRUE if process the message
#ifdef WM_DRAWITEM
@ -2600,9 +2640,11 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
processed = HandleSysColorChange();
break;
#if !defined(__WXWINCE__)
case WM_DISPLAYCHANGE:
processed = HandleDisplayChange();
break;
#endif
case WM_PALETTECHANGED:
processed = HandlePaletteChanged((WXHWND) (HWND) wParam);
@ -2625,9 +2667,11 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
break;
#if !defined(__WXWINCE__)
case WM_DROPFILES:
processed = HandleDropFiles(wParam);
break;
#endif
case WM_INITDIALOG:
processed = HandleInitDialog((WXHWND)(HWND)wParam);
@ -2639,6 +2683,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
break;
#if !defined(__WXWINCE__)
case WM_QUERYENDSESSION:
processed = HandleQueryEndSession(lParam, &rc.allow);
break;
@ -2650,6 +2695,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
case WM_GETMINMAXINFO:
processed = HandleGetMinMaxInfo((MINMAXINFO*)lParam);
break;
#endif
case WM_SETCURSOR:
processed = HandleSetCursor((WXHWND)(HWND)wParam,
@ -2682,18 +2728,26 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
#if defined(WM_HELP)
case WM_HELP:
{
// HELPINFO doesn't seem to be supported on WinCE.
#ifndef __WXWINCE__
HELPINFO* info = (HELPINFO*) lParam;
// Don't yet process menu help events, just windows
if (info->iContextType == HELPINFO_WINDOW)
{
#endif
wxWindowMSW* subjectOfHelp = this;
bool eventProcessed = FALSE;
while (subjectOfHelp && !eventProcessed)
{
wxHelpEvent helpEvent(wxEVT_HELP,
subjectOfHelp->GetId(),
wxPoint(info->MousePos.x,
info->MousePos.y) );
#ifdef __WXWINCE__
wxPoint(0, 0)
#else
wxPoint(info->MousePos.x, info->MousePos.y)
#endif
);
helpEvent.SetEventObject(this);
eventProcessed =
GetEventHandler()->ProcessEvent(helpEvent);
@ -2704,6 +2758,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
processed = eventProcessed;
#ifndef __WXWINCE__
}
else if (info->iContextType == HELPINFO_MENUITEM)
{
@ -2713,9 +2768,12 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
//else: processed is already FALSE
#endif
}
break;
#endif
#if !defined(__WXWINCE__)
case WM_CONTEXTMENU:
{
// we don't convert from screen to client coordinates as
@ -2726,6 +2784,7 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
processed = GetEventHandler()->ProcessEvent(evtCtx);
}
break;
#endif
case WM_MENUCHAR:
// we're only interested in our own menus, not MF_SYSMENU
@ -2740,7 +2799,6 @@ long wxWindowMSW::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam
}
}
break;
#endif
}
if ( !processed )
@ -2986,12 +3044,13 @@ bool wxWindowMSW::HandleTooltipNotify(WXUINT code,
// this message is supposed to be sent to Unicode programs only) -- hence
// we need to handle it as well, otherwise no tooltips will be shown in
// this case
#ifndef __WXWINCE__
if ( !(code == (WXUINT) TTN_NEEDTEXTA || code == (WXUINT) TTN_NEEDTEXTW) || ttip.empty() )
{
// not a tooltip message or no tooltip to show anyhow
return FALSE;
}
#endif
LPTOOLTIPTEXT ttText = (LPTOOLTIPTEXT)lParam;
@ -3046,6 +3105,7 @@ bool wxWindowMSW::MSWOnNotify(int WXUNUSED(idCtrl),
bool wxWindowMSW::HandleQueryEndSession(long logOff, bool *mayEnd)
{
#ifndef __WXWINCE__
wxCloseEvent event(wxEVT_QUERY_END_SESSION, -1);
event.SetEventObject(wxTheApp);
event.SetCanVeto(TRUE);
@ -3061,10 +3121,14 @@ bool wxWindowMSW::HandleQueryEndSession(long logOff, bool *mayEnd)
}
return rc;
#else
return FALSE;
#endif
}
bool wxWindowMSW::HandleEndSession(bool endSession, long logOff)
{
#ifndef __WXWINCE__
// do nothing if the session isn't ending
if ( !endSession )
return FALSE;
@ -3079,6 +3143,9 @@ bool wxWindowMSW::HandleEndSession(bool endSession, long logOff)
event.SetLoggingOff( (logOff == (long)ENDSESSION_LOGOFF) );
return wxTheApp->ProcessEvent(event);
#else
return FALSE;
#endif
}
// ---------------------------------------------------------------------------
@ -3094,6 +3161,7 @@ bool wxWindowMSW::HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate)
// all of them iterate over all the controls starting from the focus and
// stop iterating when they get back to the focus but unless all parents
// have WS_EX_CONTROLPARENT bit set, they would never get back to focus
#ifndef __WXWINCE__
if ( ((CREATESTRUCT *)cs)->dwExStyle & WS_EX_CONTROLPARENT )
{
// there is no need to do anything for the top level windows
@ -3111,6 +3179,7 @@ bool wxWindowMSW::HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate)
parent = parent->GetParent();
}
}
#endif
// TODO: should generate this event from WM_NCCREATE
wxWindowCreateEvent event((wxWindow *)this);
@ -3247,7 +3316,7 @@ bool wxWindowMSW::HandleInitDialog(WXHWND WXUNUSED(hWndFocus))
bool wxWindowMSW::HandleDropFiles(WXWPARAM wParam)
{
#if defined (__WXMICROWIN__)
#if defined (__WXMICROWIN__) || defined(__WXWINCE__)
return FALSE;
#else // __WXMICROWIN__
HDROP hFilesInfo = (HDROP) wParam;
@ -3486,7 +3555,11 @@ bool wxWindowMSW::HandleCtlColor(WXHBRUSH *brush,
#ifndef __WXMICROWIN__
WXHBRUSH hBrush = 0;
#ifdef __WXWINCE__
if (FALSE)
#else
if ( nCtlColor == CTLCOLOR_DLG )
#endif
{
hBrush = OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam);
}
@ -3817,11 +3890,16 @@ void wxWindowMSW::OnEraseBackground(wxEraseEvent& event)
HDC hdc = (HDC)event.GetDC()->GetHDC();
#ifndef __WXWINCE__
int mode = ::SetMapMode(hdc, MM_TEXT);
#endif
::FillRect(hdc, &rect, hBrush);
::DeleteObject(hBrush);
#ifndef __WXWINCE__
::SetMapMode(hdc, mode);
#endif
}
// ---------------------------------------------------------------------------
@ -3888,6 +3966,9 @@ bool wxWindowMSW::HandleSizing(wxRect& rect)
bool wxWindowMSW::HandleGetMinMaxInfo(void *mmInfo)
{
#ifdef __WXWINCE__
return FALSE;
#else
MINMAXINFO *info = (MINMAXINFO *)mmInfo;
bool rc = FALSE;
@ -3922,6 +4003,7 @@ bool wxWindowMSW::HandleGetMinMaxInfo(void *mmInfo)
}
return rc;
#endif
}
// ---------------------------------------------------------------------------
@ -3994,6 +4076,7 @@ bool wxWindowMSW::HandleCommand(WXWORD id, WXWORD cmd, WXHWND control)
bool wxWindowMSW::HandleSysCommand(WXWPARAM wParam, WXLPARAM WXUNUSED(lParam))
{
#ifndef __WXWINCE__
// 4 bits are reserved
switch ( wParam & 0xFFFFFFF0 )
{
@ -4003,6 +4086,7 @@ bool wxWindowMSW::HandleSysCommand(WXWPARAM wParam, WXLPARAM WXUNUSED(lParam))
case SC_MINIMIZE:
return HandleMinimize();
}
#endif
return FALSE;
}
@ -4061,6 +4145,13 @@ static wxWindowMSW *FindWindowForMouseEvent(wxWindowMSW *win, int *x, int *y) //
HWND hwnd = GetHwndOf(win),
hwndUnderMouse;
#ifdef __WXWINCE__
hwndUnderMouse = ::ChildWindowFromPoint
(
hwnd,
pt
);
#else
hwndUnderMouse = ::ChildWindowFromPointEx
(
hwnd,
@ -4069,6 +4160,7 @@ static wxWindowMSW *FindWindowForMouseEvent(wxWindowMSW *win, int *x, int *y) //
CWP_SKIPDISABLED |
CWP_SKIPTRANSPARENT
);
#endif
if ( !hwndUnderMouse || hwndUnderMouse == hwnd )
{
@ -4344,6 +4436,9 @@ bool wxWindowMSW::HandleKeyUp(WXWPARAM wParam, WXLPARAM lParam)
int wxWindowMSW::HandleMenuChar(int chAccel, WXLPARAM lParam)
{
// FIXME: implement GetMenuItemCount for WinCE, possibly
// in terms of GetMenuItemInfo
#ifndef __WXWINCE__
const HMENU hmenu = (HMENU)lParam;
MENUITEMINFO mii;
@ -4397,7 +4492,7 @@ int wxWindowMSW::HandleMenuChar(int chAccel, WXLPARAM lParam)
wxLogLastError(_T("GetMenuItemInfo"));
}
}
#endif
return wxNOT_FOUND;
}
@ -4849,7 +4944,7 @@ extern wxWindow *wxGetWindowFromHWND(WXHWND hWnd)
return win;
}
#ifndef __WXMICROWIN__
#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
// Windows keyboard hook. Allows interception of e.g. F1, ESCAPE
// in active frames and dialogs, regardless of where the focus is.