Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
/*
|
|
|
|
* Window procedure callbacks
|
|
|
|
*
|
|
|
|
* Copyright 1995 Martin von Loewis
|
|
|
|
* Copyright 1996 Alexandre Julliard
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
*/
|
|
|
|
|
2001-10-14 18:18:52 +02:00
|
|
|
#include "config.h"
|
2002-04-25 23:40:56 +02:00
|
|
|
#include "wine/port.h"
|
2001-10-14 18:18:52 +02:00
|
|
|
|
2006-05-09 19:55:05 +02:00
|
|
|
#include <assert.h>
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
1999-08-15 14:45:01 +02:00
|
|
|
#include <string.h>
|
2000-12-02 21:11:42 +01:00
|
|
|
|
2000-02-10 20:03:02 +01:00
|
|
|
#include "windef.h"
|
2000-12-03 00:42:13 +01:00
|
|
|
#include "winbase.h"
|
2012-09-27 18:13:01 +02:00
|
|
|
#include "wingdi.h"
|
2000-12-11 00:01:33 +01:00
|
|
|
#include "controls.h"
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
#include "win.h"
|
2004-12-08 19:06:14 +01:00
|
|
|
#include "user_private.h"
|
2004-01-27 21:28:42 +01:00
|
|
|
#include "wine/unicode.h"
|
2019-05-14 12:30:46 +02:00
|
|
|
#include "wine/asm.h"
|
2004-01-27 21:28:42 +01:00
|
|
|
#include "wine/debug.h"
|
1996-05-21 17:01:41 +02:00
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DECLARE_DEBUG_CHANNEL(msg);
|
|
|
|
WINE_DECLARE_DEBUG_CHANNEL(relay);
|
2003-07-10 00:31:34 +02:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(win);
|
1999-04-19 16:56:29 +02:00
|
|
|
|
1996-07-05 19:14:13 +02:00
|
|
|
typedef struct tagWINDOWPROC
|
|
|
|
{
|
2006-05-17 13:55:36 +02:00
|
|
|
WNDPROC procA; /* ASCII window proc */
|
|
|
|
WNDPROC procW; /* Unicode window proc */
|
1996-05-21 17:01:41 +02:00
|
|
|
} WINDOWPROC;
|
|
|
|
|
2009-12-15 20:11:16 +01:00
|
|
|
#define MAX_WINPROCS 4096
|
2008-08-27 13:07:30 +02:00
|
|
|
#define MAX_WINPROC_RECURSION 64
|
2009-12-15 20:11:16 +01:00
|
|
|
#define WINPROC_PROC16 ((WINDOWPROC *)1) /* placeholder for 16-bit window procs */
|
1996-07-05 19:14:13 +02:00
|
|
|
|
2009-12-17 12:56:50 +01:00
|
|
|
static LRESULT WINAPI ButtonWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI ButtonWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 12:57:22 +01:00
|
|
|
static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 12:57:40 +01:00
|
|
|
LRESULT WINAPI EditWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI EditWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 12:58:45 +01:00
|
|
|
static LRESULT WINAPI ListBoxWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI ListBoxWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 13:01:11 +01:00
|
|
|
static LRESULT WINAPI MDIClientWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI MDIClientWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 12:59:40 +01:00
|
|
|
static LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI ScrollBarWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 13:00:04 +01:00
|
|
|
static LRESULT WINAPI StaticWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
|
|
|
static LRESULT WINAPI StaticWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
|
2009-12-17 12:56:50 +01:00
|
|
|
|
|
|
|
static WINDOWPROC winproc_array[MAX_WINPROCS] =
|
|
|
|
{
|
2009-12-17 12:59:40 +01:00
|
|
|
{ ButtonWndProcA, ButtonWndProcW }, /* WINPROC_BUTTON */
|
|
|
|
{ ComboWndProcA, ComboWndProcW }, /* WINPROC_COMBO */
|
2009-12-17 13:01:42 +01:00
|
|
|
{ DefWindowProcA, DefWindowProcW }, /* WINPROC_DEFWND */
|
2009-12-17 13:00:23 +01:00
|
|
|
{ DefDlgProcA, DefDlgProcW }, /* WINPROC_DIALOG */
|
2009-12-17 12:59:40 +01:00
|
|
|
{ EditWndProcA, EditWndProcW }, /* WINPROC_EDIT */
|
|
|
|
{ ListBoxWndProcA, ListBoxWndProcW }, /* WINPROC_LISTBOX */
|
2009-12-17 13:01:11 +01:00
|
|
|
{ MDIClientWndProcA, MDIClientWndProcW }, /* WINPROC_MDICLIENT */
|
2009-12-17 12:59:40 +01:00
|
|
|
{ ScrollBarWndProcA, ScrollBarWndProcW }, /* WINPROC_SCROLLBAR */
|
2009-12-17 13:00:04 +01:00
|
|
|
{ StaticWndProcA, StaticWndProcW }, /* WINPROC_STATIC */
|
2014-11-10 13:46:18 +01:00
|
|
|
{ ImeWndProcA, ImeWndProcW }, /* WINPROC_IME */
|
2009-12-18 12:36:26 +01:00
|
|
|
{ NULL, DesktopWndProc }, /* WINPROC_DESKTOP */
|
2009-12-18 12:37:05 +01:00
|
|
|
{ NULL, IconTitleWndProc }, /* WINPROC_ICONTITLE */
|
2009-12-18 12:37:58 +01:00
|
|
|
{ NULL, PopupMenuWndProc }, /* WINPROC_MENU */
|
2009-12-18 12:38:22 +01:00
|
|
|
{ NULL, MessageWndProc }, /* WINPROC_MESSAGE */
|
2009-12-17 12:56:50 +01:00
|
|
|
};
|
|
|
|
|
2009-12-17 13:01:42 +01:00
|
|
|
static UINT winproc_used = NB_BUILTIN_WINPROCS;
|
2003-08-13 01:50:54 +02:00
|
|
|
|
|
|
|
static CRITICAL_SECTION winproc_cs;
|
|
|
|
static CRITICAL_SECTION_DEBUG critsect_debug =
|
|
|
|
{
|
|
|
|
0, 0, &winproc_cs,
|
|
|
|
{ &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
|
2005-09-09 12:19:44 +02:00
|
|
|
0, 0, { (DWORD_PTR)(__FILE__ ": winproc_cs") }
|
2003-08-13 01:50:54 +02:00
|
|
|
};
|
|
|
|
static CRITICAL_SECTION winproc_cs = { &critsect_debug, -1, 0, 0, 0, 0 };
|
1997-05-09 10:40:27 +02:00
|
|
|
|
2006-05-20 18:48:04 +02:00
|
|
|
static inline void *get_buffer( void *static_buffer, size_t size, size_t need )
|
|
|
|
{
|
|
|
|
if (size >= need) return static_buffer;
|
|
|
|
return HeapAlloc( GetProcessHeap(), 0, need );
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void free_buffer( void *static_buffer, void *buffer )
|
|
|
|
{
|
|
|
|
if (buffer != static_buffer) HeapFree( GetProcessHeap(), 0, buffer );
|
|
|
|
}
|
|
|
|
|
2006-05-09 19:55:05 +02:00
|
|
|
/* find an existing winproc for a given function and type */
|
|
|
|
/* FIXME: probably should do something more clever than a linear search */
|
2009-12-18 12:41:59 +01:00
|
|
|
static inline WINDOWPROC *find_winproc( WNDPROC func, BOOL unicode )
|
2006-05-09 19:55:05 +02:00
|
|
|
{
|
|
|
|
unsigned int i;
|
|
|
|
|
2009-12-18 12:36:26 +01:00
|
|
|
for (i = 0; i < NB_BUILTIN_AW_WINPROCS; i++)
|
2004-11-24 19:43:18 +01:00
|
|
|
{
|
2007-07-12 15:45:00 +02:00
|
|
|
/* match either proc, some apps confuse A and W */
|
2009-12-18 12:41:59 +01:00
|
|
|
if (winproc_array[i].procA != func && winproc_array[i].procW != func) continue;
|
2006-05-17 13:55:36 +02:00
|
|
|
return &winproc_array[i];
|
2004-11-24 19:43:18 +01:00
|
|
|
}
|
2009-12-18 12:36:26 +01:00
|
|
|
for (i = NB_BUILTIN_AW_WINPROCS; i < winproc_used; i++)
|
2007-08-02 17:08:48 +02:00
|
|
|
{
|
2009-12-18 12:41:59 +01:00
|
|
|
if (!unicode && winproc_array[i].procA != func) continue;
|
|
|
|
if (unicode && winproc_array[i].procW != func) continue;
|
2007-08-02 17:08:48 +02:00
|
|
|
return &winproc_array[i];
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2009-12-15 20:11:16 +01:00
|
|
|
/* return the window proc for a given handle, or NULL for an invalid handle,
|
|
|
|
* or WINPROC_PROC16 for a handle to a 16-bit proc. */
|
2006-05-09 20:24:19 +02:00
|
|
|
static inline WINDOWPROC *handle_to_proc( WNDPROC handle )
|
|
|
|
{
|
|
|
|
UINT index = LOWORD(handle);
|
|
|
|
if ((ULONG_PTR)handle >> 16 != WINPROC_HANDLE) return NULL;
|
2009-12-15 20:11:16 +01:00
|
|
|
if (index >= MAX_WINPROCS) return WINPROC_PROC16;
|
2006-05-09 20:24:19 +02:00
|
|
|
if (index >= winproc_used) return NULL;
|
|
|
|
return &winproc_array[index];
|
|
|
|
}
|
|
|
|
|
|
|
|
/* create a handle for a given window proc */
|
|
|
|
static inline WNDPROC proc_to_handle( WINDOWPROC *proc )
|
|
|
|
{
|
|
|
|
return (WNDPROC)(ULONG_PTR)((proc - winproc_array) | (WINPROC_HANDLE << 16));
|
|
|
|
}
|
|
|
|
|
2006-05-10 16:55:55 +02:00
|
|
|
/* allocate and initialize a new winproc */
|
2009-12-18 12:41:59 +01:00
|
|
|
static inline WINDOWPROC *alloc_winproc( WNDPROC func, BOOL unicode )
|
2006-05-10 16:55:55 +02:00
|
|
|
{
|
|
|
|
WINDOWPROC *proc;
|
|
|
|
|
|
|
|
/* check if the function is already a win proc */
|
2009-12-18 12:41:59 +01:00
|
|
|
if (!func) return NULL;
|
|
|
|
if ((proc = handle_to_proc( func ))) return proc;
|
2006-05-10 16:55:55 +02:00
|
|
|
|
|
|
|
EnterCriticalSection( &winproc_cs );
|
|
|
|
|
|
|
|
/* check if we already have a winproc for that function */
|
2009-12-18 12:41:59 +01:00
|
|
|
if (!(proc = find_winproc( func, unicode )))
|
2006-05-10 16:55:55 +02:00
|
|
|
{
|
2009-12-17 13:01:42 +01:00
|
|
|
if (winproc_used < MAX_WINPROCS)
|
2006-05-10 16:55:55 +02:00
|
|
|
{
|
2006-05-17 13:55:36 +02:00
|
|
|
proc = &winproc_array[winproc_used++];
|
2009-12-18 12:41:59 +01:00
|
|
|
if (unicode) proc->procW = func;
|
|
|
|
else proc->procA = func;
|
2007-08-02 17:08:48 +02:00
|
|
|
TRACE( "allocated %p for %c %p (%d/%d used)\n",
|
2009-12-18 12:41:59 +01:00
|
|
|
proc_to_handle(proc), unicode ? 'W' : 'A', func,
|
2007-08-02 17:08:48 +02:00
|
|
|
winproc_used, MAX_WINPROCS );
|
2006-05-10 16:55:55 +02:00
|
|
|
}
|
2016-03-09 13:51:21 +01:00
|
|
|
else WARN( "too many winprocs, cannot allocate one for %p\n", func );
|
2006-05-10 16:55:55 +02:00
|
|
|
}
|
2009-12-18 12:41:59 +01:00
|
|
|
else TRACE( "reusing %p for %p\n", proc_to_handle(proc), func );
|
2006-05-10 16:55:55 +02:00
|
|
|
|
|
|
|
LeaveCriticalSection( &winproc_cs );
|
|
|
|
return proc;
|
|
|
|
}
|
|
|
|
|
2000-07-16 22:29:44 +02:00
|
|
|
#ifdef __i386__
|
|
|
|
/* Some window procedures modify register they shouldn't, or are not
|
|
|
|
* properly declared stdcall; so we need a small assembly wrapper to
|
|
|
|
* call them. */
|
|
|
|
extern LRESULT WINPROC_wrapper( WNDPROC proc, HWND hwnd, UINT msg,
|
|
|
|
WPARAM wParam, LPARAM lParam );
|
|
|
|
__ASM_GLOBAL_FUNC( WINPROC_wrapper,
|
|
|
|
"pushl %ebp\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
|
|
|
|
__ASM_CFI(".cfi_rel_offset %ebp,0\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"movl %esp,%ebp\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_def_cfa_register %ebp\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"pushl %edi\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_rel_offset %edi,-4\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"pushl %esi\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_rel_offset %esi,-8\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"pushl %ebx\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_rel_offset %ebx,-12\n\t")
|
2018-12-28 18:19:48 +01:00
|
|
|
/* TreePad X Enterprise assumes that edi is < 0x80000000 in WM_TIMER messages */
|
|
|
|
"xorl %edi,%edi\n\t"
|
2005-11-23 19:55:06 +01:00
|
|
|
"subl $12,%esp\n\t"
|
2000-07-16 22:29:44 +02:00
|
|
|
"pushl 24(%ebp)\n\t"
|
|
|
|
"pushl 20(%ebp)\n\t"
|
|
|
|
"pushl 16(%ebp)\n\t"
|
|
|
|
"pushl 12(%ebp)\n\t"
|
|
|
|
"movl 8(%ebp),%eax\n\t"
|
|
|
|
"call *%eax\n\t"
|
|
|
|
"leal -12(%ebp),%esp\n\t"
|
|
|
|
"popl %ebx\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_same_value %ebx\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"popl %esi\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_same_value %esi\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"popl %edi\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_same_value %edi\n\t")
|
2000-07-16 22:29:44 +02:00
|
|
|
"leave\n\t"
|
2009-06-25 11:51:52 +02:00
|
|
|
__ASM_CFI(".cfi_def_cfa %esp,4\n\t")
|
|
|
|
__ASM_CFI(".cfi_same_value %ebp\n\t")
|
2007-01-13 00:38:07 +01:00
|
|
|
"ret" )
|
2000-07-16 22:29:44 +02:00
|
|
|
#else
|
|
|
|
static inline LRESULT WINPROC_wrapper( WNDPROC proc, HWND hwnd, UINT msg,
|
|
|
|
WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return proc( hwnd, msg, wParam, lParam );
|
|
|
|
}
|
|
|
|
#endif /* __i386__ */
|
|
|
|
|
2006-05-18 16:31:36 +02:00
|
|
|
static WPARAM map_wparam_char_WtoA( WPARAM wParam, DWORD len )
|
|
|
|
{
|
|
|
|
WCHAR wch = wParam;
|
|
|
|
BYTE ch[2];
|
2013-05-21 13:51:21 +02:00
|
|
|
DWORD cp = get_input_codepage();
|
2006-05-18 16:31:36 +02:00
|
|
|
|
2013-05-21 13:51:21 +02:00
|
|
|
len = WideCharToMultiByte( cp, 0, &wch, 1, (LPSTR)ch, len, NULL, NULL );
|
2006-05-18 16:31:36 +02:00
|
|
|
if (len == 2)
|
|
|
|
return MAKEWPARAM( (ch[0] << 8) | ch[1], HIWORD(wParam) );
|
|
|
|
else
|
|
|
|
return MAKEWPARAM( ch[0], HIWORD(wParam) );
|
|
|
|
}
|
|
|
|
|
2006-05-18 18:05:01 +02:00
|
|
|
/* call a 32-bit window procedure */
|
|
|
|
static LRESULT call_window_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg )
|
|
|
|
{
|
2018-05-02 17:33:19 +02:00
|
|
|
DPI_AWARENESS_CONTEXT context;
|
2006-05-18 18:05:01 +02:00
|
|
|
WNDPROC proc = arg;
|
|
|
|
|
|
|
|
USER_CheckNotLock();
|
|
|
|
|
|
|
|
hwnd = WIN_GetFullHandle( hwnd );
|
2017-11-25 11:48:02 +01:00
|
|
|
TRACE_(relay)( "\1Call window proc %p (hwnd=%p,msg=%s,wp=%08lx,lp=%08lx)\n",
|
|
|
|
proc, hwnd, SPY_GetMsgName(msg, hwnd), wp, lp );
|
2006-05-18 18:05:01 +02:00
|
|
|
|
2018-05-02 17:33:19 +02:00
|
|
|
context = SetThreadDpiAwarenessContext( GetWindowDpiAwarenessContext( hwnd ));
|
2006-05-18 18:05:01 +02:00
|
|
|
*result = WINPROC_wrapper( proc, hwnd, msg, wp, lp );
|
2018-05-02 17:33:19 +02:00
|
|
|
SetThreadDpiAwarenessContext( context );
|
2006-05-18 18:05:01 +02:00
|
|
|
|
2017-11-25 11:48:02 +01:00
|
|
|
TRACE_(relay)( "\1Ret window proc %p (hwnd=%p,msg=%s,wp=%08lx,lp=%08lx) retval=%08lx\n",
|
|
|
|
proc, hwnd, SPY_GetMsgName(msg, hwnd), wp, lp, *result );
|
2006-05-18 18:05:01 +02:00
|
|
|
return *result;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* call a 32-bit dialog procedure */
|
|
|
|
static LRESULT call_dialog_proc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, LRESULT *result, void *arg )
|
|
|
|
{
|
2018-05-02 17:33:19 +02:00
|
|
|
DPI_AWARENESS_CONTEXT context;
|
2006-05-18 18:05:01 +02:00
|
|
|
WNDPROC proc = arg;
|
|
|
|
LRESULT ret;
|
|
|
|
|
|
|
|
USER_CheckNotLock();
|
|
|
|
|
|
|
|
hwnd = WIN_GetFullHandle( hwnd );
|
2017-11-25 11:48:02 +01:00
|
|
|
TRACE_(relay)( "\1Call dialog proc %p (hwnd=%p,msg=%s,wp=%08lx,lp=%08lx)\n",
|
|
|
|
proc, hwnd, SPY_GetMsgName(msg, hwnd), wp, lp );
|
2006-05-18 18:05:01 +02:00
|
|
|
|
2018-05-02 17:33:19 +02:00
|
|
|
context = SetThreadDpiAwarenessContext( GetWindowDpiAwarenessContext( hwnd ));
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = WINPROC_wrapper( proc, hwnd, msg, wp, lp );
|
|
|
|
*result = GetWindowLongPtrW( hwnd, DWLP_MSGRESULT );
|
2018-05-02 17:33:19 +02:00
|
|
|
SetThreadDpiAwarenessContext( context );
|
2006-05-18 18:05:01 +02:00
|
|
|
|
2017-11-25 11:48:02 +01:00
|
|
|
TRACE_(relay)( "\1Ret dialog proc %p (hwnd=%p,msg=%s,wp=%08lx,lp=%08lx) retval=%08lx result=%08lx\n",
|
|
|
|
proc, hwnd, SPY_GetMsgName(msg, hwnd), wp, lp, ret, *result );
|
2006-05-18 18:05:01 +02:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
1997-05-09 10:40:27 +02:00
|
|
|
|
1996-05-21 17:01:41 +02:00
|
|
|
/**********************************************************************
|
1996-07-05 19:14:13 +02:00
|
|
|
* WINPROC_GetProc
|
1996-05-21 17:01:41 +02:00
|
|
|
*
|
1996-07-05 19:14:13 +02:00
|
|
|
* Get a window procedure pointer that can be passed to the Windows program.
|
1996-05-21 17:01:41 +02:00
|
|
|
*/
|
2006-05-10 13:20:34 +02:00
|
|
|
WNDPROC WINPROC_GetProc( WNDPROC proc, BOOL unicode )
|
1996-05-21 17:01:41 +02:00
|
|
|
{
|
2006-05-09 20:24:19 +02:00
|
|
|
WINDOWPROC *ptr = handle_to_proc( proc );
|
2001-12-05 23:23:02 +01:00
|
|
|
|
2009-12-15 20:11:16 +01:00
|
|
|
if (!ptr || ptr == WINPROC_PROC16) return proc;
|
2006-05-17 13:55:36 +02:00
|
|
|
if (unicode)
|
|
|
|
{
|
|
|
|
if (ptr->procW) return ptr->procW;
|
|
|
|
return proc;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (ptr->procA) return ptr->procA;
|
|
|
|
return proc;
|
|
|
|
}
|
1996-05-21 17:01:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
2004-11-24 19:43:18 +01:00
|
|
|
* WINPROC_AllocProc
|
1997-03-29 18:20:20 +01:00
|
|
|
*
|
2004-11-24 19:43:18 +01:00
|
|
|
* Allocate a window procedure for a window or class.
|
1997-03-29 18:20:20 +01:00
|
|
|
*
|
2004-11-24 19:43:18 +01:00
|
|
|
* Note that allocated winprocs are never freed; the idea is that even if an app creates a
|
|
|
|
* lot of windows, it will usually only have a limited number of window procedures, so the
|
|
|
|
* array won't grow too large, and this way we avoid the need to track allocations per window.
|
1996-05-21 17:01:41 +02:00
|
|
|
*/
|
2009-12-18 12:41:59 +01:00
|
|
|
WNDPROC WINPROC_AllocProc( WNDPROC func, BOOL unicode )
|
1996-05-21 17:01:41 +02:00
|
|
|
{
|
2004-11-24 19:43:18 +01:00
|
|
|
WINDOWPROC *proc;
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
|
2016-03-09 13:51:21 +01:00
|
|
|
if (!(proc = alloc_winproc( func, unicode ))) return func;
|
2009-12-18 12:41:59 +01:00
|
|
|
if (proc == WINPROC_PROC16) return func;
|
2006-05-09 20:24:19 +02:00
|
|
|
return proc_to_handle( proc );
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
2006-05-10 13:27:21 +02:00
|
|
|
* WINPROC_IsUnicode
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
*
|
2006-05-10 13:27:21 +02:00
|
|
|
* Return the window procedure type, or the default value if not a winproc handle.
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
*/
|
2006-05-10 13:27:21 +02:00
|
|
|
BOOL WINPROC_IsUnicode( WNDPROC proc, BOOL def_val )
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
{
|
2006-05-09 20:24:19 +02:00
|
|
|
WINDOWPROC *ptr = handle_to_proc( proc );
|
|
|
|
|
2006-05-10 13:27:21 +02:00
|
|
|
if (!ptr) return def_val;
|
2009-12-15 20:11:16 +01:00
|
|
|
if (ptr == WINPROC_PROC16) return FALSE; /* 16-bit is always A */
|
2006-05-17 13:55:36 +02:00
|
|
|
if (ptr->procA && ptr->procW) return def_val; /* can be both */
|
|
|
|
return (ptr->procW != NULL);
|
Release 960606
Wed Jun 5 20:13:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/button.c] [controls/listbox.c]
Fixed wParam of WM_DRAWITEM message.
* [if1632/Makefile.in] [loader/builtin.c]
Remove WPROCS32 DLL, as the relay code can call Wine routines
directly.
* [loader/module.c] [loader/ne_image.c]
Fixed initial stack layout for self-loading modules.
* [tools/build.c]
Fixed data segment building for Win16 modules.
* [windows/defdlg.c]
Implemented Win32 versions of DefDlgProc().
* [windows/dialog.c]
Merged Win16 and Win32 dialog code.
Added support for control extra data in dialog item template.
* [windows/win.c]
Unified Win16 and Win32 versions of CreateWindow().
Implemented Win32 version of GetWindowLong().
* [windows/winproc.c]
Changed the implementation of window procedures, so that 16-bit
winprocs are valid segmented pointers.
Sun Jun 2 16:39:46 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [misc/registry.c]
Fixed another bug in the w95 loader. Quietened some debug output.
Sun Jun 2 10:00:22 1996 Ulrich Schmid <uschmid@mail.hh.provi.de>
* [windows/winproc.c]
Bug fix: WM_PARENTNOTIFY: don't fall through to WM_SETTEXT.
Sat Jun 1 12:37:22 1996 Tristan Tarrant <tst@sthinc.demon.co.uk>
* [resources/TODO] [resources/sysres_It.rc]
Updated font dialog box.
Thu May 30 21:05:19 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/commdlg.h] [misc/commdlg.c]
ChooseFont() and ChooseColor():
Bugfixes and added more support for some CF_* and CC_* flags:
dialog templates and font size control.
Bugfix in structure definition of CHOOSECOLOR definition.
* [ipc/dde_proc.c] [windows/event.c]
Replaced SendMessage with SendMessage16 and added inclusion of
dde_proc.h for error-free compilation of ipc module.
Thu May 30 19:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Made ScrollDC to save/restore current clipping region.
* [misc/clipboard.c] [windows/event.c]
Implemented most of the previously missing features (not tested),
improved text pasting from/to X.
* [if1632/user.spec] [if1632/gdi.spec] [objects/dc.c]
[objects/gdiobj.c] [objects/clipping.c] [windows/dce.c]
[windows/winpos.c] [windows/painting.c]
Updated DCE code, implemented dynamic invalidation of owned DCs.
This fixes a lot of problems with scrolling in WinWord. Not
sure about the effect on -desktop.
Wed May 29 23:35:44 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [win32/time.c] [if1632/kernel32.spec]
Added SetSystemTime and SetTimeZoneInformation.
* [if1632/kernel32.spec]
Added lstrcat, lstrcatA, lstrcmp, lstrcmpA, lstrcpy, lstrlen.
* [include/windows.h]
Added SYSTEM_POWER_STATUS structure and prototypes for
GetSystemPowerStatus, SetSystemPowerState, SetSystemTime.
* [include/kernel32.h]
Added a prototype for SetTimeZoneInformation.
* [win32/environment.c] [if1632/kernel32.spec]
Added GetSystemPowerStatus and SetSystemPowerState stubs.
1996-06-06 20:38:27 +02:00
|
|
|
}
|
2006-05-09 20:24:19 +02:00
|
|
|
|
|
|
|
|
1998-11-08 17:28:49 +01:00
|
|
|
/**********************************************************************
|
|
|
|
* WINPROC_TestLBForStr
|
|
|
|
*
|
|
|
|
* Return TRUE if the lparam is a string
|
|
|
|
*/
|
2007-03-17 11:34:08 +01:00
|
|
|
static inline BOOL WINPROC_TestLBForStr( HWND hwnd, UINT msg )
|
1999-03-14 18:25:32 +01:00
|
|
|
{
|
2001-08-29 02:16:00 +02:00
|
|
|
DWORD style = GetWindowLongA( hwnd, GWL_STYLE );
|
2006-05-18 12:43:40 +02:00
|
|
|
if (msg <= CB_MSGMAX)
|
|
|
|
return (!(style & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE)) || (style & CBS_HASSTRINGS));
|
|
|
|
else
|
|
|
|
return (!(style & (LBS_OWNERDRAWFIXED | LBS_OWNERDRAWVARIABLE)) || (style & LBS_HASSTRINGS));
|
1999-03-14 18:25:32 +01:00
|
|
|
|
1998-11-08 17:28:49 +01:00
|
|
|
}
|
1996-05-21 17:01:41 +02:00
|
|
|
|
1996-07-05 19:14:13 +02:00
|
|
|
|
|
|
|
/**********************************************************************
|
2006-05-18 19:09:32 +02:00
|
|
|
* WINPROC_CallProcAtoW
|
1996-07-05 19:14:13 +02:00
|
|
|
*
|
|
|
|
* Call a window procedure, translating args from Ansi to Unicode.
|
|
|
|
*/
|
2006-05-18 19:47:40 +02:00
|
|
|
LRESULT WINPROC_CallProcAtoW( winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam,
|
2007-08-08 18:25:38 +02:00
|
|
|
LPARAM lParam, LRESULT *result, void *arg, enum wm_char_mapping mapping )
|
1996-07-05 19:14:13 +02:00
|
|
|
{
|
2006-05-20 18:48:04 +02:00
|
|
|
LRESULT ret = 0;
|
1996-07-05 19:14:13 +02:00
|
|
|
|
2007-05-24 16:41:17 +02:00
|
|
|
TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08lx,lp=%08lx)\n",
|
2006-05-18 19:09:32 +02:00
|
|
|
hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam);
|
2002-04-02 04:53:08 +02:00
|
|
|
|
2006-05-20 18:48:04 +02:00
|
|
|
switch(msg)
|
|
|
|
{
|
|
|
|
case WM_NCCREATE:
|
|
|
|
case WM_CREATE:
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
CREATESTRUCTA *csA = (CREATESTRUCTA *)lParam;
|
|
|
|
CREATESTRUCTW csW = *(CREATESTRUCTW *)csA;
|
|
|
|
MDICREATESTRUCTW mdi_cs;
|
|
|
|
DWORD name_lenA = 0, name_lenW = 0, class_lenA = 0, class_lenW = 0;
|
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csA->lpszClass))
|
2006-05-20 18:48:04 +02:00
|
|
|
{
|
|
|
|
class_lenA = strlen(csA->lpszClass) + 1;
|
|
|
|
RtlMultiByteToUnicodeSize( &class_lenW, csA->lpszClass, class_lenA );
|
|
|
|
}
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csA->lpszName))
|
2006-05-20 18:48:04 +02:00
|
|
|
{
|
|
|
|
name_lenA = strlen(csA->lpszName) + 1;
|
|
|
|
RtlMultiByteToUnicodeSize( &name_lenW, csA->lpszName, name_lenA );
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), class_lenW + name_lenW ))) break;
|
|
|
|
|
|
|
|
if (class_lenW)
|
|
|
|
{
|
|
|
|
csW.lpszClass = ptr;
|
|
|
|
RtlMultiByteToUnicodeN( ptr, class_lenW, NULL, csA->lpszClass, class_lenA );
|
|
|
|
}
|
|
|
|
if (name_lenW)
|
|
|
|
{
|
|
|
|
csW.lpszName = ptr + class_lenW/sizeof(WCHAR);
|
|
|
|
RtlMultiByteToUnicodeN( ptr + class_lenW/sizeof(WCHAR), name_lenW, NULL,
|
|
|
|
csA->lpszName, name_lenA );
|
|
|
|
}
|
|
|
|
|
|
|
|
if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
|
|
|
|
{
|
|
|
|
mdi_cs = *(MDICREATESTRUCTW *)csA->lpCreateParams;
|
|
|
|
mdi_cs.szTitle = csW.lpszName;
|
|
|
|
mdi_cs.szClass = csW.lpszClass;
|
|
|
|
csW.lpCreateParams = &mdi_cs;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&csW, result, arg );
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
2006-05-20 18:49:40 +02:00
|
|
|
|
|
|
|
case WM_MDICREATE:
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
DWORD title_lenA = 0, title_lenW = 0, class_lenA = 0, class_lenW = 0;
|
|
|
|
MDICREATESTRUCTA *csA = (MDICREATESTRUCTA *)lParam;
|
|
|
|
MDICREATESTRUCTW csW;
|
|
|
|
|
|
|
|
memcpy( &csW, csA, sizeof(csW) );
|
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csA->szTitle))
|
2006-05-20 18:49:40 +02:00
|
|
|
{
|
|
|
|
title_lenA = strlen(csA->szTitle) + 1;
|
|
|
|
RtlMultiByteToUnicodeSize( &title_lenW, csA->szTitle, title_lenA );
|
|
|
|
}
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csA->szClass))
|
2006-05-20 18:49:40 +02:00
|
|
|
{
|
|
|
|
class_lenA = strlen(csA->szClass) + 1;
|
|
|
|
RtlMultiByteToUnicodeSize( &class_lenW, csA->szClass, class_lenA );
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), title_lenW + class_lenW ))) break;
|
|
|
|
|
|
|
|
if (title_lenW)
|
|
|
|
{
|
|
|
|
csW.szTitle = ptr;
|
|
|
|
RtlMultiByteToUnicodeN( ptr, title_lenW, NULL, csA->szTitle, title_lenA );
|
|
|
|
}
|
|
|
|
if (class_lenW)
|
|
|
|
{
|
|
|
|
csW.szClass = ptr + title_lenW/sizeof(WCHAR);
|
|
|
|
RtlMultiByteToUnicodeN( ptr + title_lenW/sizeof(WCHAR), class_lenW, NULL,
|
|
|
|
csA->szClass, class_lenA );
|
|
|
|
}
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&csW, result, arg );
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
2006-05-20 18:53:16 +02:00
|
|
|
|
|
|
|
case WM_GETTEXT:
|
|
|
|
case WM_ASKCBFORMATNAME:
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
LPSTR str = (LPSTR)lParam;
|
|
|
|
DWORD len = wParam * sizeof(WCHAR);
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), len ))) break;
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
2007-03-22 12:08:21 +01:00
|
|
|
if (wParam)
|
2006-05-20 18:53:16 +02:00
|
|
|
{
|
2007-03-22 12:08:21 +01:00
|
|
|
len = 0;
|
|
|
|
if (*result)
|
2017-11-04 23:48:11 +01:00
|
|
|
RtlUnicodeToMultiByteN( str, wParam - 1, &len, ptr, ret * sizeof(WCHAR) );
|
2006-05-20 18:53:16 +02:00
|
|
|
str[len] = 0;
|
|
|
|
*result = len;
|
|
|
|
}
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
2006-05-20 18:54:25 +02:00
|
|
|
|
|
|
|
case LB_ADDSTRING:
|
|
|
|
case LB_INSERTSTRING:
|
|
|
|
case LB_FINDSTRING:
|
|
|
|
case LB_FINDSTRINGEXACT:
|
|
|
|
case LB_SELECTSTRING:
|
|
|
|
case CB_ADDSTRING:
|
|
|
|
case CB_INSERTSTRING:
|
|
|
|
case CB_FINDSTRING:
|
|
|
|
case CB_FINDSTRINGEXACT:
|
|
|
|
case CB_SELECTSTRING:
|
|
|
|
if (!lParam || !WINPROC_TestLBForStr( hwnd, msg ))
|
|
|
|
{
|
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
/* fall through */
|
|
|
|
case WM_SETTEXT:
|
|
|
|
case WM_WININICHANGE:
|
|
|
|
case WM_DEVMODECHANGE:
|
|
|
|
case CB_DIR:
|
|
|
|
case LB_DIR:
|
|
|
|
case LB_ADDFILE:
|
|
|
|
case EM_REPLACESEL:
|
|
|
|
if (!lParam) ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
else
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
LPCSTR strA = (LPCSTR)lParam;
|
|
|
|
DWORD lenW, lenA = strlen(strA) + 1;
|
|
|
|
|
|
|
|
RtlMultiByteToUnicodeSize( &lenW, strA, lenA );
|
|
|
|
if ((ptr = get_buffer( buffer, sizeof(buffer), lenW )))
|
|
|
|
{
|
|
|
|
RtlMultiByteToUnicodeN( ptr, lenW, NULL, strA, lenA );
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
2006-05-20 18:55:34 +02:00
|
|
|
|
|
|
|
case LB_GETTEXT:
|
|
|
|
case CB_GETLBTEXT:
|
|
|
|
if (lParam && WINPROC_TestLBForStr( hwnd, msg ))
|
|
|
|
{
|
|
|
|
WCHAR buffer[512]; /* FIXME: fixed sized buffer */
|
|
|
|
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)buffer, result, arg );
|
|
|
|
if (*result >= 0)
|
|
|
|
{
|
|
|
|
DWORD len;
|
|
|
|
RtlUnicodeToMultiByteN( (LPSTR)lParam, ~0u, &len,
|
|
|
|
buffer, (strlenW(buffer) + 1) * sizeof(WCHAR) );
|
|
|
|
*result = len - 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
break;
|
2006-05-20 18:48:04 +02:00
|
|
|
|
2006-05-20 18:57:11 +02:00
|
|
|
case EM_GETLINE:
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
WORD len = *(WORD *)lParam;
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), len * sizeof(WCHAR) ))) break;
|
|
|
|
*((WORD *)ptr) = len; /* store the length */
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
|
|
|
if (*result)
|
|
|
|
{
|
|
|
|
DWORD reslen;
|
|
|
|
RtlUnicodeToMultiByteN( (LPSTR)lParam, len, &reslen, ptr, *result * sizeof(WCHAR) );
|
|
|
|
if (reslen < len) ((LPSTR)lParam)[reslen] = 0;
|
|
|
|
*result = reslen;
|
|
|
|
}
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
2006-05-20 18:57:36 +02:00
|
|
|
break;
|
|
|
|
|
2006-05-22 12:29:02 +02:00
|
|
|
case WM_GETDLGCODE:
|
|
|
|
if (lParam)
|
|
|
|
{
|
|
|
|
MSG newmsg = *(MSG *)lParam;
|
2007-08-08 18:25:38 +02:00
|
|
|
if (map_wparam_AtoW( newmsg.message, &newmsg.wParam, WMCHAR_MAP_NOMAPPING ))
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&newmsg, result, arg );
|
2006-05-22 12:29:02 +02:00
|
|
|
}
|
|
|
|
else ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
break;
|
|
|
|
|
2006-05-20 18:57:36 +02:00
|
|
|
case WM_CHARTOITEM:
|
|
|
|
case WM_MENUCHAR:
|
|
|
|
case WM_CHAR:
|
|
|
|
case WM_DEADCHAR:
|
|
|
|
case WM_SYSCHAR:
|
|
|
|
case WM_SYSDEADCHAR:
|
|
|
|
case EM_SETPASSWORDCHAR:
|
|
|
|
case WM_IME_CHAR:
|
2007-08-08 18:25:38 +02:00
|
|
|
if (map_wparam_AtoW( msg, &wParam, mapping ))
|
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
2006-05-20 19:58:38 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case WM_GETTEXTLENGTH:
|
|
|
|
case CB_GETLBTEXTLEN:
|
|
|
|
case LB_GETTEXTLEN:
|
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
if (*result >= 0)
|
|
|
|
{
|
|
|
|
WCHAR *ptr, buffer[512];
|
|
|
|
LRESULT tmp;
|
|
|
|
DWORD len = *result + 1;
|
|
|
|
/* Determine respective GETTEXT message */
|
|
|
|
UINT msgGetText = (msg == WM_GETTEXTLENGTH) ? WM_GETTEXT :
|
|
|
|
((msg == CB_GETLBTEXTLEN) ? CB_GETLBTEXT : LB_GETTEXT);
|
|
|
|
/* wParam differs between the messages */
|
|
|
|
WPARAM wp = (msg == WM_GETTEXTLENGTH) ? len : wParam;
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), len * sizeof(WCHAR) ))) break;
|
|
|
|
|
|
|
|
if (callback == call_window_proc) /* FIXME: hack */
|
|
|
|
callback( hwnd, msgGetText, wp, (LPARAM)ptr, &tmp, arg );
|
|
|
|
else
|
|
|
|
tmp = SendMessageW( hwnd, msgGetText, wp, (LPARAM)ptr );
|
|
|
|
RtlUnicodeToMultiByteSize( &len, ptr, tmp * sizeof(WCHAR) );
|
|
|
|
*result = len;
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
2006-05-20 18:57:11 +02:00
|
|
|
break;
|
|
|
|
|
2006-05-20 19:59:19 +02:00
|
|
|
case WM_PAINTCLIPBOARD:
|
|
|
|
case WM_SIZECLIPBOARD:
|
|
|
|
FIXME_(msg)( "message %s (0x%x) needs translation, please report\n",
|
|
|
|
SPY_GetMsgName(msg, hwnd), msg );
|
|
|
|
break;
|
|
|
|
|
2006-05-20 18:48:04 +02:00
|
|
|
default:
|
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
break;
|
|
|
|
}
|
2006-05-17 20:53:51 +02:00
|
|
|
return ret;
|
1996-07-05 19:14:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-02-20 06:14:48 +01:00
|
|
|
/**********************************************************************
|
2006-05-18 18:05:01 +02:00
|
|
|
* WINPROC_CallProcWtoA
|
2004-02-20 06:14:48 +01:00
|
|
|
*
|
2006-05-18 11:02:28 +02:00
|
|
|
* Call a window procedure, translating args from Unicode to Ansi.
|
2004-02-20 06:14:48 +01:00
|
|
|
*/
|
2006-05-18 18:05:01 +02:00
|
|
|
static LRESULT WINPROC_CallProcWtoA( winproc_callback_t callback, HWND hwnd, UINT msg, WPARAM wParam,
|
|
|
|
LPARAM lParam, LRESULT *result, void *arg )
|
2004-02-20 06:14:48 +01:00
|
|
|
{
|
2006-05-18 11:02:28 +02:00
|
|
|
LRESULT ret = 0;
|
|
|
|
|
2007-05-24 16:41:17 +02:00
|
|
|
TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08lx,lp=%08lx)\n",
|
2006-05-18 18:05:01 +02:00
|
|
|
hwnd, SPY_GetMsgName(msg, hwnd), wParam, lParam);
|
2006-05-18 11:02:28 +02:00
|
|
|
|
2004-02-20 06:14:48 +01:00
|
|
|
switch(msg)
|
|
|
|
{
|
|
|
|
case WM_NCCREATE:
|
|
|
|
case WM_CREATE:
|
2007-11-06 13:58:05 +01:00
|
|
|
{
|
|
|
|
char buffer[1024], *cls;
|
2004-02-20 06:14:48 +01:00
|
|
|
CREATESTRUCTW *csW = (CREATESTRUCTW *)lParam;
|
|
|
|
CREATESTRUCTA csA = *(CREATESTRUCTA *)csW;
|
2006-01-19 12:43:45 +01:00
|
|
|
MDICREATESTRUCTA mdi_cs;
|
2007-11-06 13:58:05 +01:00
|
|
|
DWORD name_lenA = 0, name_lenW = 0, class_lenA = 0, class_lenW = 0;
|
2004-02-20 06:14:48 +01:00
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csW->lpszClass))
|
|
|
|
{
|
|
|
|
class_lenW = (strlenW(csW->lpszClass) + 1) * sizeof(WCHAR);
|
|
|
|
RtlUnicodeToMultiByteSize(&class_lenA, csW->lpszClass, class_lenW);
|
|
|
|
}
|
|
|
|
if (!IS_INTRESOURCE(csW->lpszName))
|
2004-02-20 06:14:48 +01:00
|
|
|
{
|
2007-11-06 13:58:05 +01:00
|
|
|
name_lenW = (strlenW(csW->lpszName) + 1) * sizeof(WCHAR);
|
2004-02-20 06:14:48 +01:00
|
|
|
RtlUnicodeToMultiByteSize(&name_lenA, csW->lpszName, name_lenW);
|
|
|
|
}
|
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!(cls = get_buffer( buffer, sizeof(buffer), class_lenA + name_lenA ))) break;
|
2004-02-20 06:14:48 +01:00
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (class_lenA)
|
|
|
|
{
|
|
|
|
RtlUnicodeToMultiByteN(cls, class_lenA, NULL, csW->lpszClass, class_lenW);
|
|
|
|
csA.lpszClass = cls;
|
|
|
|
}
|
|
|
|
if (name_lenA)
|
2004-02-20 06:14:48 +01:00
|
|
|
{
|
2007-11-06 13:58:05 +01:00
|
|
|
char *name = cls + class_lenA;
|
2004-02-20 06:14:48 +01:00
|
|
|
RtlUnicodeToMultiByteN(name, name_lenA, NULL, csW->lpszName, name_lenW);
|
|
|
|
csA.lpszName = name;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
|
|
|
|
{
|
|
|
|
mdi_cs = *(MDICREATESTRUCTA *)csW->lpCreateParams;
|
|
|
|
mdi_cs.szTitle = csA.lpszName;
|
|
|
|
mdi_cs.szClass = csA.lpszClass;
|
|
|
|
csA.lpCreateParams = &mdi_cs;
|
|
|
|
}
|
|
|
|
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&csA, result, arg );
|
2006-05-18 11:03:30 +02:00
|
|
|
free_buffer( buffer, cls );
|
2004-02-20 06:14:48 +01:00
|
|
|
}
|
2006-05-18 11:02:28 +02:00
|
|
|
break;
|
2004-02-20 06:14:48 +01:00
|
|
|
|
2006-05-18 11:22:55 +02:00
|
|
|
case WM_GETTEXT:
|
|
|
|
case WM_ASKCBFORMATNAME:
|
|
|
|
{
|
|
|
|
char *ptr, buffer[512];
|
|
|
|
DWORD len = wParam * 2;
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), len ))) break;
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
2007-03-22 12:08:21 +01:00
|
|
|
if (len)
|
2006-05-18 11:22:55 +02:00
|
|
|
{
|
2007-03-22 12:08:21 +01:00
|
|
|
if (*result)
|
|
|
|
{
|
2017-11-04 23:48:11 +01:00
|
|
|
RtlMultiByteToUnicodeN( (LPWSTR)lParam, wParam*sizeof(WCHAR), &len, ptr, ret + 1 );
|
2007-03-22 12:08:21 +01:00
|
|
|
*result = len/sizeof(WCHAR) - 1; /* do not count terminating null */
|
|
|
|
}
|
2006-05-18 18:05:01 +02:00
|
|
|
((LPWSTR)lParam)[*result] = 0;
|
2006-05-18 11:22:55 +02:00
|
|
|
}
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-05-18 12:43:40 +02:00
|
|
|
case LB_ADDSTRING:
|
|
|
|
case LB_INSERTSTRING:
|
|
|
|
case LB_FINDSTRING:
|
|
|
|
case LB_FINDSTRINGEXACT:
|
|
|
|
case LB_SELECTSTRING:
|
|
|
|
case CB_ADDSTRING:
|
|
|
|
case CB_INSERTSTRING:
|
|
|
|
case CB_FINDSTRING:
|
|
|
|
case CB_FINDSTRINGEXACT:
|
|
|
|
case CB_SELECTSTRING:
|
|
|
|
if (!lParam || !WINPROC_TestLBForStr( hwnd, msg ))
|
|
|
|
{
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
2006-05-18 12:43:40 +02:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
/* fall through */
|
2006-05-18 11:29:31 +02:00
|
|
|
case WM_SETTEXT:
|
|
|
|
case WM_WININICHANGE:
|
|
|
|
case WM_DEVMODECHANGE:
|
|
|
|
case CB_DIR:
|
|
|
|
case LB_DIR:
|
|
|
|
case LB_ADDFILE:
|
|
|
|
case EM_REPLACESEL:
|
2006-05-18 18:05:01 +02:00
|
|
|
if (!lParam) ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
2006-05-18 11:29:31 +02:00
|
|
|
else
|
|
|
|
{
|
|
|
|
char *ptr, buffer[512];
|
|
|
|
LPCWSTR strW = (LPCWSTR)lParam;
|
|
|
|
DWORD lenA, lenW = (strlenW(strW) + 1) * sizeof(WCHAR);
|
|
|
|
|
|
|
|
RtlUnicodeToMultiByteSize( &lenA, strW, lenW );
|
|
|
|
if ((ptr = get_buffer( buffer, sizeof(buffer), lenA )))
|
|
|
|
{
|
|
|
|
RtlUnicodeToMultiByteN( ptr, lenA, NULL, strW, lenW );
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
2006-05-18 11:29:31 +02:00
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-05-18 11:37:41 +02:00
|
|
|
case WM_MDICREATE:
|
|
|
|
{
|
|
|
|
char *ptr, buffer[1024];
|
|
|
|
DWORD title_lenA = 0, title_lenW = 0, class_lenA = 0, class_lenW = 0;
|
|
|
|
MDICREATESTRUCTW *csW = (MDICREATESTRUCTW *)lParam;
|
|
|
|
MDICREATESTRUCTA csA;
|
|
|
|
|
|
|
|
memcpy( &csA, csW, sizeof(csA) );
|
|
|
|
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csW->szTitle))
|
2006-05-18 11:37:41 +02:00
|
|
|
{
|
|
|
|
title_lenW = (strlenW(csW->szTitle) + 1) * sizeof(WCHAR);
|
|
|
|
RtlUnicodeToMultiByteSize( &title_lenA, csW->szTitle, title_lenW );
|
|
|
|
}
|
2007-11-06 13:58:05 +01:00
|
|
|
if (!IS_INTRESOURCE(csW->szClass))
|
2006-05-18 11:37:41 +02:00
|
|
|
{
|
|
|
|
class_lenW = (strlenW(csW->szClass) + 1) * sizeof(WCHAR);
|
|
|
|
RtlUnicodeToMultiByteSize( &class_lenA, csW->szClass, class_lenW );
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), title_lenA + class_lenA ))) break;
|
|
|
|
|
|
|
|
if (title_lenA)
|
|
|
|
{
|
|
|
|
RtlUnicodeToMultiByteN( ptr, title_lenA, NULL, csW->szTitle, title_lenW );
|
|
|
|
csA.szTitle = ptr;
|
|
|
|
}
|
|
|
|
if (class_lenA)
|
|
|
|
{
|
|
|
|
RtlUnicodeToMultiByteN( ptr + title_lenA, class_lenA, NULL, csW->szClass, class_lenW );
|
|
|
|
csA.szClass = ptr + title_lenA;
|
|
|
|
}
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&csA, result, arg );
|
2006-05-18 11:37:41 +02:00
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-05-18 12:17:44 +02:00
|
|
|
case LB_GETTEXT:
|
|
|
|
case CB_GETLBTEXT:
|
2006-05-18 12:43:40 +02:00
|
|
|
if (lParam && WINPROC_TestLBForStr( hwnd, msg ))
|
2006-05-18 12:17:44 +02:00
|
|
|
{
|
|
|
|
char buffer[512]; /* FIXME: fixed sized buffer */
|
|
|
|
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)buffer, result, arg );
|
|
|
|
if (*result >= 0)
|
2006-05-18 12:17:44 +02:00
|
|
|
{
|
|
|
|
DWORD len;
|
|
|
|
RtlMultiByteToUnicodeN( (LPWSTR)lParam, ~0u, &len, buffer, strlen(buffer) + 1 );
|
2006-05-18 18:05:01 +02:00
|
|
|
*result = len / sizeof(WCHAR) - 1;
|
2006-05-18 12:17:44 +02:00
|
|
|
}
|
|
|
|
}
|
2006-05-18 18:05:01 +02:00
|
|
|
else ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
2006-05-18 12:17:44 +02:00
|
|
|
break;
|
|
|
|
|
2006-05-18 12:20:14 +02:00
|
|
|
case EM_GETLINE:
|
|
|
|
{
|
|
|
|
char *ptr, buffer[512];
|
|
|
|
WORD len = *(WORD *)lParam;
|
|
|
|
|
|
|
|
if (!(ptr = get_buffer( buffer, sizeof(buffer), len * 2 ))) break;
|
|
|
|
*((WORD *)ptr) = len * 2; /* store the length */
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)ptr, result, arg );
|
|
|
|
if (*result)
|
2006-05-18 12:20:14 +02:00
|
|
|
{
|
2006-05-18 18:05:01 +02:00
|
|
|
DWORD reslen;
|
2006-05-20 18:57:11 +02:00
|
|
|
RtlMultiByteToUnicodeN( (LPWSTR)lParam, len*sizeof(WCHAR), &reslen, ptr, *result );
|
2006-05-18 18:05:01 +02:00
|
|
|
*result = reslen / sizeof(WCHAR);
|
|
|
|
if (*result < len) ((LPWSTR)lParam)[*result] = 0;
|
2006-05-18 12:20:14 +02:00
|
|
|
}
|
|
|
|
free_buffer( buffer, ptr );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-05-22 12:29:02 +02:00
|
|
|
case WM_GETDLGCODE:
|
|
|
|
if (lParam)
|
|
|
|
{
|
|
|
|
MSG newmsg = *(MSG *)lParam;
|
|
|
|
switch(newmsg.message)
|
|
|
|
{
|
|
|
|
case WM_CHAR:
|
|
|
|
case WM_DEADCHAR:
|
|
|
|
case WM_SYSCHAR:
|
|
|
|
case WM_SYSDEADCHAR:
|
|
|
|
newmsg.wParam = map_wparam_char_WtoA( newmsg.wParam, 1 );
|
|
|
|
break;
|
|
|
|
case WM_IME_CHAR:
|
|
|
|
newmsg.wParam = map_wparam_char_WtoA( newmsg.wParam, 2 );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
ret = callback( hwnd, msg, wParam, (LPARAM)&newmsg, result, arg );
|
|
|
|
}
|
|
|
|
else ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
|
|
|
break;
|
|
|
|
|
2007-08-08 18:25:38 +02:00
|
|
|
case WM_CHAR:
|
|
|
|
{
|
|
|
|
WCHAR wch = wParam;
|
|
|
|
char ch[2];
|
2013-05-21 13:51:21 +02:00
|
|
|
DWORD cp = get_input_codepage();
|
|
|
|
DWORD len = WideCharToMultiByte( cp, 0, &wch, 1, ch, 2, NULL, NULL );
|
2007-08-08 18:25:38 +02:00
|
|
|
ret = callback( hwnd, msg, (BYTE)ch[0], lParam, result, arg );
|
|
|
|
if (len == 2) ret = callback( hwnd, msg, (BYTE)ch[1], lParam, result, arg );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
2006-05-18 12:27:27 +02:00
|
|
|
case WM_CHARTOITEM:
|
|
|
|
case WM_MENUCHAR:
|
|
|
|
case WM_DEADCHAR:
|
|
|
|
case WM_SYSCHAR:
|
|
|
|
case WM_SYSDEADCHAR:
|
|
|
|
case EM_SETPASSWORDCHAR:
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, map_wparam_char_WtoA(wParam,1), lParam, result, arg );
|
2006-05-18 12:27:27 +02:00
|
|
|
break;
|
|
|
|
|
2006-05-18 12:28:07 +02:00
|
|
|
case WM_IME_CHAR:
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, map_wparam_char_WtoA(wParam,2), lParam, result, arg );
|
2006-05-18 12:28:07 +02:00
|
|
|
break;
|
|
|
|
|
2006-05-18 12:29:19 +02:00
|
|
|
case WM_PAINTCLIPBOARD:
|
|
|
|
case WM_SIZECLIPBOARD:
|
|
|
|
FIXME_(msg)( "message %s (%04x) needs translation, please report\n",
|
|
|
|
SPY_GetMsgName(msg, hwnd), msg );
|
|
|
|
break;
|
|
|
|
|
2004-02-20 06:14:48 +01:00
|
|
|
default:
|
2006-05-18 18:05:01 +02:00
|
|
|
ret = callback( hwnd, msg, wParam, lParam, result, arg );
|
2006-05-18 11:02:28 +02:00
|
|
|
break;
|
2006-05-17 20:53:51 +02:00
|
|
|
}
|
2006-05-18 11:02:28 +02:00
|
|
|
|
2006-05-17 20:53:51 +02:00
|
|
|
return ret;
|
1996-07-05 19:14:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-08 17:02:42 +02:00
|
|
|
/**********************************************************************
|
|
|
|
* WINPROC_call_window
|
|
|
|
*
|
|
|
|
* Call the window procedure of the specified window.
|
|
|
|
*/
|
|
|
|
BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
|
2007-08-08 18:25:38 +02:00
|
|
|
LRESULT *result, BOOL unicode, enum wm_char_mapping mapping )
|
2007-08-08 17:02:42 +02:00
|
|
|
{
|
2008-08-27 13:07:30 +02:00
|
|
|
struct user_thread_info *thread_info = get_user_thread_info();
|
2018-02-14 06:37:06 +01:00
|
|
|
BOOL unicode_win, is_dialog;
|
2007-08-08 17:02:42 +02:00
|
|
|
WND *wndPtr;
|
2009-12-15 20:09:04 +01:00
|
|
|
WNDPROC func;
|
2007-08-08 17:02:42 +02:00
|
|
|
WINDOWPROC *proc;
|
|
|
|
|
|
|
|
if (!(wndPtr = WIN_GetPtr( hwnd ))) return FALSE;
|
|
|
|
if (wndPtr == WND_OTHER_PROCESS || wndPtr == WND_DESKTOP) return FALSE;
|
|
|
|
if (wndPtr->tid != GetCurrentThreadId())
|
|
|
|
{
|
|
|
|
WIN_ReleasePtr( wndPtr );
|
|
|
|
return FALSE;
|
|
|
|
}
|
2009-12-15 20:09:04 +01:00
|
|
|
func = wndPtr->winproc;
|
2007-08-08 17:02:42 +02:00
|
|
|
proc = handle_to_proc( wndPtr->winproc );
|
2016-03-09 13:51:37 +01:00
|
|
|
unicode_win = wndPtr->flags & WIN_ISUNICODE;
|
2018-02-14 06:37:06 +01:00
|
|
|
is_dialog = wndPtr->dlgInfo != NULL;
|
2007-08-08 17:02:42 +02:00
|
|
|
WIN_ReleasePtr( wndPtr );
|
|
|
|
|
2008-08-27 13:07:30 +02:00
|
|
|
if (thread_info->recursion_count > MAX_WINPROC_RECURSION) return FALSE;
|
|
|
|
thread_info->recursion_count++;
|
|
|
|
|
2007-08-08 17:02:42 +02:00
|
|
|
if (unicode)
|
|
|
|
{
|
2009-12-15 20:11:16 +01:00
|
|
|
if (proc == WINPROC_PROC16)
|
2009-12-15 20:01:38 +01:00
|
|
|
WINPROC_CallProcWtoA( wow_handlers.call_window_proc, hwnd, msg, wParam, lParam, result, func );
|
2018-02-14 06:37:06 +01:00
|
|
|
else if (is_dialog)
|
|
|
|
{
|
|
|
|
if (unicode_win)
|
|
|
|
{
|
|
|
|
if (proc && proc->procW)
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procW );
|
|
|
|
else
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, func );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (proc && proc->procA)
|
|
|
|
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procA );
|
|
|
|
else
|
|
|
|
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, func );
|
|
|
|
}
|
|
|
|
}
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (proc && proc->procW)
|
2007-08-08 17:02:42 +02:00
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procW );
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (proc)
|
2009-12-15 20:11:16 +01:00
|
|
|
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procA );
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (unicode_win)
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, func );
|
|
|
|
else
|
|
|
|
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, result, func );
|
2007-08-08 17:02:42 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2009-12-15 20:11:16 +01:00
|
|
|
if (proc == WINPROC_PROC16)
|
2009-12-15 20:01:38 +01:00
|
|
|
wow_handlers.call_window_proc( hwnd, msg, wParam, lParam, result, func );
|
2018-02-14 06:37:06 +01:00
|
|
|
else if (is_dialog)
|
|
|
|
{
|
|
|
|
if (unicode_win)
|
|
|
|
{
|
|
|
|
if (proc && proc->procW)
|
|
|
|
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procW, mapping );
|
|
|
|
else
|
|
|
|
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, func, mapping );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (proc && proc->procA)
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procA );
|
|
|
|
else
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, func );
|
|
|
|
}
|
|
|
|
}
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (proc && proc->procA)
|
2007-08-08 17:02:42 +02:00
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, proc->procA );
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (proc)
|
2009-12-15 20:11:16 +01:00
|
|
|
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, proc->procW, mapping );
|
2016-03-09 13:51:37 +01:00
|
|
|
else if (unicode_win)
|
|
|
|
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, result, func, mapping );
|
|
|
|
else
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, result, func );
|
2007-08-08 17:02:42 +02:00
|
|
|
}
|
2008-08-27 13:07:30 +02:00
|
|
|
thread_info->recursion_count--;
|
2007-08-08 17:02:42 +02:00
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
/**********************************************************************
|
2000-12-22 02:38:01 +01:00
|
|
|
* CallWindowProcA (USER32.@)
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
*
|
|
|
|
* The CallWindowProc() function invokes the windows procedure _func_,
|
|
|
|
* with _hwnd_ as the target window, the message specified by _msg_, and
|
|
|
|
* the message parameters _wParam_ and _lParam_.
|
|
|
|
*
|
|
|
|
* Some kinds of argument conversion may be done, I'm not sure what.
|
|
|
|
*
|
|
|
|
* CallWindowProc() may be used for windows subclassing. Use
|
|
|
|
* SetWindowLong() to set a new windows procedure for windows of the
|
|
|
|
* subclass, and handle subclassed messages in the new windows
|
|
|
|
* procedure. The new windows procedure may then use CallWindowProc()
|
|
|
|
* with _func_ set to the parent class's windows procedure to dispatch
|
|
|
|
* the message to the superclass.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
*
|
|
|
|
* The return value is message dependent.
|
|
|
|
*
|
|
|
|
* CONFORMANCE
|
|
|
|
*
|
2002-06-01 01:06:46 +02:00
|
|
|
* ECMA-234, Win32
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
*/
|
2002-06-01 01:06:46 +02:00
|
|
|
LRESULT WINAPI CallWindowProcA(
|
2000-12-02 00:58:28 +01:00
|
|
|
WNDPROC func, /* [in] window procedure */
|
|
|
|
HWND hwnd, /* [in] target window */
|
|
|
|
UINT msg, /* [in] message */
|
|
|
|
WPARAM wParam, /* [in] message dependent parameter */
|
|
|
|
LPARAM lParam /* [in] message dependent parameter */
|
Release 980809
Sat Aug 8 19:11:46 1998 Marcus Meissner <marcus@jet.franken.de>
* [*/*]
Added some missing WINAPI and some missing prototypes for
functions.
* [controls/static.c]
Got rid of the MODULE32_LookupHMODULE error showing up for every
message box.
* [windows/winproc.c]
WM_NOTIFY 16->32 mapping (AOL Instant Messenger or however it is called).
* [misc/winsock.c]
hostent/servent/protoent should not use the same static buffers.
(has broken nt3.15 finger.exe which does hp=gethostbyname(), then
getservbyname("finger","tcp") and the references hp->h_addr_list[0]).
Sat Aug 8 13:21:24 1998 Alexandre Julliard <julliard@lrc.epfl.ch>
* [include/server.h] [tools/make_requests] [server/request.c]
[server/trace.c]
Automated part of the client/server request code generation.
Added tracing of client/server communication.
* [scheduler/*.c] [server/process.c]
Added support for server-side handles.
* [scheduler/thread.c]
Added DLL_THREAD_ATTACH/DETACH notifications.
* [configure.in]
Added check for -lsocket.
* [windows/winproc.c]
Return the thunk address in WINPROC_GetProc if the function types
don't match.
Sat Aug 8 02:44:04 1998 Douglas Ridgway <ridgway@winehq.com>
* [windows/winproc.c][windows/win.c][windows/message.c]
Documentation for CallWindowProc, SetWindowLong, DispatchMessage,
WaitMessage, GetMessage, and PeekMessage.
Sat Aug 8 01:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de>
* [controls/commctrl.c][controls/widgets.c][include/builtin32.h]
[include/commctrl.h][relay32/builtin32.c][relay32/comctl32.spec]
[tools/build.c] [relay32/shell32.spec]
Added the functionality of the LibMain function. The common
controls are properly initialized now.
* [controls/treeview.c][memory/atom.c][scheduler/thread.c][windows/class.c]
[windows/msgbox.c][windows/win.c]
Put TRACE in, put SetLastError() in.
* [include/interfaces.h]
Added IClassFactory::LockServer.
* [include/ole2.h]
Added struct for LPOLEMENUGROUPWIDTHS32, HOLEMENU32.
* [include/shell.h][include/shlobj.h][misc/shell.c][ole/folders.c]
Reorganized and many structs and classes (IShellBrowser,IShellView)
added. shell32.dll should work in many cases now.
Started SHGetFileInfoA implementeation, rewrote SHGetPathFromIDList32A.
New Shell32LibMain started ShellIconCache Implementation.
* [misc/shellord.c]
Rewrote ILCombine, ILGetSize
New stubs SHFind_InitMenuPopup, FileMenu_Create, ShellExecuteEx,
SHSetInstanceExplorer, SHGetInstanceExplorer, SHFreeUnusedLibraries.
* [include/winerror.h]
Class and window related error codes added.
* [memory/heap.c]
Changed lstrlen32A to strlen to get rid of milions of TRACE lines.
* [misc/ddeml.c]
First lines for DdeCreateStringHandle32A / DdeFreeStringHandle32.
* [misc/network.c][relay32/mpr.spec]
Fixed some bugs, changed ordinals.
* [windows/class.c]
Workarounds for incorrect hInstance handling. Fixes parts of
MSWord95/Excel95 and Money95.
Thu Aug 6 21:05:35 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de>
* [windows/nonclient.c][misc/tweak.c][include/tweak.h]
[documentation/win95look]
Removed some tweak variables. They are no longer needed.
* [files/dos_fs.c]
Added check for null pointer in DOSFS_GetDevice().
* [controls/tooltips.c][include/commctrl.h]
Improved tooltips.
* [controls/status.c][include/commctrl.h]
Cleaned up code and added tooltip support.
* [controls/toolbar.c][include/commctrl.h]
Added tooltip support.
* [documentation/common_controls]
Updated.
Thu Aug 6 00:05:22 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
* [include/ver.h] [misc/ver.c]
Write VIF_BUFFTOOSMALL, not VIF_BUFTOSMALL.
* [debugger/hash.c] [debugger/stabs.c]
Make debug output more friendly for posting.
* [files/file.c]
Partial implementation of OF_SHARE_EXCLUSIVE.
Needed for Quicklogic/QuickChip (InstallShield).
* [files/profile.c]
When a cached-only entry is found, return it.
* [graphics/x11drv/xfont.c]
Accept a space as delimiter for a fontname and inhibit overrun
(Make xplasim.ex from the Phillips Coolrunner CPLD suite proceed).
* [miscemu/main.c]
Delay setting IF1632_CallLargeStack after loading the executables.
Stops fpgaexp.exe from the Viewlogic FPGA suite from crashing when
showing the Blinker error Message Box.
* [misc/network.c]
Make WNetGetConnection16 recognise a CDROM as a local drive.
* [multimedia/mmsystem.c]
Preliminary check for MCI_ALL_DEVICE_ID in MCI_Close by a FIXME.
Tue Aug 4 21:15:23 1998 James Juran <jrj120@psu.edu>
* [ole/ole2nls.c]
Fixed bug in CompareString32A. strcmp() doesn't necessarily
return -1, 0, or 1, which the previous code depended on.
Changed name of is_punctuation to OLE2NLS_isPunctuation.
Made NORM_IGNOREWIDTH not print a FIXME message in
LCMapString32A.
Other debugging messages, documentation, and code cleanups.
* [objects/font.c] [relay32/gdi32.spec] [include/winerror.h]
Added stub for GetFontData32, and added GDI_ERROR constant
to winerror.h.
Tue Aug 4 07:44:43 1998 Ove Kaaven <ovek@arcticnet.no>
* [multimedia/mmio.c]
Implemented mmioSetBuffer, mmioAdvance, mmioAscend, and
mmioCreateChunk to the best of my knowledge. But watch out,
there's bound to be bugs in there...
* [include/mmsystem.h] [multimedia/mmsystem.c]
Hacked in support for 32-bit multimedia function callbacks.
* [AUTHORS] [misc/shell.c]
Selfishly credited my authorship. Hopefully I'm excused.
* [include/dosexe.h] [include/module.h] [loader/dos/*]
[loader/module.c] [loader/task.c] [Makefile.in]
[configure.in] [Makefile.in]
Added DOS EXE (MZ) loader and virtual machine. Task
structure integration thanks to Ulrich Weigand.
* [files/dos_fs.c]
Work around a null pointer dereference if ioctlGetDeviceInfo-ing
a FILE_DupUnixHandle'd file (i.e. GetStdHandle'd).
* [include/miscemu.h] [include/winnt.h] [loader/main.c]
[memory/global.c] [msdos/dpmi.c] [msdos/dosmem.c]
Added support for DOS memory images, and added
DOSMEM_ResizeBlock() and DOSMEM_Available().
* [msdos/int21.c]
Added support for the DOS virtual machine, tweaked handle
assignment to avoid stdio clashes, forced INT21_FindNext to exit
wildcardless searches after finding one entry, added AH=7, 8, 9,
C, 48, 49, 4A, and 7160 CL=1 (Get Short Filename), and made the
long filename calls only respond if running with with -winver
win95.
* [objects/cursoricon.c]
DestroyCursor32 and DestroyIcon32 should now free the objects
(hopefully) correctly.
Sun Aug 2 21:42:09 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk>
* [graphics/psdrv/*] [include/psdrv.h]
Added PPD file parsing - at the moment it reads a file called
default.ppd from the directory in which you start Wine. Page sizes
other than A4 should now work (landscape may not). All fonts that are
present on your printer (according to the PPD) should be available,
providing you have the AFM files. Fonts should now be the correct size.
Graphics is still basically lines only. See graphics/psdrv/README .
* [misc/printdrv.c]
Yet more Drv[Get/Set]PrinterData fixes.
Fri Jul 31 21:33:22 1998 Per Lindstrm <pelinstr@algonet.se>
* [relay32/crtdll.spec] [misc/crtdll.c]
Added stub for freopen, _findfirst, _findnext, _fstat and _read.
* [files/directory.c]
Modified warning message.
Wed Jul 29 11:25:28 1998 Luiz Otavio L. Zorzella <zorzella@nr.conexware.com>
* [objects/font.c]
Added stub for GetFontData.
* [multimedia/msvideo.c]
Created this file to hold the msvideo.dll calls (and maybe also
msvfw32.dll).
* [objects/cursoricon.c]
Added search in Global Heap for cursor when trying to destroy it
with DestroyCursor16. This test should be done in many (all?)
other functions that use FreeResource.
* [controls/treeview.c] [include/commctrl.h]
Minor correction in name and addition of many placeholders for TVM
messages in TREEVIEW_WindowProc.
* [msdos/dpmi.c]
Fixed a bug in DPMI_xrealloc where in a copy of a memory region
"A" of size "a" to a region "B" of size "b", "b" bytes were being
copied, instead of "a", as the new version does. This both
increases speed, as well as avoids segfaults.
1998-08-09 14:47:43 +02:00
|
|
|
) {
|
2003-08-05 21:17:19 +02:00
|
|
|
WINDOWPROC *proc;
|
2006-05-18 19:09:32 +02:00
|
|
|
LRESULT result;
|
2003-08-05 21:17:19 +02:00
|
|
|
|
|
|
|
if (!func) return 0;
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
|
2007-08-09 06:35:28 +02:00
|
|
|
if (!(proc = handle_to_proc( func )))
|
2007-10-18 03:55:55 +02:00
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, &result, func );
|
2009-12-15 20:11:16 +01:00
|
|
|
else if (proc == WINPROC_PROC16)
|
2009-12-15 20:01:38 +01:00
|
|
|
wow_handlers.call_window_proc( hwnd, msg, wParam, lParam, &result, func );
|
2006-05-18 19:09:32 +02:00
|
|
|
else if (proc->procA)
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procA );
|
2009-12-15 20:11:16 +01:00
|
|
|
else
|
2007-08-08 18:25:38 +02:00
|
|
|
WINPROC_CallProcAtoW( call_window_proc, hwnd, msg, wParam, lParam, &result,
|
|
|
|
proc->procW, WMCHAR_MAP_CALLWINDOWPROC );
|
2006-05-18 19:09:32 +02:00
|
|
|
return result;
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
2000-12-22 02:38:01 +01:00
|
|
|
* CallWindowProcW (USER32.@)
|
2005-11-09 11:33:40 +01:00
|
|
|
*
|
|
|
|
* See CallWindowProcA.
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
*/
|
1999-02-26 12:11:13 +01:00
|
|
|
LRESULT WINAPI CallWindowProcW( WNDPROC func, HWND hwnd, UINT msg,
|
|
|
|
WPARAM wParam, LPARAM lParam )
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
{
|
2003-08-05 21:17:19 +02:00
|
|
|
WINDOWPROC *proc;
|
2006-05-18 19:09:32 +02:00
|
|
|
LRESULT result;
|
1996-05-21 17:01:41 +02:00
|
|
|
|
2003-08-05 21:17:19 +02:00
|
|
|
if (!func) return 0;
|
|
|
|
|
2007-08-09 06:35:28 +02:00
|
|
|
if (!(proc = handle_to_proc( func )))
|
2007-10-18 03:55:55 +02:00
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, &result, func );
|
2009-12-15 20:11:16 +01:00
|
|
|
else if (proc == WINPROC_PROC16)
|
2009-12-15 20:01:38 +01:00
|
|
|
WINPROC_CallProcWtoA( wow_handlers.call_window_proc, hwnd, msg, wParam, lParam, &result, func );
|
2006-05-18 19:09:32 +02:00
|
|
|
else if (proc->procW)
|
|
|
|
call_window_proc( hwnd, msg, wParam, lParam, &result, proc->procW );
|
|
|
|
else
|
2009-12-15 20:11:16 +01:00
|
|
|
WINPROC_CallProcWtoA( call_window_proc, hwnd, msg, wParam, lParam, &result, proc->procA );
|
2006-05-18 19:09:32 +02:00
|
|
|
return result;
|
Release 960516
Thu May 16 13:35:31 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [*/*.c]
Renamed RECT, POINT and SIZE structures to RECT16, POINT16 and
SIZE16. Implemented Win32 version of most functions that take
these types as parameters.
* [configure]
Patched autoconf to attempt to correctly detect -lnsl and
-lsocket. Please check this out.
* [controls/button.c]
Added support for Win32 BM_* messages.
* [controls/menu.c]
Avoid sending extra WM_MENUSELECT messages. This avoids crashes
with Excel.
* [memory.heap.c] [include/heap.h]
Added support for SEGPTRs in Win32 heaps. Added a few macros to
make using SEGPTRs easier. They are a bit slower than MAKE_SEGPTR,
but they work with Win32.
* [memory/atom.c]
Implemented Win32 atom functions.
* [memory/local.c]
Fixed LocalReAlloc() changes to avoid copying the whole block twice.
* [win32/memory.c]
Use /dev/zero instead of MAP_ANON for VirtualAlloc().
* [windows/class.c]
Properly implemented the Win32 class functions.
* [windows/winproc.c] (New file)
New file handling the message translation between Win16 and Win32.
Mon May 13 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/mdi.c] [windows/menu.c]
Improved WM_MDICREATE and WM_MDICASCADE handling.
* [windows/event.c] [objects/bitblt.c]
Handle GraphicsExpose event for BitBlt from screen to screen.
* [windows/event.c] [windows/win.c] [windows/nonclient.c]
Bunch of fixes for problems with -managed.
* [windows/win.c] [windows/winpos.c]
Changed conditions for WM_SIZE, WM_MOVE, and WM_GETMINMAXINFO
in CreateWindow.
* [windows/win.c] [windows/queue.c] [misc/user.c]
Do not send WM_PARENTNOTIFY when in AppExit and call WH_SHELL
on window creation/destruction.
* [objects/palette.c]
Crude RealizePalette(). At least something is visible in LviewPro.
Sun May 12 02:05:00 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/gdi32.spec]
Added Rectangle (use win16 version).
* [if1632/kernel32.spec]
Added GetWindowsDirectoryA (use win16 GetWindowsDirectory).
* [if1632/user32.spec]
Added GetSubMenu, MoveWindow, SetScrollPos, SetScrollRange (use win16
versions).
Added SetWindowsHookExA (empty stub for now).
* [include/handle32.h]
Changed #include <malloc.h> to #include <stdlib.h> to prevent
hate message from FreeBSD compiler.
* [win32/newfns.c]
Added new function SetWindowsHookEx32A (empty stub for now).
* [win32/user32.c]
Removed redundant debugging printf statement.
Sun May 12 01:24:57 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [memory/local.c]
Avoid creating adjacent free blocks.
Free the block in LocalReAlloc() before allocating a new one.
Fixed LocalReAlloc() for discarded blocks.
Fri May 10 23:05:12 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [resources/sysres_Fi.rc]
ChooseFont and ChooseColor dialogs updated.
Fri May 10 17:19:33 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c,if1632/kernel.spec]
GetCurrentDirectory(),SetCurrentDirectory() implemented.
* [if1632/advapi32.spec] [if1632/kernel.spec] [if1632/shell.spec]
[include/windows.h] [include/winreg.h] [loader/main.c]
[misc/main.c] [misc/shell.c] [misc/registry.c]
Registry fixes:
- loads win95 registry databases,
- save only updated keys on default,
- now adhers to the new function naming standard,
- minor cleanups.
Tue May 7 22:36:13 1996 Albrecht Kleine <kleine@ak.sax.de>
* [combo.c]
Added WM_COMMAND-handling for interaction between EDIT and COMBOLBOX
and synchronized mine with Greg Kreider's works.
* [commdlg.c]
Bugfix in ChooseFont: font size handling.
1996-05-16 20:21:06 +02:00
|
|
|
}
|
2006-05-09 20:33:11 +02:00
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* WINPROC_CallDlgProcA
|
|
|
|
*/
|
|
|
|
INT_PTR WINPROC_CallDlgProcA( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
WINDOWPROC *proc;
|
2006-05-18 19:09:32 +02:00
|
|
|
LRESULT result;
|
|
|
|
INT_PTR ret;
|
2006-05-09 20:33:11 +02:00
|
|
|
|
|
|
|
if (!func) return 0;
|
|
|
|
|
2007-08-09 06:35:28 +02:00
|
|
|
if (!(proc = handle_to_proc( func )))
|
2007-10-18 03:55:55 +02:00
|
|
|
ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, func );
|
2009-12-15 20:11:16 +01:00
|
|
|
else if (proc == WINPROC_PROC16)
|
|
|
|
{
|
2009-12-15 20:01:38 +01:00
|
|
|
ret = wow_handlers.call_dialog_proc( hwnd, msg, wParam, lParam, &result, func );
|
2009-12-15 20:11:16 +01:00
|
|
|
SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result );
|
|
|
|
}
|
2006-05-18 19:09:32 +02:00
|
|
|
else
|
2018-02-14 06:37:06 +01:00
|
|
|
ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procW ? proc->procW : proc->procA );
|
|
|
|
|
2006-05-18 19:09:32 +02:00
|
|
|
return ret;
|
2006-05-09 20:33:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* WINPROC_CallDlgProcW
|
|
|
|
*/
|
|
|
|
INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
WINDOWPROC *proc;
|
2006-05-18 19:09:32 +02:00
|
|
|
LRESULT result;
|
|
|
|
INT_PTR ret;
|
2006-05-09 20:33:11 +02:00
|
|
|
|
|
|
|
if (!func) return 0;
|
|
|
|
|
2007-08-09 06:35:28 +02:00
|
|
|
if (!(proc = handle_to_proc( func )))
|
2007-10-18 03:55:55 +02:00
|
|
|
ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, func );
|
2009-12-15 20:11:16 +01:00
|
|
|
else if (proc == WINPROC_PROC16)
|
2006-05-18 18:05:01 +02:00
|
|
|
{
|
2009-12-15 20:01:38 +01:00
|
|
|
ret = WINPROC_CallProcWtoA( wow_handlers.call_dialog_proc, hwnd, msg, wParam, lParam, &result, func );
|
2006-05-18 18:05:01 +02:00
|
|
|
SetWindowLongPtrW( hwnd, DWLP_MSGRESULT, result );
|
|
|
|
}
|
2009-12-15 20:11:16 +01:00
|
|
|
else
|
2018-02-14 06:37:06 +01:00
|
|
|
ret = call_dialog_proc( hwnd, msg, wParam, lParam, &result, proc->procW ? proc->procW : proc->procA );
|
|
|
|
|
2006-05-18 19:09:32 +02:00
|
|
|
return ret;
|
2006-05-09 20:33:11 +02:00
|
|
|
}
|
2009-12-15 13:16:50 +01:00
|
|
|
|
|
|
|
|
2009-12-17 12:56:50 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* Window procedures for builtin classes
|
|
|
|
*/
|
|
|
|
|
|
|
|
static LRESULT WINAPI ButtonWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.button_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI ButtonWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.button_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 12:57:22 +01:00
|
|
|
static LRESULT WINAPI ComboWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.combo_proc( hwnd, message, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI ComboWndProcW( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.combo_proc( hwnd, message, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 12:57:40 +01:00
|
|
|
LRESULT WINAPI EditWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.edit_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI EditWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.edit_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 12:58:45 +01:00
|
|
|
static LRESULT WINAPI ListBoxWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.listbox_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI ListBoxWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.listbox_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 13:01:11 +01:00
|
|
|
static LRESULT WINAPI MDIClientWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.mdiclient_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI MDIClientWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.mdiclient_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 12:59:40 +01:00
|
|
|
static LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.scrollbar_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI ScrollBarWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.scrollbar_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2009-12-17 13:00:04 +01:00
|
|
|
static LRESULT WINAPI StaticWndProcA( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.static_proc( hwnd, msg, wParam, lParam, FALSE );
|
|
|
|
}
|
|
|
|
|
|
|
|
static LRESULT WINAPI StaticWndProcW( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
|
|
|
|
{
|
|
|
|
return wow_handlers.static_proc( hwnd, msg, wParam, lParam, TRUE );
|
|
|
|
}
|
|
|
|
|
2013-09-24 12:25:02 +02:00
|
|
|
static DWORD wait_message( DWORD count, const HANDLE *handles, DWORD timeout, DWORD mask, DWORD flags )
|
2009-12-24 12:02:10 +01:00
|
|
|
{
|
2012-10-29 11:18:06 +01:00
|
|
|
DWORD ret = USER_Driver->pMsgWaitForMultipleObjectsEx( count, handles, timeout, mask, flags );
|
2009-12-24 12:03:45 +01:00
|
|
|
if (ret == WAIT_TIMEOUT && !count && !timeout) NtYieldExecution();
|
2012-12-12 20:17:21 +01:00
|
|
|
if ((mask & QS_INPUT) == QS_INPUT) get_user_thread_info()->message_count = 0;
|
2009-12-24 12:03:45 +01:00
|
|
|
return ret;
|
2009-12-24 12:02:10 +01:00
|
|
|
}
|
|
|
|
|
2009-12-15 13:16:50 +01:00
|
|
|
/**********************************************************************
|
|
|
|
* UserRegisterWowHandlers (USER32.@)
|
|
|
|
*
|
|
|
|
* NOTE: no attempt has been made to be compatible here,
|
|
|
|
* the Windows function is most likely completely different.
|
|
|
|
*/
|
|
|
|
void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new, struct wow_handlers32 *orig )
|
|
|
|
{
|
2009-12-22 17:57:42 +01:00
|
|
|
orig->button_proc = ButtonWndProc_common;
|
|
|
|
orig->combo_proc = ComboWndProc_common;
|
|
|
|
orig->edit_proc = EditWndProc_common;
|
|
|
|
orig->listbox_proc = ListBoxWndProc_common;
|
|
|
|
orig->mdiclient_proc = MDIClientWndProc_common;
|
|
|
|
orig->scrollbar_proc = ScrollBarWndProc_common;
|
|
|
|
orig->static_proc = StaticWndProc_common;
|
2009-12-24 12:02:10 +01:00
|
|
|
orig->wait_message = wait_message;
|
2009-12-22 17:57:42 +01:00
|
|
|
orig->create_window = WIN_CreateWindowEx;
|
2009-12-22 18:09:30 +01:00
|
|
|
orig->get_win_handle = WIN_GetFullHandle;
|
2009-12-22 17:57:42 +01:00
|
|
|
orig->alloc_winproc = WINPROC_AllocProc;
|
|
|
|
orig->get_dialog_info = DIALOG_get_info;
|
|
|
|
orig->dialog_box_loop = DIALOG_DoDialogBox;
|
2010-02-08 17:38:05 +01:00
|
|
|
orig->get_icon_param = get_icon_param;
|
|
|
|
orig->set_icon_param = set_icon_param;
|
2009-12-15 13:18:28 +01:00
|
|
|
|
2009-12-15 13:16:50 +01:00
|
|
|
wow_handlers = *new;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct wow_handlers16 wow_handlers =
|
|
|
|
{
|
|
|
|
ButtonWndProc_common,
|
2009-12-15 13:17:15 +01:00
|
|
|
ComboWndProc_common,
|
2009-12-15 13:19:03 +01:00
|
|
|
EditWndProc_common,
|
2009-12-15 13:18:28 +01:00
|
|
|
ListBoxWndProc_common,
|
2009-12-16 13:22:08 +01:00
|
|
|
MDIClientWndProc_common,
|
2009-12-15 13:19:30 +01:00
|
|
|
ScrollBarWndProc_common,
|
2009-12-15 13:19:53 +01:00
|
|
|
StaticWndProc_common,
|
2009-12-24 12:02:10 +01:00
|
|
|
wait_message,
|
2009-12-21 11:21:48 +01:00
|
|
|
WIN_CreateWindowEx,
|
2009-12-15 20:01:38 +01:00
|
|
|
NULL, /* call_window_proc */
|
2009-12-22 17:06:50 +01:00
|
|
|
NULL, /* call_dialog_proc */
|
2010-02-08 17:38:05 +01:00
|
|
|
NULL, /* free_icon_param */
|
2009-12-15 13:16:50 +01:00
|
|
|
};
|