mirror of
https://github.com/reactos/reactos.git
synced 2024-07-18 02:16:14 +00:00
added LR_SHARED flag support for LoadIcon() and LoadCursor()
svn path=/trunk/; revision=6689
This commit is contained in:
parent
7fd98f181c
commit
69a485aba7
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: bitmap.c,v 1.19 2003/11/10 17:44:49 weiden Exp $
|
||||
/* $Id: bitmap.c,v 1.20 2003/11/18 19:59:50 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS user32.dll
|
||||
* FILE: lib/user32/windows/input.c
|
||||
|
@ -80,6 +80,7 @@ LoadCursorImage(HINSTANCE hinst, LPCWSTR lpszName, UINT fuLoad)
|
|||
{
|
||||
HANDLE hResource;
|
||||
HANDLE h2Resource;
|
||||
HANDLE hfRes;
|
||||
HANDLE hFile;
|
||||
HANDLE hSection;
|
||||
CURSORICONDIR* IconDIR;
|
||||
|
@ -94,21 +95,25 @@ LoadCursorImage(HINSTANCE hinst, LPCWSTR lpszName, UINT fuLoad)
|
|||
INT id;
|
||||
ICONIMAGE *ResIcon;
|
||||
|
||||
if (fuLoad & LR_SHARED)
|
||||
DbgPrint("FIXME: need LR_SHARED support Loading cursor images\n");
|
||||
|
||||
if (!(fuLoad & LR_LOADFROMFILE))
|
||||
{
|
||||
if (hinst == NULL)
|
||||
{
|
||||
hinst = GetModuleHandleW(L"USER32");
|
||||
}
|
||||
hResource = FindResourceW(hinst, lpszName, RT_GROUP_CURSOR);
|
||||
hResource = hfRes = FindResourceW(hinst, lpszName, RT_GROUP_CURSOR);
|
||||
if (hResource == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if (fuLoad & LR_SHARED)
|
||||
{
|
||||
hIcon = (HANDLE)NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes);
|
||||
if(hIcon)
|
||||
return hIcon;
|
||||
}
|
||||
|
||||
hResource = LoadResource(hinst, hResource);
|
||||
if (hResource == NULL)
|
||||
{
|
||||
|
@ -139,12 +144,23 @@ LoadCursorImage(HINSTANCE hinst, LPCWSTR lpszName, UINT fuLoad)
|
|||
{
|
||||
return(NULL);
|
||||
}
|
||||
return CreateIconFromResourceEx((PBYTE) ResIcon,
|
||||
hIcon = (HANDLE)CreateIconFromResourceEx((PBYTE) ResIcon,
|
||||
SizeofResource(hinst, h2Resource), FALSE, 0x00030000,
|
||||
32, 32, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME));
|
||||
if(hIcon)
|
||||
{
|
||||
NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, (HRSRC)hfRes,
|
||||
(HRSRC)NULL);
|
||||
}
|
||||
return hIcon;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fuLoad & LR_SHARED)
|
||||
{
|
||||
DbgPrint("FIXME: need LR_SHARED support loading cursor images from files\n");
|
||||
}
|
||||
|
||||
hFile = CreateFileW(lpszName,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
|
@ -246,6 +262,7 @@ LoadIconImage(HINSTANCE hinst, LPCWSTR lpszName, INT width, INT height, UINT fuL
|
|||
{
|
||||
HANDLE hResource;
|
||||
HANDLE h2Resource;
|
||||
HANDLE hfRes;
|
||||
HANDLE hFile;
|
||||
HANDLE hSection;
|
||||
CURSORICONDIR* IconDIR;
|
||||
|
@ -260,21 +277,25 @@ LoadIconImage(HINSTANCE hinst, LPCWSTR lpszName, INT width, INT height, UINT fuL
|
|||
INT id;
|
||||
ICONIMAGE *ResIcon;
|
||||
|
||||
if (fuLoad & LR_SHARED)
|
||||
DbgPrint("FIXME: need LR_SHARED support Loading icon images\n");
|
||||
|
||||
if (!(fuLoad & LR_LOADFROMFILE))
|
||||
{
|
||||
if (hinst == NULL)
|
||||
{
|
||||
hinst = GetModuleHandleW(L"USER32");
|
||||
}
|
||||
hResource = FindResourceW(hinst, lpszName, RT_GROUP_ICON);
|
||||
hResource = hfRes = FindResourceW(hinst, lpszName, RT_GROUP_ICON);
|
||||
if (hResource == NULL)
|
||||
{
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if (fuLoad & LR_SHARED)
|
||||
{
|
||||
hIcon = NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes);
|
||||
if(hIcon)
|
||||
return hIcon;
|
||||
}
|
||||
|
||||
hResource = LoadResource(hinst, hResource);
|
||||
if (hResource == NULL)
|
||||
{
|
||||
|
@ -305,12 +326,23 @@ LoadIconImage(HINSTANCE hinst, LPCWSTR lpszName, INT width, INT height, UINT fuL
|
|||
{
|
||||
return(NULL);
|
||||
}
|
||||
return CreateIconFromResourceEx((PBYTE) ResIcon,
|
||||
hIcon = (HANDLE)CreateIconFromResourceEx((PBYTE) ResIcon,
|
||||
SizeofResource(hinst, h2Resource), TRUE, 0x00030000,
|
||||
width, height, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME));
|
||||
if(hIcon)
|
||||
{
|
||||
NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, (HRSRC)hfRes,
|
||||
(HRSRC)NULL);
|
||||
}
|
||||
return hIcon;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fuLoad & LR_SHARED)
|
||||
{
|
||||
DbgPrint("FIXME: need LR_SHARED support for loading icon images from files\n");
|
||||
}
|
||||
|
||||
hFile = CreateFileW(lpszName,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: cursor.c,v 1.14 2003/11/10 17:44:49 weiden Exp $
|
||||
/* $Id: cursor.c,v 1.15 2003/11/18 19:59:51 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS user32.dll
|
||||
* FILE: lib/user32/windows/cursor.c
|
||||
|
@ -176,7 +176,7 @@ LoadCursorA(HINSTANCE hInstance,
|
|||
LPCSTR lpCursorName)
|
||||
{
|
||||
return(LoadImageA(hInstance, lpCursorName, IMAGE_CURSOR, 0, 0,
|
||||
LR_DEFAULTSIZE));
|
||||
LR_SHARED | LR_DEFAULTSIZE));
|
||||
}
|
||||
|
||||
|
||||
|
@ -215,7 +215,7 @@ LoadCursorW(HINSTANCE hInstance,
|
|||
LPCWSTR lpCursorName)
|
||||
{
|
||||
return(LoadImageW(hInstance, lpCursorName, IMAGE_CURSOR, 0, 0,
|
||||
LR_DEFAULTSIZE));
|
||||
LR_SHARED | LR_DEFAULTSIZE));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: icon.c,v 1.13 2003/11/10 17:44:49 weiden Exp $
|
||||
/* $Id: icon.c,v 1.14 2003/11/18 19:59:51 weiden Exp $
|
||||
*
|
||||
* PROJECT: ReactOS user32.dll
|
||||
* FILE: lib/user32/windows/icon.c
|
||||
|
@ -243,6 +243,15 @@ CreateIconFromResourceEx(
|
|||
WORD wXHotspot;
|
||||
WORD wYHotspot;
|
||||
|
||||
/*
|
||||
FIXME - does win support LR_SHARED? According to msdn it does but we don't
|
||||
have useful information to identify the icon
|
||||
if (uFlags & LR_SHARED)
|
||||
{
|
||||
DbgPrint("FIXME: need LR_SHARED support in CreateIconFromResourceEx()\n");
|
||||
}
|
||||
*/
|
||||
|
||||
DPRINT("dwVersion, cxDesired, cyDesired are all ignored in this implementation!\n");
|
||||
|
||||
if (! fIcon)
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: cursoricon.c,v 1.19 2003/11/15 12:43:25 weiden Exp $ */
|
||||
/* $Id: cursoricon.c,v 1.20 2003/11/18 19:59:51 weiden Exp $ */
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
|
||||
|
@ -469,8 +469,8 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
|||
CurIconObject->IconInfo.hbmMask = IntCopyBitmap(CurIconObject->IconInfo.hbmMask);
|
||||
CurIconObject->IconInfo.hbmColor = IntCopyBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
}
|
||||
bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor);
|
||||
if(bmp)
|
||||
if(CurIconObject->IconInfo.hbmColor &&
|
||||
(bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmColor)))
|
||||
{
|
||||
CurIconObject->Size.cx = bmp->size.cx;
|
||||
CurIconObject->Size.cy = bmp->size.cy;
|
||||
|
@ -478,8 +478,8 @@ NtUserCreateCursorIconHandle(PICONINFO IconInfo, BOOL Indirect)
|
|||
}
|
||||
else
|
||||
{
|
||||
bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmMask);
|
||||
if(bmp)
|
||||
if(CurIconObject->IconInfo.hbmMask &&
|
||||
(bmp = BITMAPOBJ_LockBitmap(CurIconObject->IconInfo.hbmMask)))
|
||||
{
|
||||
CurIconObject->Size.cx = bmp->size.cx;
|
||||
CurIconObject->Size.cy = bmp->size.cy / 2;
|
||||
|
@ -1036,12 +1036,23 @@ NtUserSetCursorIconData(
|
|||
if(CurIconObject)
|
||||
{
|
||||
/* Copy fields */
|
||||
if(fIcon)
|
||||
{
|
||||
Status = MmCopyFromCaller(&CurIconObject->IconInfo.fIcon, fIcon, sizeof(BOOL));
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastNtError(Status);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!Hotspot)
|
||||
Ret = TRUE;
|
||||
}
|
||||
|
||||
if(Hotspot)
|
||||
{
|
||||
Status = MmCopyFromCaller(&SafeHotspot, Hotspot, sizeof(POINT));
|
||||
if(NT_SUCCESS(Status))
|
||||
{
|
||||
|
@ -1056,6 +1067,15 @@ NtUserSetCursorIconData(
|
|||
}
|
||||
else
|
||||
SetLastNtError(Status);
|
||||
}
|
||||
|
||||
if(!fIcon && !Hotspot)
|
||||
{
|
||||
CurIconObject->hModule = hModule;
|
||||
CurIconObject->hRsrc = hRsrc;
|
||||
CurIconObject->hGroupRsrc = hGroupRsrc;
|
||||
Ret = TRUE;
|
||||
}
|
||||
|
||||
done:
|
||||
IntReleaseCurIconObject(WinStaObject);
|
||||
|
|
Loading…
Reference in a new issue