From 0556ab785ea231dd212ed83dd5dde6c64b03fdc8 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 5 Feb 2007 20:59:18 +0000 Subject: [PATCH] Merge 25725, 25726, 25728. svn path=/branches/ros-branch-0_3_1/; revision=25732 --- reactos/dll/win32/user32/windows/bitmap.c | 46 ++++++++++++++--------- reactos/dll/win32/user32/windows/icon.c | 2 +- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/reactos/dll/win32/user32/windows/bitmap.c b/reactos/dll/win32/user32/windows/bitmap.c index bdee7389e72..9615ccd2bc4 100644 --- a/reactos/dll/win32/user32/windows/bitmap.c +++ b/reactos/dll/win32/user32/windows/bitmap.c @@ -186,9 +186,8 @@ LoadCursorIconImage( UINT fuLoad, ULONG uType) { + HRSRC hResInfo; HANDLE hResource; - HANDLE h2Resource; - HANDLE hfRes; HANDLE hFile; HANDLE hSection; CURSORICONFILEDIR *IconDIR; @@ -211,25 +210,20 @@ LoadCursorIconImage( if (hinst == NULL) hinst = User32Instance; - hResource = hfRes = FindResourceW(hinst, lpszName, + hResInfo = FindResourceW(hinst, lpszName, Icon ? RT_GROUP_ICON : RT_GROUP_CURSOR); - if (hResource == NULL) + if (hResInfo == NULL) return NULL; - if (fuLoad & LR_SHARED) - { - hIcon = NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes, width, height); - if (hIcon) - return hIcon; - } - - hResource = LoadResource(hinst, hResource); + hResource = LoadResource(hinst, hResInfo); if (hResource == NULL) return NULL; IconResDir = LockResource(hResource); if (IconResDir == NULL) + { return NULL; + } /* * Find the best fitting in the IconResDir for this resolution @@ -238,27 +232,45 @@ LoadCursorIconImage( id = LookupIconIdFromDirectoryEx((PBYTE)IconResDir, Icon, width, height, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME)); - h2Resource = FindResourceW(hinst, MAKEINTRESOURCEW(id), + hResInfo = FindResourceW(hinst, MAKEINTRESOURCEW(id), Icon ? MAKEINTRESOURCEW(RT_ICON) : MAKEINTRESOURCEW(RT_CURSOR)); - if (h2Resource == NULL) + if (hResInfo == NULL) + { return NULL; + } - hResource = LoadResource(hinst, h2Resource); + /* Now we have found the icon we want to load. + * Let's see if we already loaded it */ + if (fuLoad & LR_SHARED) + { + hIcon = NtUserFindExistingCursorIcon(hinst, hResInfo, 0, 0); + if (hIcon) + { + return hIcon; + } + } + + hResource = LoadResource(hinst, hResInfo); if (hResource == NULL) + { return NULL; + } ResIcon = LockResource(hResource); if (ResIcon == NULL) + { return NULL; + } hIcon = CreateIconFromResourceEx((PBYTE)ResIcon, - SizeofResource(hinst, h2Resource), + SizeofResource(hinst, hResInfo), Icon, 0x00030000, width, height, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME)); + if (hIcon && 0 != (fuLoad & LR_SHARED)) { - NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, (HRSRC)hfRes, + NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, hResInfo, (HRSRC)NULL); } diff --git a/reactos/dll/win32/user32/windows/icon.c b/reactos/dll/win32/user32/windows/icon.c index b965658019f..3248820746b 100644 --- a/reactos/dll/win32/user32/windows/icon.c +++ b/reactos/dll/win32/user32/windows/icon.c @@ -206,7 +206,7 @@ CreateIconFromResource( BOOL fIcon, DWORD dwVer) { - return CreateIconFromResourceEx(presbits, dwResSize, fIcon, dwVer, 0, 0, 0); + return CreateIconFromResourceEx(presbits, dwResSize, fIcon, dwVer, 0, 0, LR_DEFAULTSIZE|LR_SHARED ); }