mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 08:52:57 +00:00

2. implemented SM_CXDOUBLECLK, SM_CYDOUBLECLK and SM_SWAPBUTTON for GetSystemMetrics() 3. implemented NtUserSystemParametersInfo() partially 4. implemented SPI_SETDOUBLECLKWIDTH, SPI_SETDOUBLECLKHEIGHT and SPI_SETDOUBLECLICKTIME for SystemParametersInfo() svn path=/trunk/; revision=5899
384 lines
6.4 KiB
C
384 lines
6.4 KiB
C
/* $Id: desktop.c,v 1.26 2003/08/28 18:04:59 weiden Exp $
|
|
*
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
* PROJECT: ReactOS user32.dll
|
|
* FILE: lib/user32/misc/desktop.c
|
|
* PURPOSE: Desktops
|
|
* PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
|
|
* UPDATE HISTORY:
|
|
* 06-06-2001 CSH Created
|
|
*/
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#include <user32.h>
|
|
#include <debug.h>
|
|
#include <rosrtl/devmode.h>
|
|
#include <rosrtl/logfont.h>
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
int STDCALL
|
|
GetSystemMetrics(int nIndex)
|
|
{
|
|
return(NtUserGetSystemMetrics(nIndex));
|
|
}
|
|
|
|
|
|
/*
|
|
* @unimplemented
|
|
*/
|
|
WINBOOL STDCALL SetDeskWallpaper(LPCSTR filename)
|
|
{
|
|
return SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,(PVOID)filename,1);
|
|
}
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL STDCALL
|
|
SystemParametersInfoA(UINT uiAction,
|
|
UINT uiParam,
|
|
PVOID pvParam,
|
|
UINT fWinIni)
|
|
{
|
|
WINBOOL Ret;
|
|
NONCLIENTMETRICSA *nclma;
|
|
NONCLIENTMETRICSW nclmw;
|
|
|
|
switch (uiAction)
|
|
{
|
|
case SPI_GETNONCLIENTMETRICS:
|
|
nclma = pvParam;
|
|
nclmw.cbSize = sizeof(NONCLIENTMETRICSW);
|
|
uiParam = sizeof(NONCLIENTMETRICSW);
|
|
pvParam = &nclmw;
|
|
break;
|
|
}
|
|
Ret = SystemParametersInfoW(uiAction, uiParam, pvParam, fWinIni);
|
|
if (! Ret)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
switch (uiAction)
|
|
{
|
|
case SPI_GETNONCLIENTMETRICS:
|
|
RosRtlLogFontW2A(&(nclma->lfCaptionFont), &(nclmw.lfCaptionFont));
|
|
RosRtlLogFontW2A(&(nclma->lfSmCaptionFont), &(nclmw.lfSmCaptionFont));
|
|
return TRUE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL STDCALL
|
|
SystemParametersInfoW(UINT uiAction,
|
|
UINT uiParam,
|
|
PVOID pvParam,
|
|
UINT fWinIni)
|
|
{
|
|
NONCLIENTMETRICSW *nclm;
|
|
|
|
/* FIXME: This should be obtained from the registry */
|
|
static LOGFONTW CaptionFont =
|
|
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
|
|
0, 0, DEFAULT_QUALITY, FF_MODERN, L"Bitstream Vera Sans Bold" };
|
|
|
|
switch (uiAction)
|
|
{
|
|
case SPI_GETWORKAREA:
|
|
{
|
|
/* FIXME we should obtain the information using GetMonitorInfo(),
|
|
besides it is not the whole screen size! */
|
|
((PRECT)pvParam)->left = 0;
|
|
((PRECT)pvParam)->top = 0;
|
|
((PRECT)pvParam)->right = 640;
|
|
((PRECT)pvParam)->bottom = 480;
|
|
return(TRUE);
|
|
}
|
|
case SPI_GETNONCLIENTMETRICS:
|
|
{
|
|
nclm = pvParam;
|
|
memcpy(&nclm->lfCaptionFont, &CaptionFont, sizeof(CaptionFont));
|
|
memcpy(&nclm->lfSmCaptionFont, &CaptionFont, sizeof(CaptionFont));
|
|
return(TRUE);
|
|
}
|
|
default:
|
|
{
|
|
return NtUserSystemParametersInfo(uiAction,
|
|
uiParam,
|
|
pvParam,
|
|
fWinIni);
|
|
}
|
|
}
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
CloseDesktop(
|
|
HDESK hDesktop)
|
|
{
|
|
return NtUserCloseDesktop(hDesktop);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK STDCALL
|
|
CreateDesktopA(LPCSTR lpszDesktop,
|
|
LPCSTR lpszDevice,
|
|
LPDEVMODEA pDevmode,
|
|
DWORD dwFlags,
|
|
ACCESS_MASK dwDesiredAccess,
|
|
LPSECURITY_ATTRIBUTES lpsa)
|
|
{
|
|
ANSI_STRING DesktopNameA;
|
|
UNICODE_STRING DesktopNameU;
|
|
HDESK hDesktop;
|
|
DEVMODEW DevmodeW;
|
|
|
|
if (lpszDesktop != NULL)
|
|
{
|
|
RtlInitAnsiString(&DesktopNameA, (LPSTR)lpszDesktop);
|
|
RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
|
|
}
|
|
else
|
|
{
|
|
RtlInitUnicodeString(&DesktopNameU, NULL);
|
|
}
|
|
|
|
RosRtlDevModeA2W ( &DevmodeW, pDevmode );
|
|
|
|
hDesktop = CreateDesktopW(DesktopNameU.Buffer,
|
|
NULL,
|
|
&DevmodeW,
|
|
dwFlags,
|
|
dwDesiredAccess,
|
|
lpsa);
|
|
|
|
RtlFreeUnicodeString(&DesktopNameU);
|
|
return(hDesktop);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK STDCALL
|
|
CreateDesktopW(LPCWSTR lpszDesktop,
|
|
LPCWSTR lpszDevice,
|
|
LPDEVMODEW pDevmode,
|
|
DWORD dwFlags,
|
|
ACCESS_MASK dwDesiredAccess,
|
|
LPSECURITY_ATTRIBUTES lpsa)
|
|
{
|
|
UNICODE_STRING DesktopName;
|
|
HWINSTA hWinSta;
|
|
HDESK hDesktop;
|
|
|
|
hWinSta = NtUserGetProcessWindowStation();
|
|
|
|
RtlInitUnicodeString(&DesktopName, lpszDesktop);
|
|
|
|
hDesktop = NtUserCreateDesktop(&DesktopName,
|
|
dwFlags,
|
|
dwDesiredAccess,
|
|
lpsa,
|
|
hWinSta);
|
|
|
|
return(hDesktop);
|
|
}
|
|
|
|
|
|
/*
|
|
* @unimplemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
EnumDesktopsA(
|
|
HWINSTA hwinsta,
|
|
DESKTOPENUMPROCA lpEnumFunc,
|
|
LPARAM lParam)
|
|
{
|
|
UNIMPLEMENTED;
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
/*
|
|
* @unimplemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
EnumDesktopsW(
|
|
HWINSTA hwinsta,
|
|
DESKTOPENUMPROCW lpEnumFunc,
|
|
LPARAM lParam)
|
|
{
|
|
UNIMPLEMENTED;
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK
|
|
STDCALL
|
|
GetThreadDesktop(
|
|
DWORD dwThreadId)
|
|
{
|
|
return NtUserGetThreadDesktop(dwThreadId, 0);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK
|
|
STDCALL
|
|
OpenDesktopA(
|
|
LPSTR lpszDesktop,
|
|
DWORD dwFlags,
|
|
WINBOOL fInherit,
|
|
ACCESS_MASK dwDesiredAccess)
|
|
{
|
|
ANSI_STRING DesktopNameA;
|
|
UNICODE_STRING DesktopNameU;
|
|
HDESK hDesktop;
|
|
|
|
if (lpszDesktop != NULL) {
|
|
RtlInitAnsiString(&DesktopNameA, lpszDesktop);
|
|
RtlAnsiStringToUnicodeString(&DesktopNameU, &DesktopNameA, TRUE);
|
|
} else {
|
|
RtlInitUnicodeString(&DesktopNameU, NULL);
|
|
}
|
|
|
|
hDesktop = OpenDesktopW(
|
|
DesktopNameU.Buffer,
|
|
dwFlags,
|
|
fInherit,
|
|
dwDesiredAccess);
|
|
|
|
RtlFreeUnicodeString(&DesktopNameU);
|
|
|
|
return hDesktop;
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK
|
|
STDCALL
|
|
OpenDesktopW(
|
|
LPWSTR lpszDesktop,
|
|
DWORD dwFlags,
|
|
WINBOOL fInherit,
|
|
ACCESS_MASK dwDesiredAccess)
|
|
{
|
|
UNICODE_STRING DesktopName;
|
|
|
|
RtlInitUnicodeString(&DesktopName, lpszDesktop);
|
|
|
|
return NtUserOpenDesktop(
|
|
&DesktopName,
|
|
dwFlags,
|
|
dwDesiredAccess);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HDESK
|
|
STDCALL
|
|
OpenInputDesktop(
|
|
DWORD dwFlags,
|
|
WINBOOL fInherit,
|
|
ACCESS_MASK dwDesiredAccess)
|
|
{
|
|
return NtUserOpenInputDesktop(
|
|
dwFlags,
|
|
fInherit,
|
|
dwDesiredAccess);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
PaintDesktop(
|
|
HDC hdc)
|
|
{
|
|
return NtUserPaintDesktop(hdc);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
SetThreadDesktop(
|
|
HDESK hDesktop)
|
|
{
|
|
return NtUserSetThreadDesktop(hDesktop);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
WINBOOL
|
|
STDCALL
|
|
SwitchDesktop(
|
|
HDESK hDesktop)
|
|
{
|
|
return NtUserSwitchDesktop(hDesktop);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
BOOL STDCALL
|
|
SetShellWindowEx(HWND hwndShell, HWND hwndShellListView)
|
|
{
|
|
return NtUserSetShellWindowEx(hwndShell, hwndShellListView);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
BOOL STDCALL
|
|
SetShellWindow(HWND hwndShell)
|
|
{
|
|
return SetShellWindowEx(hwndShell, hwndShell);
|
|
}
|
|
|
|
|
|
/*
|
|
* @implemented
|
|
*/
|
|
HWND STDCALL
|
|
GetShellWindow(VOID)
|
|
{
|
|
return NtUserGetShellWindow();
|
|
}
|
|
|
|
|
|
/* EOF */
|