📄 window.c
字号:
* @implemented
*/
BOOL
STDCALL
IsWindowEnabled(
HWND hWnd)
{
// AG: I don't know if child windows are affected if the parent is
// disabled. I think they stop processing messages but stay appearing
// as enabled.
return (! (NtUserGetWindowLong(hWnd, GWL_STYLE, FALSE) & WS_DISABLED));
}
/*
* @implemented
*/
BOOL STDCALL
IsZoomed(HWND hWnd)
{
return NtUserGetWindowLong(hWnd, GWL_STYLE, FALSE) & WS_MAXIMIZE;
}
/*
* @unimplemented
*/
BOOL STDCALL
LockSetForegroundWindow(UINT uLockCode)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
BOOL STDCALL
MoveWindow(HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint)
{
return NtUserMoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint);
}
/*
* @implemented
*/
BOOL STDCALL
AnimateWindow(HWND hwnd,
DWORD dwTime,
DWORD dwFlags)
{
/* FIXME Add animation code */
/* If trying to show/hide and it's already *
* shown/hidden or invalid window, fail with *
* invalid parameter */
BOOL visible;
visible = IsWindowVisible(hwnd);
if(!IsWindow(hwnd) ||
(visible && !(dwFlags & AW_HIDE)) ||
(!visible && (dwFlags & AW_HIDE)))
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
ShowWindow(hwnd, (dwFlags & AW_HIDE) ? SW_HIDE : ((dwFlags & AW_ACTIVATE) ? SW_SHOW : SW_SHOWNA));
return TRUE;
}
/*
* @implemented
*/
BOOL STDCALL
OpenIcon(HWND hWnd)
{
if (!(NtUserGetWindowLong(hWnd, GWL_STYLE, FALSE) & WS_MINIMIZE))
{
return FALSE;
}
ShowWindow(hWnd,SW_RESTORE);
return TRUE;
}
/*
* @unimplemented
*/
HWND STDCALL
RealChildWindowFromPoint(HWND hwndParent,
POINT ptParentClientCoords)
{
UNIMPLEMENTED;
return (HWND)0;
}
/*
* @unimplemented
*/
BOOL STDCALL
SetForegroundWindow(HWND hWnd)
{
return NtUserCallHwndLock(hWnd, HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW);
}
/*
* @unimplemented
*/
BOOL STDCALL
SetLayeredWindowAttributes(HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
HWND STDCALL
SetParent(HWND hWndChild,
HWND hWndNewParent)
{
return NtUserSetParent(hWndChild, hWndNewParent);
}
/*
* @unimplemented
*/
BOOL STDCALL
SetProcessDefaultLayout(DWORD dwDefaultLayout)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @unimplemented
*/
BOOL STDCALL
SetWindowPlacement(HWND hWnd,
CONST WINDOWPLACEMENT *lpwndpl)
{
return (BOOL)NtUserSetWindowPlacement(hWnd, (WINDOWPLACEMENT *)lpwndpl);
}
/*
* @implemented
*/
BOOL STDCALL
SetWindowPos(HWND hWnd,
HWND hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
UINT uFlags)
{
return NtUserSetWindowPos(hWnd,hWndInsertAfter, X, Y, cx, cy, uFlags);
}
/*
* @implemented
*/
BOOL STDCALL
SetWindowTextA(HWND hWnd,
LPCSTR lpString)
{
DWORD ProcessId;
if(!NtUserGetWindowThreadProcessId(hWnd, &ProcessId))
{
return FALSE;
}
if(ProcessId != GetCurrentProcessId())
{
/* do not send WM_GETTEXT messages to other processes */
ANSI_STRING AnsiString;
UNICODE_STRING UnicodeString;
if(lpString)
{
RtlInitAnsiString(&AnsiString, (LPSTR)lpString);
RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, TRUE);
NtUserDefSetText(hWnd, &UnicodeString);
RtlFreeUnicodeString(&UnicodeString);
}
else
NtUserDefSetText(hWnd, NULL);
if ((GetWindowLongW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
{
DefWndNCPaint(hWnd, (HRGN)1, -1);
}
return TRUE;
}
return SendMessageA(hWnd, WM_SETTEXT, 0, (LPARAM)lpString);
}
/*
* @implemented
*/
BOOL STDCALL
SetWindowTextW(HWND hWnd,
LPCWSTR lpString)
{
DWORD ProcessId;
if(!NtUserGetWindowThreadProcessId(hWnd, &ProcessId))
{
return FALSE;
}
if(ProcessId != GetCurrentProcessId())
{
/* do not send WM_GETTEXT messages to other processes */
UNICODE_STRING UnicodeString;
if(lpString)
RtlInitUnicodeString(&UnicodeString, (LPWSTR)lpString);
NtUserDefSetText(hWnd, (lpString ? &UnicodeString : NULL));
if ((GetWindowLongW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION)
{
DefWndNCPaint(hWnd, (HRGN)1, -1);
}
return TRUE;
}
return SendMessageW(hWnd, WM_SETTEXT, 0, (LPARAM)lpString);
}
/*
* @implemented
*/
BOOL STDCALL
ShowOwnedPopups(HWND hWnd,
BOOL fShow)
{
return (BOOL)NtUserCallTwoParam((DWORD)hWnd, fShow, TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS);
}
/*
* @implemented
*/
BOOL STDCALL
ShowWindow(HWND hWnd,
int nCmdShow)
{
return NtUserShowWindow(hWnd, nCmdShow);
}
/*
* @unimplemented
*/
BOOL STDCALL
ShowWindowAsync(HWND hWnd,
int nCmdShow)
{
return NtUserShowWindowAsync(hWnd, nCmdShow);
}
/*
* @unimplemented
*/
/*
WORD STDCALL
TileWindows(HWND hwndParent,
UINT wHow,
CONST RECT *lpRect,
UINT cKids,
const HWND *lpKids)
{
UNIMPLEMENTED;
return 0;
}
*/
/*
* @unimplemented
*/
BOOL STDCALL
UpdateLayeredWindow(HWND hwnd,
HDC hdcDst,
POINT *pptDst,
SIZE *psize,
HDC hdcSrc,
POINT *pptSrc,
COLORREF crKey,
BLENDFUNCTION *pblend,
DWORD dwFlags)
{
UNIMPLEMENTED;
return FALSE;
}
/*
* @implemented
*/
HWND STDCALL
WindowFromPoint(POINT Point)
{
//TODO: Determine what the actual parameters to
// NtUserWindowFromPoint are.
return NtUserWindowFromPoint(Point.x, Point.y);
}
/*
* @implemented
*/
int STDCALL
MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)
{
POINT FromOffset, ToOffset;
LONG XMove, YMove;
ULONG i;
if (hWndFrom == NULL)
{
FromOffset.x = FromOffset.y = 0;
} else
if(!NtUserGetClientOrigin(hWndFrom, &FromOffset))
{
return 0;
}
if (hWndTo == NULL)
{
ToOffset.x = ToOffset.y = 0;
} else
if(!NtUserGetClientOrigin(hWndTo, &ToOffset))
{
return 0;
}
XMove = FromOffset.x - ToOffset.x;
YMove = FromOffset.y - ToOffset.y;
for (i = 0; i < cPoints; i++)
{
lpPoints[i].x += XMove;
lpPoints[i].y += YMove;
}
return(MAKELONG(LOWORD(XMove), LOWORD(YMove)));
}
/*
* @implemented
*/
BOOL STDCALL
ScreenToClient(HWND hWnd, LPPOINT lpPoint)
{
return(MapWindowPoints(NULL, hWnd, lpPoint, 1) != 0);
}
/*
* @implemented
*/
BOOL STDCALL
ClientToScreen(HWND hWnd, LPPOINT lpPoint)
{
return (MapWindowPoints( hWnd, NULL, lpPoint, 1 ) != 0);
}
/*
* @implemented
*/
BOOL
STDCALL
SetWindowContextHelpId(HWND hwnd,
DWORD dwContextHelpId)
{
return NtUserSetWindowContextHelpId(hwnd, dwContextHelpId);
}
/*
* @implemented
*/
DWORD
STDCALL
GetWindowContextHelpId(HWND hwnd)
{
return NtUserGetWindowContextHelpId(hwnd);
}
/*
* @implemented
*/
int
STDCALL
InternalGetWindowText(HWND hWnd, LPWSTR lpString, int nMaxCount)
{
return NtUserInternalGetWindowText(hWnd, lpString, nMaxCount);
}
/*
* @implemented
*/
BOOL
STDCALL
IsHungAppWindow(HWND hwnd)
{
return (NtUserQueryWindow(hwnd, QUERY_WINDOW_ISHUNG) != 0);
}
/*
* @implemented
*/
VOID
STDCALL
SetLastErrorEx(DWORD dwErrCode, DWORD dwType)
{
SetLastError(dwErrCode);
}
/*
* @implemented
*/
HWND
STDCALL
GetFocus(VOID)
{
return (HWND)NtUserGetThreadState(THREADSTATE_FOCUSWINDOW);
}
/*
* @implemented
*/
HWND
STDCALL
SetTaskmanWindow(HWND hWnd)
{
return NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETTASKMANWINDOW);
}
/*
* @implemented
*/
HWND
STDCALL
SetProgmanWindow(HWND hWnd)
{
return NtUserCallHwndOpt(hWnd, HWNDOPT_ROUTINE_SETPROGMANWINDOW);
}
/*
* @implemented
*/
HWND
STDCALL
GetProgmanWindow(VOID)
{
return (HWND)NtUserGetThreadState(THREADSTATE_PROGMANWINDOW);
}
/*
* @implemented
*/
HWND
STDCALL
GetTaskmanWindow(VOID)
{
return (HWND)NtUserGetThreadState(THREADSTATE_TASKMANWINDOW);
}
/*
* @implemented
*/
BOOL STDCALL
ScrollWindow(HWND hWnd, int dx, int dy, CONST RECT *lpRect,
CONST RECT *prcClip)
{
return NtUserScrollWindowEx(hWnd, dx, dy, lpRect, prcClip, 0, NULL,
(lpRect ? 0 : SW_SCROLLCHILDREN) | SW_INVALIDATE) != ERROR;
}
/*
* @implemented
*/
INT STDCALL
ScrollWindowEx(HWND hWnd, int dx, int dy, CONST RECT *prcScroll,
CONST RECT *prcClip, HRGN hrgnUpdate, LPRECT prcUpdate, UINT flags)
{
return NtUserScrollWindowEx(hWnd, dx, dy, prcScroll, prcClip, hrgnUpdate,
prcUpdate, flags);
}
/*
* @implemented
*/
BOOL
STDCALL
AnyPopup(VOID)
{
return NtUserAnyPopup();
}
/*
* @implemented
*/
BOOL
STDCALL
IsWindowInDestroy(HWND hWnd)
{
return NtUserIsWindowInDestroy(hWnd);
}
/*
* @implemented
*/
VOID
STDCALL
DisableProcessWindowsGhosting(VOID)
{
NtUserEnableProcessWindowGhosting(FALSE);
}
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -