mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 15:13:36 +00:00
DefWindowProcA/W:
- Fix WM_GETTEXTLENGHT message - Add WM_IME_NOTIFY message - Implement WM_IME_KEYDOWN, WM_IME_KEYUP, WM_IME_SETCONTEXT, WM_IME_CHAR, WM_IME_STARTCOMPOSITION, WM_IME_COMPOSITION, WM_IME_ENDCOMPOSITION, WM_IME_SELECT, WM_IME_NOTIFY - Remove CascadeWindows and TileWindows from window.c (it is already declared in mdi.c) - Implement TileChildWindows, CascadeChildWindows, GetInternalWindowPos, SetSysColorsTemp - Add checking params for GetProcessDefaultLayout, SetProcessDefaultLayout, GetMouseMovePointsEx, GetRawInputDeviceList - LockSetForegroundWindow return TRUE - GetRawInputBuffer, GetRawInputDeviceInfoA/W, DefRawInputProc, GetRawInputData, GetRegisteredRawInputDevices return 0 Based on Wine implementation svn path=/trunk/; revision=36933
This commit is contained in:
parent
8a90945651
commit
1e2dcd06e8
3 changed files with 318 additions and 107 deletions
|
@ -42,8 +42,22 @@ GetMouseMovePointsEx(
|
|||
int nBufPoints,
|
||||
DWORD resolution)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
if((cbSize != sizeof(MOUSEMOVEPOINT)) || (nBufPoints < 0) || (nBufPoints > 64))
|
||||
{
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(!lppt || !lpptBuf)
|
||||
{
|
||||
SetLastError(ERROR_NOACCESS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
UNIMPLEMENTED;
|
||||
|
||||
SetLastError(ERROR_POINT_NOT_FOUND);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -137,8 +151,15 @@ GetInternalWindowPos(
|
|||
LPPOINT ptIcon
|
||||
)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
WINDOWPLACEMENT wndpl;
|
||||
|
||||
if (GetWindowPlacement(hwnd, &wndpl))
|
||||
{
|
||||
if (rectWnd) *rectWnd = wndpl.rcNormalPosition;
|
||||
if (ptIcon) *ptIcon = wndpl.ptMinPosition;
|
||||
return wndpl.showCmd;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -226,41 +247,91 @@ UserRealizePalette ( HDC hDC )
|
|||
return NtUserCallOneParam((DWORD) hDC, ONEPARAM_ROUTINE_REALIZEPALETTE);
|
||||
}
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
|
||||
/*************************************************************************
|
||||
* SetSysColorsTemp (USER32.@) (Wine 10/22/2008)
|
||||
*
|
||||
* UNDOCUMENTED !!
|
||||
*
|
||||
* Called by W98SE desk.cpl Control Panel Applet:
|
||||
* handle = SetSysColorsTemp(ptr, ptr, nCount); ("set" call)
|
||||
* result = SetSysColorsTemp(NULL, NULL, handle); ("restore" call)
|
||||
*
|
||||
* pPens is an array of COLORREF values, which seems to be used
|
||||
* to indicate the color values to create new pens with.
|
||||
*
|
||||
* pBrushes is an array of solid brush handles (returned by a previous
|
||||
* CreateSolidBrush), which seems to contain the brush handles to set
|
||||
* for the system colors.
|
||||
*
|
||||
* n seems to be used for
|
||||
* a) indicating the number of entries to operate on (length of pPens,
|
||||
* pBrushes)
|
||||
* b) passing the handle that points to the previously used color settings.
|
||||
* I couldn't figure out in hell what kind of handle this is on
|
||||
* Windows. I just use a heap handle instead. Shouldn't matter anyway.
|
||||
*
|
||||
* RETURNS
|
||||
* heap handle of our own copy of the current syscolors in case of
|
||||
* "set" call, i.e. pPens, pBrushes != NULL.
|
||||
* TRUE (unconditionally !) in case of "restore" call,
|
||||
* i.e. pPens, pBrushes == NULL.
|
||||
* FALSE in case of either pPens != NULL and pBrushes == NULL
|
||||
* or pPens == NULL and pBrushes != NULL.
|
||||
*
|
||||
* I'm not sure whether this implementation is 100% correct. [AM]
|
||||
*/
|
||||
HANDLE
|
||||
|
||||
static HPEN SysColorPens[COLOR_MENUBAR + 1];
|
||||
static HBRUSH SysColorBrushes[COLOR_MENUBAR + 1];
|
||||
|
||||
DWORD
|
||||
WINAPI
|
||||
SetSysColorsTemp(
|
||||
const COLORREF *pPens,
|
||||
const HBRUSH *pBrushes,
|
||||
INT n
|
||||
)
|
||||
SetSysColorsTemp(const COLORREF *pPens,
|
||||
const HBRUSH *pBrushes,
|
||||
DWORD n)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
DWORD i;
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
WORD
|
||||
STDCALL
|
||||
CascadeChildWindows ( HWND hWndParent, WORD wFlags )
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
if (pPens && pBrushes) /* "set" call */
|
||||
{
|
||||
/* allocate our structure to remember old colors */
|
||||
LPVOID pOldCol = HeapAlloc(GetProcessHeap(), 0, sizeof(DWORD)+n*sizeof(HPEN)+n*sizeof(HBRUSH));
|
||||
LPVOID p = pOldCol;
|
||||
*(DWORD *)p = n; p = (char*)p + sizeof(DWORD);
|
||||
memcpy(p, SysColorPens, n*sizeof(HPEN)); p = (char*)p + n*sizeof(HPEN);
|
||||
memcpy(p, SysColorBrushes, n*sizeof(HBRUSH)); p = (char*)p + n*sizeof(HBRUSH);
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
WORD
|
||||
STDCALL
|
||||
TileChildWindows ( HWND hWndParent, WORD wFlags )
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
for (i=0; i < n; i++)
|
||||
{
|
||||
SysColorPens[i] = CreatePen( PS_SOLID, 1, pPens[i] );
|
||||
SysColorBrushes[i] = pBrushes[i];
|
||||
}
|
||||
|
||||
return (DWORD) pOldCol; /* FIXME: pointer truncation */
|
||||
}
|
||||
if (!pPens && !pBrushes) /* "restore" call */
|
||||
{
|
||||
LPVOID pOldCol = (LPVOID)n; /* FIXME: not 64-bit safe */
|
||||
LPVOID p = pOldCol;
|
||||
DWORD nCount = *(DWORD *)p;
|
||||
p = (char*)p + sizeof(DWORD);
|
||||
|
||||
for (i=0; i < nCount; i++)
|
||||
{
|
||||
DeleteObject(SysColorPens[i]);
|
||||
SysColorPens[i] = *(HPEN *)p; p = (char*)p + sizeof(HPEN);
|
||||
}
|
||||
for (i=0; i < nCount; i++)
|
||||
{
|
||||
SysColorBrushes[i] = *(HBRUSH *)p; p = (char*)p + sizeof(HBRUSH);
|
||||
}
|
||||
/* get rid of storage structure */
|
||||
HeapFree(GetProcessHeap(), 0, pOldCol);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -308,7 +379,7 @@ GetRawInputDeviceInfoW(
|
|||
PUINT pcbSize)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -340,7 +411,7 @@ GetRawInputDeviceInfoA(
|
|||
PUINT pcbSize)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -365,7 +436,7 @@ DefRawInputProc(
|
|||
UINT cbSizeHeader)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -374,12 +445,12 @@ DefRawInputProc(
|
|||
UINT
|
||||
STDCALL
|
||||
GetRawInputBuffer(
|
||||
PRAWINPUT pData,
|
||||
PUINT pcbSize,
|
||||
UINT cbSizeHeader)
|
||||
PRAWINPUT pData,
|
||||
PUINT pcbSize,
|
||||
UINT cbSizeHeader)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -388,14 +459,14 @@ GetRawInputBuffer(
|
|||
UINT
|
||||
STDCALL
|
||||
GetRawInputData(
|
||||
HRAWINPUT hRawInput,
|
||||
UINT uiCommand,
|
||||
LPVOID pData,
|
||||
PUINT pcbSize,
|
||||
UINT cbSizeHeader)
|
||||
HRAWINPUT hRawInput,
|
||||
UINT uiCommand,
|
||||
LPVOID pData,
|
||||
PUINT pcbSize,
|
||||
UINT cbSizeHeader)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -408,8 +479,12 @@ GetRawInputDeviceList(
|
|||
PUINT puiNumDevices,
|
||||
UINT cbSize)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
if(pRawInputDeviceList)
|
||||
memset(pRawInputDeviceList, 0, sizeof *pRawInputDeviceList);
|
||||
*puiNumDevices = 0;
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -423,7 +498,7 @@ GetRegisteredRawInputDevices(
|
|||
UINT cbSize)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1194,6 +1194,7 @@ User32DefWindowProc(HWND hWnd,
|
|||
if (hDC)
|
||||
{
|
||||
HICON hIcon;
|
||||
|
||||
if (GetWindowLongW(hWnd, GWL_STYLE) & WS_MINIMIZE &&
|
||||
(hIcon = (HICON)GetClassLongW(hWnd, GCL_HICON)) != NULL)
|
||||
{
|
||||
|
@ -1762,6 +1763,75 @@ User32DefWindowProc(HWND hWnd,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* helpers for calling IMM32 (from Wine 10/22/2008)
|
||||
*
|
||||
* WM_IME_* messages are generated only by IMM32,
|
||||
* so I assume imm32 is already LoadLibrary-ed.
|
||||
*/
|
||||
static HWND
|
||||
DefWndImmGetDefaultIMEWnd(HWND hwnd)
|
||||
{
|
||||
HINSTANCE hInstIMM = GetModuleHandleW(L"imm32\0");
|
||||
HWND (WINAPI *pFunc)(HWND);
|
||||
HWND hwndRet = 0;
|
||||
|
||||
if (!hInstIMM)
|
||||
{
|
||||
ERR("cannot get IMM32 handle\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
pFunc = (void*) GetProcAddress(hInstIMM, "ImmGetDefaultIMEWnd");
|
||||
if (pFunc != NULL)
|
||||
hwndRet = (*pFunc)(hwnd);
|
||||
|
||||
return hwndRet;
|
||||
}
|
||||
|
||||
|
||||
static BOOL
|
||||
DefWndImmIsUIMessageA(HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HINSTANCE hInstIMM = GetModuleHandleW(L"imm32\0");
|
||||
BOOL (WINAPI *pFunc)(HWND,UINT,WPARAM,LPARAM);
|
||||
BOOL fRet = FALSE;
|
||||
|
||||
if (!hInstIMM)
|
||||
{
|
||||
ERR("cannot get IMM32 handle\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pFunc = (void*) GetProcAddress(hInstIMM, "ImmIsUIMessageA");
|
||||
if (pFunc != NULL)
|
||||
fRet = (*pFunc)(hwndIME, msg, wParam, lParam);
|
||||
|
||||
return fRet;
|
||||
}
|
||||
|
||||
|
||||
static BOOL
|
||||
DefWndImmIsUIMessageW(HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HINSTANCE hInstIMM = GetModuleHandleW(L"imm32\0");
|
||||
BOOL (WINAPI *pFunc)(HWND,UINT,WPARAM,LPARAM);
|
||||
BOOL fRet = FALSE;
|
||||
|
||||
if (!hInstIMM)
|
||||
{
|
||||
ERR("cannot get IMM32 handle\n");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pFunc = (void*) GetProcAddress(hInstIMM, "ImmIsUIMessageW");
|
||||
if (pFunc != NULL)
|
||||
fRet = (*pFunc)(hwndIME, msg, wParam, lParam);
|
||||
|
||||
return fRet;
|
||||
}
|
||||
|
||||
|
||||
LRESULT STDCALL
|
||||
DefWindowProcA(HWND hWnd,
|
||||
UINT Msg,
|
||||
|
@ -1784,13 +1854,13 @@ DefWindowProcA(HWND hWnd,
|
|||
|
||||
if(cs->lpszName)
|
||||
{
|
||||
RtlInitAnsiString(&AnsiString, (LPSTR)cs->lpszName);
|
||||
RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
|
||||
NtUserDefSetText(hWnd, &UnicodeString);
|
||||
RtlFreeUnicodeString(&UnicodeString);
|
||||
RtlInitAnsiString(&AnsiString, (LPSTR)cs->lpszName);
|
||||
RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
|
||||
NtUserDefSetText(hWnd, &UnicodeString);
|
||||
RtlFreeUnicodeString(&UnicodeString);
|
||||
}
|
||||
else
|
||||
NtUserDefSetText(hWnd, NULL);
|
||||
NtUserDefSetText(hWnd, NULL);
|
||||
|
||||
Result = 1;
|
||||
break;
|
||||
|
@ -1810,9 +1880,11 @@ DefWindowProcA(HWND hWnd,
|
|||
buf,
|
||||
Wnd->WindowName.Length)))
|
||||
{
|
||||
Result = (LRESULT)len;
|
||||
Result = (LRESULT) len;
|
||||
}
|
||||
}
|
||||
else Result = 0L;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1859,13 +1931,13 @@ DefWindowProcA(HWND hWnd,
|
|||
|
||||
if(lParam)
|
||||
{
|
||||
RtlInitAnsiString(&AnsiString, (LPSTR)lParam);
|
||||
RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
|
||||
NtUserDefSetText(hWnd, &UnicodeString);
|
||||
RtlFreeUnicodeString(&UnicodeString);
|
||||
RtlInitAnsiString(&AnsiString, (LPSTR)lParam);
|
||||
RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
|
||||
NtUserDefSetText(hWnd, &UnicodeString);
|
||||
RtlFreeUnicodeString(&UnicodeString);
|
||||
}
|
||||
else
|
||||
NtUserDefSetText(hWnd, NULL);
|
||||
NtUserDefSetText(hWnd, NULL);
|
||||
|
||||
if ((GetWindowLongW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
|
||||
{
|
||||
|
@ -1876,16 +1948,50 @@ DefWindowProcA(HWND hWnd,
|
|||
break;
|
||||
}
|
||||
|
||||
/* FIXME: Implement these. */
|
||||
case WM_IME_CHAR:
|
||||
case WM_IME_KEYDOWN:
|
||||
{
|
||||
Result = PostMessageA(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYUP:
|
||||
{
|
||||
Result = PostMessageA(hWnd, WM_KEYUP, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_CHAR:
|
||||
{
|
||||
if (HIBYTE(wParam))
|
||||
PostMessageA(hWnd, WM_CHAR, HIBYTE(wParam), lParam);
|
||||
PostMessageA(hWnd, WM_CHAR, LOBYTE(wParam), lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_STARTCOMPOSITION:
|
||||
case WM_IME_COMPOSITION:
|
||||
case WM_IME_ENDCOMPOSITION:
|
||||
case WM_IME_SELECT:
|
||||
case WM_IME_NOTIFY:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = DefWndImmGetDefaultIMEWnd(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageA(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_SETCONTEXT:
|
||||
FIXME("FIXME: WM_IME_* conversion isn't implemented yet!");
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = DefWndImmGetDefaultIMEWnd(hWnd);
|
||||
if (hwndIME)
|
||||
Result = DefWndImmIsUIMessageA(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fall through */
|
||||
default:
|
||||
Result = User32DefWindowProc(hWnd, Msg, wParam, lParam, FALSE);
|
||||
|
@ -1916,9 +2022,9 @@ DefWindowProcW(HWND hWnd,
|
|||
* may have child window IDs instead of window name */
|
||||
|
||||
if(cs->lpszName)
|
||||
RtlInitUnicodeString(&UnicodeString, (LPWSTR)cs->lpszName);
|
||||
RtlInitUnicodeString(&UnicodeString, (LPWSTR)cs->lpszName);
|
||||
|
||||
NtUserDefSetText( hWnd, (cs->lpszName ? &UnicodeString : NULL));
|
||||
NtUserDefSetText(hWnd, (cs->lpszName ? &UnicodeString : NULL));
|
||||
Result = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -1937,9 +2043,11 @@ DefWindowProcW(HWND hWnd,
|
|||
buf,
|
||||
Wnd->WindowName.Length)))
|
||||
{
|
||||
Result = (LRESULT)len;
|
||||
Result = (LRESULT) (Wnd->WindowName.Length / sizeof(WCHAR));
|
||||
}
|
||||
}
|
||||
else Result = 0L;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1978,7 +2086,7 @@ DefWindowProcW(HWND hWnd,
|
|||
UNICODE_STRING UnicodeString;
|
||||
|
||||
if(lParam)
|
||||
RtlInitUnicodeString(&UnicodeString, (LPWSTR)lParam);
|
||||
RtlInitUnicodeString(&UnicodeString, (LPWSTR)lParam);
|
||||
|
||||
NtUserDefSetText(hWnd, (lParam ? &UnicodeString : NULL));
|
||||
|
||||
|
@ -1992,16 +2100,44 @@ DefWindowProcW(HWND hWnd,
|
|||
|
||||
case WM_IME_CHAR:
|
||||
{
|
||||
SendMessageW(hWnd, WM_CHAR, wParam, lParam);
|
||||
PostMessageW(hWnd, WM_CHAR, wParam, lParam);
|
||||
Result = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYDOWN:
|
||||
{
|
||||
Result = PostMessageW(hWnd, WM_KEYDOWN, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_KEYUP:
|
||||
{
|
||||
Result = PostMessageW(hWnd, WM_KEYUP, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_STARTCOMPOSITION:
|
||||
case WM_IME_COMPOSITION:
|
||||
case WM_IME_ENDCOMPOSITION:
|
||||
case WM_IME_SELECT:
|
||||
case WM_IME_NOTIFY:
|
||||
{
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = DefWndImmGetDefaultIMEWnd(hWnd);
|
||||
if (hwndIME)
|
||||
Result = SendMessageW(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_IME_SETCONTEXT:
|
||||
{
|
||||
/* FIXME */
|
||||
FIXME("FIXME: WM_IME_SETCONTEXT is not implemented!");
|
||||
Result = 0;
|
||||
HWND hwndIME;
|
||||
|
||||
hwndIME = DefWndImmGetDefaultIMEWnd(hWnd);
|
||||
if (hwndIME)
|
||||
Result = DefWndImmIsUIMessageW(hwndIME, Msg, wParam, lParam);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -96,28 +96,24 @@ BringWindowToTop(HWND hWnd)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
/*
|
||||
WORD STDCALL
|
||||
CascadeWindows(HWND hwndParent,
|
||||
UINT wHow,
|
||||
CONST RECT *lpRect,
|
||||
UINT cKids,
|
||||
const HWND *lpKids)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
VOID STDCALL
|
||||
SwitchToThisWindow(HWND hwnd, BOOL fUnknown)
|
||||
{
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
WORD
|
||||
STDCALL
|
||||
CascadeChildWindows ( HWND hWndParent, WORD wFlags )
|
||||
{
|
||||
return CascadeWindows(hWndParent, wFlags, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
@ -1003,8 +999,16 @@ GetParent(HWND hWnd)
|
|||
BOOL STDCALL
|
||||
GetProcessDefaultLayout(DWORD *pdwDefaultLayout)
|
||||
{
|
||||
if (!pdwDefaultLayout)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
|
||||
*pdwDefaultLayout = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1502,7 +1506,7 @@ BOOL STDCALL
|
|||
LockSetForegroundWindow(UINT uLockCode)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1602,6 +1606,9 @@ SetParent(HWND hWndChild,
|
|||
BOOL STDCALL
|
||||
SetProcessDefaultLayout(DWORD dwDefaultLayout)
|
||||
{
|
||||
if (dwDefaultLayout == 0)
|
||||
return TRUE;
|
||||
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1741,23 +1748,6 @@ ShowWindowAsync(HWND hWnd,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
/*
|
||||
WORD STDCALL
|
||||
TileWindows(HWND hwndParent,
|
||||
UINT wHow,
|
||||
CONST RECT *lpRect,
|
||||
UINT cKids,
|
||||
const HWND *lpKids)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
|
@ -2000,6 +1990,16 @@ ScrollWindowEx(HWND hWnd,
|
|||
flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
WORD
|
||||
STDCALL
|
||||
TileChildWindows(HWND hWndParent, WORD wFlags)
|
||||
{
|
||||
return TileWindows(hWndParent, wFlags, NULL, 0, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue