mirror of
https://github.com/reactos/wine.git
synced 2024-12-03 01:12:25 +00:00
a0d77315e4
Fri Sep 11 13:14:35 1998 Andreas Mohr <100.30936@germany.net> * [files/file.c] [include/file.h] Fixed SetFilePointer to allow negative positions as in DOS. * [graphics/ddraw.c] Added some methods to IDirect3D. * [ole/compobj.c] [if1632/compobj.spec] Added/implemented CoCreateStandardMalloc16, CoGetClassObject, CoCreateInstance, LookupETask, SetETask, CoGetState16. * [loader/task.c] MakeProcInstance: return 0 if func == NULL. * [*/*] [tools/winapi-check] Added zillions of missing WINAPI's and __cdecl's. (oops, several caused by myself) Wrote script for automated checking. * [if1632/compobj.spec] Many stub names. * [misc/ddeml.c] [ole/compobj.c] Some stubs. Tue Sep 9 21:36:48 1998 Anders Carlsson <anders.carlsson@linux.nu> * [dlls/comctl32/Makefile.in] [dlls/comctl32/commctrl.c] [dlls/comctl32/tab.c] [include/commctrl.h] [include/tab.h] Added preliminary tab control support. Sat Sep 5 16:27:20 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk> * [graphics/psdrv/*] More changes to the PostScript driver: Implemented pens and solid brushes. Colour/greyscale for fonts, pens and brushes. To get coloured output you need to have *ColorDevice set to true in your PPD, otherwise you'll get greyscale. Landscape mode now works, as does non-A4 page sizes. Encoding of fonts to ANSI is better, Symbol works again. * [objects/dc.c] [include/gdi.h] [*/*] Moved dc->w.{text,background}Pixel to X11DRV_PDEVICE where they belong. Sat Sep 5 05:12:09 1998 Ove Kaaven <ovek@arcticnet.no> * [include/dosexe.h] [include/miscemu.h] [include/msdos.h] [loader/dos/dosvm.c] [loader/dos/module.c] [msdos/dpmi.c] [msdos/int2f.c] [msdos/interrupts.c] Fixed portability. Adapted some code to make it easier to integrate the DOS subsystem with the DPMI subsystem, made the DPMI simulated real-mode interrupts be handled the V86 way. Added support for .COM files. Made int2f DPMI check fail, to avoid pkunzip crashing in attempting to use DPMI. Generally moved stuff around a little. It is now technically possible to load several DOS programs into the same memory space. Not tested, though. Fri Sep 4 21:40:45 1998 Marcus Meissner <marcus@jet.franken.de> * [if1632/kernel.spec] Changed 500-53x stubnames accordingly to nt3.51 krnl386.exe. * [win32/except.c] Fixed one bad program behaviour, (deleting SEH while in first walk). RtlUnwind is broken too I think (it should unwind on success, not while walking the exception chain). * [ole/ole2nls.c] Get*DefaultLCID returns 0x400|id. expected by one application. * [if1632/snoop.c] Handle non-standard SP returns more graceful. * [windows/class.c] hinstances are mostly irrelevant for win32. * [memory/string.c] [misc/registry.c] lstrcmpi32W: use toupper for characters < 0x100. (speedup hack for registry.c) Some small speedup hacks for registry.c Thu Sep 3 20:40:16 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de> * [Makefile.in][configure][configure.in][dlls/Makefile.in] [dlls/comctl32/Makefile.in] Created dlls/comctl32 and moved the common controls stuff to it. * [misc/version.c] Removed COMCTL32_DllGetVersion. The fixed function is part of the common controls stuff. * [dlls/comctl32/*.c][include/commctrl.h] Added structure size tests. * [dlls/comctl32/toolbar.c] Fixed a bug in TOOLBAR_GetMaxWidth(). * [dlls/comctl32/animate.c][include/animate.h] [dlls/comctl32/comboex.c][include/comboex.h] [dlls/comctl32/hotkey.c][include/hotkey.h] [dlls/comctl32/listview.c][include/listview.h] [dlls/comctl32/commctrl.c][include/commctrl.h] New files. Added Animation, ComboBoxEx, Hotkey and Listview control dummies. * [dlls/comctl32/tooltips.c] Fixed a display bug and font selection. * [dlls/comctl32/comctl32undoc.c][include/commctrl.h] Added missing DPA functions. Fixed bugs and published the function prototypes. * [documentation/common_controls] Updated. Wed Sep 2 15:43:45 1998 Patrik Stridvall <ps@leissner.se> * [AUTHORS] [include/authors.h] Added myself as a Wine author. * [memory/virtual.c] [objects/dc.c] Fixed runtime errors for Solaris. * [misc/ddeml.c] [objects/gdiobj.c] Minor fixes. * [win32/device.c] Added stubs for IFSMgr VxDCall and a partial implementation of IFSMgr DeviceIo. * [relay32/Makefile.in] [relay32/builtin32.c] [relay32/imm32.spec] [relay32/msnet32.spec] [relay32/oledlg.spec] Added new spec files for IMM32.DLL, MSNET32.DLL, OLEDLG.DLL. * [misc/Makefile.in] [misc/imm.c] [include/imm.h] Added news files for implementation of IMM32.DLL. All functions return 0 as is correct for all Western Languages. * [ole/Makefile.in] [ole/oledlg.c] [include/oledlg.h] Added new files for implementation of OLEDLG.DLL. Added stubs with FIXME:s for all functions. Wed Sep 2 10:50:00 1998 Juergen Schmied <juergen.schmied@metronet.de> * [dlls/shell32/contmenu.c][dlls/shell32/shellole.c] [dlls/shell32/shlfolder.c][dlls/shell32/shlview.c] [documentation/shell32][include/shell.h] Clean up, bugfixes. * [dlls/shell32/enumidlist.c] Fileattributes implemented. * [dlls/shell32/pidl.c] Class pidlmgr splited into functions, structures changed, some functions rewritten. * [dlls/shell32/shell32_main.c] Small changes and bugfixes SHGetFileInfoA, SHGetSpecialFolderLocation. * [dlls/shell32/shellord.c][relay32/shell32.spec] Parameter documented, implemented SHCloneSpecialIDList. Stub improved ShellExecuteEx32A. New stubs SHFind_InitMenuPopup, FileMenu_InitMenuPopup, FileMenu_Create, FileMenu_TrackPopupMenuEx, SHWinHelp, SHRunConrolPanel, DAD_ShowDragImage, FileMenu_Destroy, SHGetDataFromIDListA, SHFileOperationA. * [include/winnls.h][include/ole2nls.c] TIME_FORCE24HOURFORMAT, TIME_NOTIMEMARKER implemented in OLE_GetFormatA, GetTimeFormat32A. * [win32/code_page.c] WideCharToMultiByte: parameter checking and returning of strlen implemented. * [windows/keyboard.c][windows/defwnd.c] Debug messages added. * [windows/win.c] WIN_SetWindowLong GWL_STYLE and GWL_EXSTYLE implemented. * [controls/menu.c] Missing line added. * [include/winerror.h] Macros for SUCCEEDED and FAILED added. Mon Aug 31 00:55:31 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de> * [loader/module.c] Bugfix: LoadModule16 should *not* call LoadModule32. * [files/dos_fs.c] Bugfix: don't crash if given directory doesn't exist. Sat Aug 29 15:00:49 1998 Turchanov Sergey <turchanov@usa.net> * [include/mmsystem.h][multimedia/mmsystem.c][relay32/winmm.spec] Almost completed implementation of [snd]PlaySound (except flags SND_ALIAS_ID and SND_APPLICATION). * [if1632/user.spec][windows/winpos.c] Added SetWindowRgn16 stub. Sat Aug 29 02:53:31 1998 Alexander Lukyanov <lav@long.yar.ru> * [files/drive.c] GetDriveType32A: return DRIVE_DOESNOTEXIST in case of non existent drive. * [msdos/int21.c] INT21_FindFirstFCB: check drive validity to prevent oops. * [win32/file.c] CreateFile32A: duplicate STD_{INPUT,OUTPUT}_HANDLE. * [files/dos_fs.c] Make DOSFS_OpenDir treat "" as "/". DOSFS_OpenDevice: duplicate STD_{INPUT,OUTPUT}_HANDLE. * [windows/dialog.c] GetNextDlgTabItem32: use last/first item instead of first/last when hwndCtrl==0. This fixes initial focus. Sat Aug 29 02:46:32 1998 Adrian Harvey <adrian@select.com.au> * [include/process.h] [include/process.c] Renamed PROCESS_SELF to CURRENT_PROCESS_PSEUDOHANDLE in line with thread constant, and Win32 documentation (which calls it a pseudohandle.) Made GetCurrentProcess actually use this constant instead of the value. * [include/process.h] [include/thread.h] [scheduler/thread.c] [scheduler/process.c] [scheduler/handle.c] Modify HANDLE_GetObjPtr to understand about CURRENT_THREAD_PSEUDOHANDLE and CURRENT_PROCESS_PSEUDOHANDLE. This allows DuplicateHandle to do the correct thing with these handles. Removed now duplicate functionality from THREAD_GetPtr and PROCESS_GetPtr. * [loader/ne/segment.c] Fixed two places where HFILE32s were being created and passed to 16-bit code. This should unbreak NE self-loading code. Added two casts to remove compile time warnings. Fri Aug 28 21:04:13 1998 Joseph Pranevich <knight@baltimore.wwaves.com> * [msdos/dosmem.c] [msdos/int2f.c] Added beginnings of DOS error table. * [msdos/int1a.c] Stub for subfunction 0xb0. * [msdos/int10.c] [loader/dos/dosvm.c] INT 10 support completely rewritten and lots of debugging added. Now, DOS apps that use INT 10 to write to the screen will work. (Beyond Zork does, at least. Somewhat.) * [include/miscemu.h] [msdos/dosmem.c] [msdos/int21.c] Another shot at getting MS's generic error message facility right. * [msdos/int21.c] Command.Com wanted to set its own PSP address. I let it. Wed Aug 26 12:26:20 1998 Matthew Toseland <Matthew.Toseland@btinternet.com> * [include/file.h] [misc/lzexpand.c] Fixed LZCopy16 by fixing HFILE16/HFILE32 convertor macros so don't convert lzw handles. Tue Aug 25 22:22:55 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> * [misc/registry.c] In RegEnumvalue, ivalue == 0 is a legal request and should return the first entry. * [msdos/int21.c] Add handling for Int21-48/49 in Win16. Makes blinker demo work. * [windows/winproc.c] Add Msg32A<->Msg32W translation for LB_ADDSTRING. Tue Aug 25 21:03:31 1998 Kristian Nielsen <kristian.nielsen@risoe.dk> * [windows/win.c] Fix for SetParent(): MS Windows 3.11 does not clear the WS_CHILD flag when a child window is reparented to the desktop window. Mon Aug 24 20:55:22 1998 Berend Reitsma <berend at asset-control dot com> * [controls/menu.c] Menus created with SetMenuItemInfo and InsertMenuItem should work now. Sun Aug 23 23:23:23 1998 Alex Korobka <korobka@ams.sunysb.edu> * [controls/combo.c] Added CB_GETITEMHEIGHT. * [windows/winpos.c] WM_NCHITTEST, SWP_FRAMECHANGED bugfixes. Sat Aug 22 21:15:29 1998 Alex Priem <alexp@sci.kun.nl> * [files/profile.c] [include/windows.h] Added GetPrivateProfileSectionNames[AW],GetPrivateProfileSectionW, GetPrivateProfileStructW, GetProfileSectionW, WriteProfileSection[AW], WritePrivateProfileStructW.
578 lines
16 KiB
C
578 lines
16 KiB
C
/*
|
|
* Default window procedure
|
|
*
|
|
* Copyright 1993, 1996 Alexandre Julliard
|
|
* 1995 Alex Korobka
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
#include "win.h"
|
|
#include "user.h"
|
|
#include "heap.h"
|
|
#include "nonclient.h"
|
|
#include "winpos.h"
|
|
#include "dce.h"
|
|
#include "sysmetrics.h"
|
|
#include "debug.h"
|
|
#include "spy.h"
|
|
#include "tweak.h"
|
|
|
|
/* Last COLOR id */
|
|
#define COLOR_MAX COLOR_BTNHIGHLIGHT
|
|
|
|
/* bits in the dwKeyData */
|
|
#define KEYDATA_ALT 0x2000
|
|
#define KEYDATA_PREVSTATE 0x4000
|
|
|
|
static short iF10Key = 0;
|
|
static short iMenuSysKey = 0;
|
|
|
|
/***********************************************************************
|
|
* DEFWND_HandleWindowPosChanged
|
|
*
|
|
* Handle the WM_WINDOWPOSCHANGED message.
|
|
*/
|
|
static void DEFWND_HandleWindowPosChanged( WND *wndPtr, UINT32 flags )
|
|
{
|
|
WPARAM16 wp = SIZE_RESTORED;
|
|
|
|
if (!(flags & SWP_NOCLIENTMOVE))
|
|
SendMessage16( wndPtr->hwndSelf, WM_MOVE, 0,
|
|
MAKELONG(wndPtr->rectClient.left, wndPtr->rectClient.top));
|
|
if (!(flags & SWP_NOCLIENTSIZE))
|
|
{
|
|
if (wndPtr->dwStyle & WS_MAXIMIZE) wp = SIZE_MAXIMIZED;
|
|
else if (wndPtr->dwStyle & WS_MINIMIZE) wp = SIZE_MINIMIZED;
|
|
|
|
SendMessage16( wndPtr->hwndSelf, WM_SIZE, wp,
|
|
MAKELONG(wndPtr->rectClient.right-wndPtr->rectClient.left,
|
|
wndPtr->rectClient.bottom-wndPtr->rectClient.top));
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* DEFWND_SetText
|
|
*
|
|
* Set the window text.
|
|
*/
|
|
void DEFWND_SetText( WND *wndPtr, LPCSTR text )
|
|
{
|
|
if (!text) text = "";
|
|
if (wndPtr->text) HeapFree( SystemHeap, 0, wndPtr->text );
|
|
wndPtr->text = HEAP_strdupA( SystemHeap, 0, text );
|
|
if (wndPtr->window)
|
|
{
|
|
TSXStoreName( display, wndPtr->window, wndPtr->text );
|
|
TSXSetIconName( display, wndPtr->window, wndPtr->text );
|
|
}
|
|
}
|
|
|
|
/***********************************************************************
|
|
* DEFWND_ControlColor
|
|
*
|
|
* Default colors for control painting.
|
|
*/
|
|
HBRUSH32 DEFWND_ControlColor( HDC32 hDC, UINT16 ctlType )
|
|
{
|
|
if( ctlType == CTLCOLOR_SCROLLBAR)
|
|
{
|
|
HBRUSH32 hb = GetSysColorBrush32(COLOR_SCROLLBAR);
|
|
SetBkColor32( hDC, RGB(255, 255, 255) );
|
|
SetTextColor32( hDC, RGB(0, 0, 0) );
|
|
UnrealizeObject32( hb );
|
|
return hb;
|
|
}
|
|
|
|
SetTextColor32( hDC, GetSysColor32(COLOR_WINDOWTEXT));
|
|
|
|
if (TWEAK_Win95Look) {
|
|
if ((ctlType == CTLCOLOR_EDIT) || (ctlType == CTLCOLOR_LISTBOX))
|
|
SetBkColor32( hDC, GetSysColor32(COLOR_WINDOW) );
|
|
else {
|
|
SetBkColor32( hDC, GetSysColor32(COLOR_3DFACE) );
|
|
return GetSysColorBrush32(COLOR_3DFACE);
|
|
}
|
|
}
|
|
else
|
|
SetBkColor32( hDC, GetSysColor32(COLOR_WINDOW) );
|
|
return GetSysColorBrush32(COLOR_WINDOW);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* DEFWND_SetRedraw
|
|
*/
|
|
static void DEFWND_SetRedraw( WND* wndPtr, WPARAM32 wParam )
|
|
{
|
|
BOOL32 bVisible = wndPtr->dwStyle & WS_VISIBLE;
|
|
|
|
TRACE(win,"%04x %i\n", wndPtr->hwndSelf, (wParam!=0) );
|
|
|
|
if( wParam )
|
|
{
|
|
if( !bVisible )
|
|
{
|
|
wndPtr->dwStyle |= WS_VISIBLE;
|
|
DCE_InvalidateDCE( wndPtr, &wndPtr->rectWindow );
|
|
}
|
|
}
|
|
else if( bVisible )
|
|
{
|
|
if( wndPtr->dwStyle & WS_MINIMIZE ) wParam = RDW_VALIDATE;
|
|
else wParam = RDW_ALLCHILDREN | RDW_VALIDATE;
|
|
|
|
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, 0, wParam, 0 );
|
|
DCE_InvalidateDCE( wndPtr, &wndPtr->rectWindow );
|
|
wndPtr->dwStyle &= ~WS_VISIBLE;
|
|
}
|
|
}
|
|
|
|
/***********************************************************************
|
|
* DEFWND_DefWinProc
|
|
*
|
|
* Default window procedure for messages that are the same in Win16 and Win32.
|
|
*/
|
|
static LRESULT DEFWND_DefWinProc( WND *wndPtr, UINT32 msg, WPARAM32 wParam,
|
|
LPARAM lParam )
|
|
{
|
|
switch(msg)
|
|
{
|
|
case WM_NCPAINT:
|
|
return NC_HandleNCPaint( wndPtr->hwndSelf, (HRGN32)wParam );
|
|
|
|
case WM_NCHITTEST:
|
|
return NC_HandleNCHitTest( wndPtr->hwndSelf, MAKEPOINT16(lParam) );
|
|
|
|
case WM_NCLBUTTONDOWN:
|
|
return NC_HandleNCLButtonDown( wndPtr, wParam, lParam );
|
|
|
|
case WM_LBUTTONDBLCLK:
|
|
case WM_NCLBUTTONDBLCLK:
|
|
return NC_HandleNCLButtonDblClk( wndPtr, wParam, lParam );
|
|
|
|
case WM_RBUTTONDOWN:
|
|
case WM_NCRBUTTONDOWN:
|
|
if ((wndPtr->flags & WIN_ISWIN32) || TWEAK_Win95Look)
|
|
{
|
|
ClientToScreen16(wndPtr->hwndSelf, (LPPOINT16)&lParam);
|
|
SendMessage32A( wndPtr->hwndSelf, WM_CONTEXTMENU,
|
|
wndPtr->hwndSelf, lParam);
|
|
}
|
|
break;
|
|
|
|
case WM_CONTEXTMENU:
|
|
if( wndPtr->dwStyle & WS_CHILD )
|
|
SendMessage32A( wndPtr->parent->hwndSelf, msg, wParam, lParam );
|
|
else
|
|
if (wndPtr->hSysMenu)
|
|
{ /*
|
|
TrackPopupMenu32(wndPtr->hSysMenu,TPM_LEFTALIGN | TPM_RETURNCMD,LOWORD(lParam),HIWORD(lParam),0,wndPtr->hwndSelf,NULL);
|
|
DestroyMenu32(wndPtr->hSysMenu);
|
|
*/
|
|
FIXME(win,"Display default popup menu\n");
|
|
/* Track system popup if click was in the caption area. */
|
|
}
|
|
break;
|
|
|
|
case WM_NCACTIVATE:
|
|
return NC_HandleNCActivate( wndPtr, wParam );
|
|
|
|
case WM_NCDESTROY:
|
|
if (wndPtr->text) HeapFree( SystemHeap, 0, wndPtr->text );
|
|
wndPtr->text = NULL;
|
|
if (wndPtr->pVScroll) HeapFree( SystemHeap, 0, wndPtr->pVScroll );
|
|
if (wndPtr->pHScroll) HeapFree( SystemHeap, 0, wndPtr->pHScroll );
|
|
wndPtr->pVScroll = wndPtr->pHScroll = NULL;
|
|
return 0;
|
|
|
|
case WM_PAINTICON:
|
|
case WM_PAINT:
|
|
{
|
|
PAINTSTRUCT16 ps;
|
|
HDC16 hdc = BeginPaint16( wndPtr->hwndSelf, &ps );
|
|
if( hdc )
|
|
{
|
|
if( (wndPtr->dwStyle & WS_MINIMIZE) && wndPtr->class->hIcon )
|
|
{
|
|
int x = (wndPtr->rectWindow.right - wndPtr->rectWindow.left -
|
|
SYSMETRICS_CXICON)/2;
|
|
int y = (wndPtr->rectWindow.bottom - wndPtr->rectWindow.top -
|
|
SYSMETRICS_CYICON)/2;
|
|
TRACE(win,"Painting class icon: vis rect=(%i,%i - %i,%i)\n",
|
|
ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom );
|
|
DrawIcon32( hdc, x, y, wndPtr->class->hIcon );
|
|
}
|
|
EndPaint16( wndPtr->hwndSelf, &ps );
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
case WM_SETREDRAW:
|
|
DEFWND_SetRedraw( wndPtr, wParam );
|
|
return 0;
|
|
|
|
case WM_CLOSE:
|
|
DestroyWindow32( wndPtr->hwndSelf );
|
|
return 0;
|
|
|
|
case WM_MOUSEACTIVATE:
|
|
if (wndPtr->dwStyle & WS_CHILD)
|
|
{
|
|
LONG ret = SendMessage16( wndPtr->parent->hwndSelf,
|
|
WM_MOUSEACTIVATE, wParam, lParam );
|
|
if (ret) return ret;
|
|
}
|
|
|
|
/* Caption clicks are handled by the NC_HandleNCLButtonDown() */
|
|
return (LOWORD(lParam) == HTCAPTION) ? MA_NOACTIVATE : MA_ACTIVATE;
|
|
|
|
case WM_ACTIVATE:
|
|
if (LOWORD(wParam) != WA_INACTIVE) SetFocus32( wndPtr->hwndSelf );
|
|
break;
|
|
|
|
case WM_ERASEBKGND:
|
|
case WM_ICONERASEBKGND:
|
|
{
|
|
if (!wndPtr->class->hbrBackground) return 0;
|
|
|
|
if (wndPtr->class->hbrBackground <= (HBRUSH16)(COLOR_MAX+1))
|
|
{
|
|
HBRUSH32 hbrush = CreateSolidBrush32(
|
|
GetSysColor32(((DWORD)wndPtr->class->hbrBackground)-1));
|
|
FillWindow( GetParent16(wndPtr->hwndSelf), wndPtr->hwndSelf,
|
|
(HDC16)wParam, hbrush);
|
|
DeleteObject32( hbrush );
|
|
}
|
|
else FillWindow( GetParent16(wndPtr->hwndSelf), wndPtr->hwndSelf,
|
|
(HDC16)wParam, wndPtr->class->hbrBackground );
|
|
return 1;
|
|
}
|
|
|
|
case WM_GETDLGCODE:
|
|
return 0;
|
|
|
|
case WM_CTLCOLORMSGBOX:
|
|
case WM_CTLCOLOREDIT:
|
|
case WM_CTLCOLORLISTBOX:
|
|
case WM_CTLCOLORBTN:
|
|
case WM_CTLCOLORDLG:
|
|
case WM_CTLCOLORSTATIC:
|
|
case WM_CTLCOLORSCROLLBAR:
|
|
return (LRESULT)DEFWND_ControlColor( (HDC32)wParam, msg - WM_CTLCOLORMSGBOX );
|
|
|
|
case WM_CTLCOLOR:
|
|
return (LRESULT)DEFWND_ControlColor( (HDC32)wParam, HIWORD(lParam) );
|
|
|
|
case WM_GETTEXTLENGTH:
|
|
if (wndPtr->text) return (LRESULT)strlen(wndPtr->text);
|
|
return 0;
|
|
|
|
case WM_SETCURSOR:
|
|
if (wndPtr->dwStyle & WS_CHILD)
|
|
if (SendMessage16(wndPtr->parent->hwndSelf, WM_SETCURSOR,
|
|
wParam, lParam))
|
|
return TRUE;
|
|
return NC_HandleSetCursor( wndPtr->hwndSelf, wParam, lParam );
|
|
|
|
case WM_SYSCOMMAND:
|
|
return NC_HandleSysCommand( wndPtr->hwndSelf, wParam,
|
|
MAKEPOINT16(lParam) );
|
|
|
|
case WM_KEYDOWN:
|
|
if(wParam == VK_F10) iF10Key = VK_F10;
|
|
break;
|
|
|
|
case WM_SYSKEYDOWN:
|
|
if( HIWORD(lParam) & KEYDATA_ALT )
|
|
{
|
|
/* if( HIWORD(lParam) & ~KEYDATA_PREVSTATE ) */
|
|
if( wParam == VK_MENU && !iMenuSysKey )
|
|
iMenuSysKey = 1;
|
|
else
|
|
iMenuSysKey = 0;
|
|
|
|
iF10Key = 0;
|
|
|
|
if( wParam == VK_F4 ) /* try to close the window */
|
|
{
|
|
HWND32 hWnd = WIN_GetTopParent( wndPtr->hwndSelf );
|
|
wndPtr = WIN_FindWndPtr( hWnd );
|
|
if( wndPtr && !(wndPtr->class->style & CS_NOCLOSE) )
|
|
PostMessage16( hWnd, WM_SYSCOMMAND, SC_CLOSE, 0 );
|
|
}
|
|
}
|
|
else if( wParam == VK_F10 )
|
|
iF10Key = 1;
|
|
else
|
|
if( wParam == VK_ESCAPE && (GetKeyState32(VK_SHIFT) & 0x8000))
|
|
SendMessage16( wndPtr->hwndSelf, WM_SYSCOMMAND,
|
|
(WPARAM16)SC_KEYMENU, (LPARAM)VK_SPACE);
|
|
break;
|
|
|
|
case WM_KEYUP:
|
|
case WM_SYSKEYUP:
|
|
/* Press and release F10 or ALT */
|
|
if (((wParam == VK_MENU) && iMenuSysKey) ||
|
|
((wParam == VK_F10) && iF10Key))
|
|
SendMessage16( WIN_GetTopParent(wndPtr->hwndSelf),
|
|
WM_SYSCOMMAND, SC_KEYMENU, 0L );
|
|
iMenuSysKey = iF10Key = 0;
|
|
break;
|
|
|
|
case WM_SYSCHAR:
|
|
iMenuSysKey = 0;
|
|
if (wParam == VK_RETURN && (wndPtr->dwStyle & WS_MINIMIZE))
|
|
{
|
|
PostMessage16( wndPtr->hwndSelf, WM_SYSCOMMAND,
|
|
(WPARAM16)SC_RESTORE, 0L );
|
|
break;
|
|
}
|
|
if ((HIWORD(lParam) & KEYDATA_ALT) && wParam)
|
|
{
|
|
if (wParam == VK_TAB || wParam == VK_ESCAPE) break;
|
|
if (wParam == VK_SPACE && (wndPtr->dwStyle & WS_CHILD))
|
|
SendMessage16( wndPtr->parent->hwndSelf, msg, wParam, lParam );
|
|
else
|
|
SendMessage16( wndPtr->hwndSelf, WM_SYSCOMMAND,
|
|
(WPARAM16)SC_KEYMENU, (LPARAM)(DWORD)wParam );
|
|
}
|
|
else /* check for Ctrl-Esc */
|
|
if (wParam != VK_ESCAPE) MessageBeep32(0);
|
|
break;
|
|
|
|
case WM_SHOWWINDOW:
|
|
if (!lParam) return 0; /* sent from ShowWindow */
|
|
if (!(wndPtr->dwStyle & WS_POPUP) || !wndPtr->owner) return 0;
|
|
if ((wndPtr->dwStyle & WS_VISIBLE) && wParam) return 0;
|
|
else if (!(wndPtr->dwStyle & WS_VISIBLE) && !wParam) return 0;
|
|
ShowWindow32( wndPtr->hwndSelf, wParam ? SW_SHOWNOACTIVATE : SW_HIDE );
|
|
break;
|
|
|
|
case WM_CANCELMODE:
|
|
if (wndPtr->parent == WIN_GetDesktop()) EndMenu();
|
|
if (GetCapture32() == wndPtr->hwndSelf) ReleaseCapture();
|
|
break;
|
|
|
|
case WM_VKEYTOITEM:
|
|
case WM_CHARTOITEM:
|
|
return -1;
|
|
|
|
case WM_DROPOBJECT:
|
|
return DRAG_FILE;
|
|
|
|
case WM_QUERYDROPOBJECT:
|
|
if (wndPtr->dwExStyle & WS_EX_ACCEPTFILES) return 1;
|
|
break;
|
|
|
|
case WM_QUERYDRAGICON:
|
|
{
|
|
HICON16 hIcon=0;
|
|
UINT16 len;
|
|
|
|
if( (hIcon=wndPtr->class->hCursor) ) return (LRESULT)hIcon;
|
|
for(len=1; len<64; len++)
|
|
if((hIcon=LoadIcon16(wndPtr->hInstance,MAKEINTRESOURCE16(len))))
|
|
return (LRESULT)hIcon;
|
|
return (LRESULT)LoadIcon16(NULL,IDI_APPLICATION16);
|
|
}
|
|
break;
|
|
|
|
case WM_ISACTIVEICON:
|
|
return ((wndPtr->flags & WIN_NCACTIVATED) != 0);
|
|
|
|
case WM_QUERYOPEN:
|
|
case WM_QUERYENDSESSION:
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
* DefWindowProc16 (USER.107)
|
|
*/
|
|
LRESULT WINAPI DefWindowProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam,
|
|
LPARAM lParam )
|
|
{
|
|
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
|
LRESULT result = 0;
|
|
|
|
if (!wndPtr) return 0;
|
|
SPY_EnterMessage( SPY_DEFWNDPROC16, hwnd, msg, wParam, lParam );
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_NCCREATE:
|
|
{
|
|
CREATESTRUCT16 *cs = (CREATESTRUCT16 *)PTR_SEG_TO_LIN(lParam);
|
|
if (cs->lpszName)
|
|
DEFWND_SetText( wndPtr, (LPSTR)PTR_SEG_TO_LIN(cs->lpszName) );
|
|
result = 1;
|
|
}
|
|
break;
|
|
|
|
case WM_NCCALCSIZE:
|
|
{
|
|
RECT32 rect32;
|
|
CONV_RECT16TO32( (RECT16 *)PTR_SEG_TO_LIN(lParam), &rect32 );
|
|
result = NC_HandleNCCalcSize( wndPtr, &rect32 );
|
|
CONV_RECT32TO16( &rect32, (RECT16 *)PTR_SEG_TO_LIN(lParam) );
|
|
}
|
|
break;
|
|
|
|
case WM_WINDOWPOSCHANGING:
|
|
result = WINPOS_HandleWindowPosChanging16( wndPtr,
|
|
(WINDOWPOS16 *)PTR_SEG_TO_LIN(lParam) );
|
|
break;
|
|
|
|
case WM_WINDOWPOSCHANGED:
|
|
{
|
|
WINDOWPOS16 * winPos = (WINDOWPOS16 *)PTR_SEG_TO_LIN(lParam);
|
|
DEFWND_HandleWindowPosChanged( wndPtr, winPos->flags );
|
|
}
|
|
break;
|
|
|
|
case WM_GETTEXT:
|
|
if (wParam && wndPtr->text)
|
|
{
|
|
lstrcpyn32A( (LPSTR)PTR_SEG_TO_LIN(lParam), wndPtr->text, wParam );
|
|
result = (LRESULT)strlen( (LPSTR)PTR_SEG_TO_LIN(lParam) );
|
|
}
|
|
break;
|
|
|
|
case WM_SETTEXT:
|
|
DEFWND_SetText( wndPtr, (LPSTR)PTR_SEG_TO_LIN(lParam) );
|
|
if( wndPtr->dwStyle & WS_CAPTION ) NC_HandleNCPaint( hwnd , (HRGN32)1 );
|
|
break;
|
|
|
|
default:
|
|
result = DEFWND_DefWinProc( wndPtr, msg, wParam, lParam );
|
|
break;
|
|
}
|
|
|
|
SPY_ExitMessage( SPY_RESULT_DEFWND16, hwnd, msg, result );
|
|
return result;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* DefWindowProc32A [USER32.126]
|
|
*
|
|
*/
|
|
LRESULT WINAPI DefWindowProc32A( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
|
|
LPARAM lParam )
|
|
{
|
|
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
|
LRESULT result = 0;
|
|
|
|
if (!wndPtr) return 0;
|
|
SPY_EnterMessage( SPY_DEFWNDPROC32, hwnd, msg, wParam, lParam );
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_NCCREATE:
|
|
{
|
|
CREATESTRUCT32A *cs = (CREATESTRUCT32A *)lParam;
|
|
if (cs->lpszName) DEFWND_SetText( wndPtr, cs->lpszName );
|
|
result = 1;
|
|
}
|
|
break;
|
|
|
|
case WM_NCCALCSIZE:
|
|
result = NC_HandleNCCalcSize( wndPtr, (RECT32 *)lParam );
|
|
break;
|
|
|
|
case WM_WINDOWPOSCHANGING:
|
|
result = WINPOS_HandleWindowPosChanging32( wndPtr,
|
|
(WINDOWPOS32 *)lParam );
|
|
break;
|
|
|
|
case WM_WINDOWPOSCHANGED:
|
|
{
|
|
WINDOWPOS32 * winPos = (WINDOWPOS32 *)lParam;
|
|
DEFWND_HandleWindowPosChanged( wndPtr, winPos->flags );
|
|
}
|
|
break;
|
|
|
|
case WM_GETTEXT:
|
|
if (wParam && wndPtr->text)
|
|
{
|
|
lstrcpyn32A( (LPSTR)lParam, wndPtr->text, wParam );
|
|
result = (LRESULT)strlen( (LPSTR)lParam );
|
|
}
|
|
break;
|
|
|
|
case WM_SETTEXT:
|
|
DEFWND_SetText( wndPtr, (LPSTR)lParam );
|
|
NC_HandleNCPaint( hwnd , (HRGN32)1 ); /* Repaint caption */
|
|
break;
|
|
|
|
default:
|
|
result = DEFWND_DefWinProc( wndPtr, msg, wParam, lParam );
|
|
break;
|
|
}
|
|
|
|
SPY_ExitMessage( SPY_RESULT_DEFWND32, hwnd, msg, result );
|
|
return result;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* DefWindowProc32W [USER32.127] Calls default window message handler
|
|
*
|
|
* Calls default window procedure for messages not processed
|
|
* by application.
|
|
*
|
|
* RETURNS
|
|
* Return value is dependent upon the message.
|
|
*/
|
|
LRESULT WINAPI DefWindowProc32W(
|
|
HWND32 hwnd, /* [in] window procedure recieving message */
|
|
UINT32 msg, /* [in] message identifier */
|
|
WPARAM32 wParam, /* [in] first message parameter */
|
|
LPARAM lParam ) /* [in] second message parameter */
|
|
{
|
|
LRESULT result;
|
|
|
|
switch(msg)
|
|
{
|
|
case WM_NCCREATE:
|
|
{
|
|
CREATESTRUCT32W *cs = (CREATESTRUCT32W *)lParam;
|
|
if (cs->lpszName)
|
|
{
|
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
|
LPSTR str = HEAP_strdupWtoA(GetProcessHeap(), 0, cs->lpszName);
|
|
DEFWND_SetText( wndPtr, str );
|
|
HeapFree( GetProcessHeap(), 0, str );
|
|
}
|
|
result = 1;
|
|
}
|
|
break;
|
|
|
|
case WM_GETTEXT:
|
|
{
|
|
LPSTR str = HeapAlloc( GetProcessHeap(), 0, wParam );
|
|
result = DefWindowProc32A( hwnd, msg, wParam, (LPARAM)str );
|
|
lstrcpynAtoW( (LPWSTR)lParam, str, wParam );
|
|
HeapFree( GetProcessHeap(), 0, str );
|
|
}
|
|
break;
|
|
|
|
case WM_SETTEXT:
|
|
{
|
|
LPSTR str = HEAP_strdupWtoA( GetProcessHeap(), 0, (LPWSTR)lParam );
|
|
result = DefWindowProc32A( hwnd, msg, wParam, (LPARAM)str );
|
|
HeapFree( GetProcessHeap(), 0, str );
|
|
}
|
|
break;
|
|
|
|
default:
|
|
result = DefWindowProc32A( hwnd, msg, wParam, lParam );
|
|
break;
|
|
}
|
|
return result;
|
|
}
|