- Make the file at least slightly readable (the mixed TABs and spaces
were way too annoying).
- Replace GetModuleHandleW(L"user32.dll") with User32Instance.
- Fix one more allocation check.
Modified: trunk/reactos/lib/user32/windows/bitmap.c
_____
Modified: trunk/reactos/lib/user32/windows/bitmap.c
--- trunk/reactos/lib/user32/windows/bitmap.c 2005-12-12 20:59:55 UTC
(rev 20120)
+++ trunk/reactos/lib/user32/windows/bitmap.c 2005-12-12 21:31:19 UTC
(rev 20121)
@@ -49,24 +49,25 @@
int cyDesired,
UINT fuLoad)
{
- LPWSTR lpszWName;
- HANDLE Handle;
- UNICODE_STRING NameString;
+ LPWSTR lpszWName;
+ HANDLE Handle;
+ UNICODE_STRING NameString;
- if (HIWORD(lpszName))
- {
+ if (HIWORD(lpszName))
+ {
RtlCreateUnicodeStringFromAsciiz(&NameString, (LPSTR)lpszName);
lpszWName = NameString.Buffer;
Handle = LoadImageW(hinst, lpszWName, uType, cxDesired,
cyDesired, fuLoad);
RtlFreeUnicodeString(&NameString);
- }
- else
- {
+ }
+ else
+ {
Handle = LoadImageW(hinst, (LPCWSTR)lpszName, uType, cxDesired,
cyDesired, fuLoad);
- }
- return(Handle);
+ }
+
+ return Handle;
}
@@ -94,35 +95,27 @@
if (!(fuLoad & LR_LOADFROMFILE))
{
if (hinst == NULL)
- {
- hinst = GetModuleHandleW(L"USER32");
- }
+ hinst = User32Instance;
+
hResource = hfRes = FindResourceW(hinst, lpszName,
RT_GROUP_CURSOR);
if (hResource == NULL)
- {
return NULL;
- }
if (fuLoad & LR_SHARED)
{
/* FIXME - pass size! */
hIcon = (HANDLE)NtUserFindExistingCursorIcon(hinst,
(HRSRC)hfRes, 0, 0);
if (hIcon)
- {
return hIcon;
- }
}
hResource = LoadResource(hinst, hResource);
if (hResource == NULL)
- {
return NULL;
- }
+
IconResDir = LockResource(hResource);
if (IconResDir == NULL)
- {
return NULL;
- }
/* Find the best fitting in the IconResDir for this resolution.
*/
id = LookupIconIdFromDirectoryEx((PBYTE)IconResDir, TRUE,
@@ -133,15 +126,11 @@
hResource = LoadResource(hinst, h2Resource);
if (hResource == NULL)
- {
return NULL;
- }
ResIcon = LockResource(hResource);
if (ResIcon == NULL)
- {
return NULL;
- }
hIcon = (HANDLE)CreateIconFromResourceEx((PBYTE)ResIcon,
SizeofResource(hinst, h2Resource), FALSE, 0x00030000,
@@ -161,25 +150,19 @@
}
hFile = CreateFileW(lpszName, GENERIC_READ, FILE_SHARE_READ, NULL,
- OPEN_EXISTING, 0, NULL);
+ OPEN_EXISTING, 0, NULL);
if (hFile == NULL)
- {
return NULL;
- }
hSection = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0,
NULL);
CloseHandle(hFile);
if (hSection == NULL)
- {
return NULL;
- }
IconDIR = MapViewOfFile(hSection, FILE_MAP_READ, 0, 0, 0);
CloseHandle(hSection);
if (IconDIR == NULL)
- {
return NULL;
- }
if (0 != IconDIR->idReserved ||
(IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR !=
IconDIR->idType))
@@ -192,7 +175,7 @@
* Get a handle to the screen dc, the icon we create is going to be
* compatable with it.
*/
- hScreenDc = CreateCompatibleDC(0);
+ hScreenDc = CreateCompatibleDC(NULL);
if (hScreenDc == NULL)
{
UnmapViewOfFile(IconDIR);
@@ -245,9 +228,7 @@
{
ColorCount = SafeIconImage->icHeader.biClrUsed;
if (ColorCount == 0 && SafeIconImage->icHeader.biBitCount <= 8)
- {
- ColorCount = 1 << SafeIconImage->icHeader.biBitCount;
- }
+ ColorCount = 1 << SafeIconImage->icHeader.biBitCount;
HeaderSize = sizeof(BITMAPINFOHEADER) + ColorCount *
sizeof(RGBQUAD);
}
@@ -257,6 +238,7 @@
hIcon = ICON_CreateCursorFromData(hScreenDc, Data, SafeIconImage,
32, 32, dirEntry->Info.cursor.wXHotspot,
dirEntry->Info.cursor.wYHotspot);
DeleteDC(hScreenDc);
RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
+
return hIcon;
}
@@ -264,390 +246,316 @@
static HANDLE
LoadIconImage(HINSTANCE hinst, LPCWSTR lpszName, INT width, INT height,
UINT fuLoad)
{
- HANDLE hResource;
- HANDLE h2Resource;
- HANDLE hfRes;
- HANDLE hFile;
- HANDLE hSection;
- CURSORICONDIR* IconDIR;
- HDC hScreenDc;
- HANDLE hIcon;
- ULONG HeaderSize;
- ULONG ColorCount;
- PVOID Data;
- CURSORICONDIRENTRY* dirEntry;
- ICONIMAGE* SafeIconImage;
- GRPCURSORICONDIR* IconResDir;
- INT id;
- ICONIMAGE *ResIcon;
+ HANDLE hResource;
+ HANDLE h2Resource;
+ HANDLE hfRes;
+ HANDLE hFile;
+ HANDLE hSection;
+ CURSORICONDIR* IconDIR;
+ HDC hScreenDc;
+ HICON hIcon;
+ ULONG HeaderSize;
+ ULONG ColorCount;
+ PVOID Data;
+ CURSORICONDIRENTRY* dirEntry;
+ ICONIMAGE* SafeIconImage;
+ GRPCURSORICONDIR* IconResDir;
+ INT id;
+ ICONIMAGE *ResIcon;
- if (!(fuLoad & LR_LOADFROMFILE))
- {
+ if (!(fuLoad & LR_LOADFROMFILE))
+ {
if (hinst == NULL)
- {
- hinst = GetModuleHandleW(L"USER32");
- }
+ hinst = User32Instance;
+
hResource = hfRes = FindResourceW(hinst, lpszName,
RT_GROUP_ICON);
if (hResource == NULL)
- {
- return(NULL);
- }
+ return NULL;
if (fuLoad & LR_SHARED)
- {
- hIcon = NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes,
width, height);
- if(hIcon)
- return hIcon;
- }
+ {
+ hIcon = NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes,
width, height);
+ if (hIcon)
+ return hIcon;
+ }
hResource = LoadResource(hinst, hResource);
if (hResource == NULL)
- {
- return(NULL);
- }
+ return NULL;
+
IconResDir = LockResource(hResource);
if (IconResDir == NULL)
- {
- return(NULL);
- }
+ return NULL;
- //find the best fitting in the IconResDir for this resolution
- id = LookupIconIdFromDirectoryEx((PBYTE) IconResDir, TRUE,
- width, height, fuLoad & (LR_DEFAULTCOLOR |
LR_MONOCHROME));
+ /*
+ * Find the best fitting in the IconResDir for this resolution
+ */
- h2Resource = FindResourceW(hinst,
- MAKEINTRESOURCEW(id),
- MAKEINTRESOURCEW(RT_ICON));
+ id = LookupIconIdFromDirectoryEx((PBYTE)IconResDir, TRUE, width,
height,
+ fuLoad & (LR_DEFAULTCOLOR |
LR_MONOCHROME));
+ h2Resource = FindResourceW(hinst, MAKEINTRESOURCEW(id),
MAKEINTRESOURCEW(RT_ICON));
+
hResource = LoadResource(hinst, h2Resource);
if (hResource == NULL)
- {
- return(NULL);
- }
+ return NULL;
ResIcon = LockResource(hResource);
if (ResIcon == NULL)
- {
- return(NULL);
- }
- hIcon = (HANDLE)CreateIconFromResourceEx((PBYTE) ResIcon,
- SizeofResource(hinst, h2Resource), TRUE,
0x00030000,
- width, height, fuLoad & (LR_DEFAULTCOLOR |
LR_MONOCHROME));
+ return NULL;
+
+ hIcon = CreateIconFromResourceEx((PBYTE)ResIcon,
+ SizeofResource(hinst,
h2Resource),
+ TRUE, 0x00030000, width, height,
+ fuLoad & (LR_DEFAULTCOLOR |
LR_MONOCHROME));
if (hIcon && 0 != (fuLoad & LR_SHARED))
{
- NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst,
(HRSRC)hfRes,
- (HRSRC)NULL);
+ NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst,
(HRSRC)hfRes,
+ (HRSRC)NULL);
}
+
return hIcon;
- }
- else
- {
- /*
- * FIXME: This code is incorrect and is likely to crash in many
cases.
- * In the file the cursor/icon directory records are stored like
- * CURSORICONFILEDIR, but we treat them like CURSORICONDIR. In
Wine
- * this is solved by creating a fake cursor/icon directory in
memory
- * and passing that to CURSORICON_FindBestIcon.
- */
+ }
- if (fuLoad & LR_SHARED)
- {
- DbgPrint("FIXME: need LR_SHARED support for loading icon images
from files\n");
- }
+ /*
+ * FIXME: This code is incorrect and is likely to crash in many
cases.
+ * In the file the cursor/icon directory records are stored like
+ * CURSORICONFILEDIR, but we treat them like CURSORICONDIR. In Wine
+ * this is solved by creating a fake cursor/icon directory in memory
+ * and passing that to CURSORICON_FindBestIcon.
+ */
- hFile = CreateFileW(lpszName,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
- if (hFile == NULL)
- {
- return NULL;
- }
+ if (fuLoad & LR_SHARED)
+ {
+ DbgPrint("FIXME: need LR_SHARED support for loading icon images
from files\n");
+ }
- hSection = CreateFileMappingW(hFile,
- NULL,
- PAGE_READONLY,
- 0,
- 0,
- NULL);
+ hFile = CreateFileW(lpszName, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, 0, NULL);
+ if (hFile == NULL)
+ return NULL;
- CloseHandle(hFile);
- if (hSection == NULL)
- {
- return NULL;
- }
+ hSection = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0,
NULL);
+ CloseHandle(hFile);
+ if (hSection == NULL)
+ return NULL;
- IconDIR = MapViewOfFile(hSection,
- FILE_MAP_READ,
- 0,
- 0,
- 0);
- CloseHandle(hSection);
- if (IconDIR == NULL)
- {
- return NULL;
- }
-
- if (0 != IconDIR->idReserved ||
- (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR !=
IconDIR->idType))
- {
- UnmapViewOfFile(IconDIR);
- return NULL;
- }
+ IconDIR = MapViewOfFile(hSection, FILE_MAP_READ, 0, 0, 0);
+ CloseHandle(hSection);
+ if (IconDIR == NULL)
+ return NULL;
+
+ if (0 != IconDIR->idReserved ||
+ (IMAGE_ICON != IconDIR->idType && IMAGE_CURSOR !=
IconDIR->idType))
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
- //pick the best size.
- dirEntry = (CURSORICONDIRENTRY *) CURSORICON_FindBestIcon(
IconDIR, width, height, 1);
- if (!dirEntry)
- {
- UnmapViewOfFile(IconDIR);
- return NULL;
- }
+ /* Pick the best size. */
+ dirEntry = (CURSORICONDIRENTRY *)CURSORICON_FindBestIcon(IconDIR,
width, height, 1);
+ if (!dirEntry)
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
- SafeIconImage = RtlAllocateHeap(GetProcessHeap(), 0,
dirEntry->dwBytesInRes);
+ SafeIconImage = RtlAllocateHeap(GetProcessHeap(), 0,
dirEntry->dwBytesInRes);
+ if (SafeIconImage == NULL)
+ {
+ UnmapViewOfFile(IconDIR);
+ return NULL;
+ }
- memcpy(SafeIconImage, ((PBYTE)IconDIR) + dirEntry->dwImageOffset,
dirEntry->dwBytesInRes);
- UnmapViewOfFile(IconDIR);
- }
+ memcpy(SafeIconImage, ((PBYTE)IconDIR) + dirEntry->dwImageOffset,
dirEntry->dwBytesInRes);
+ UnmapViewOfFile(IconDIR);
- //at this point we have a copy of the icon image to play with
+ /* At this point we have a copy of the icon image to play with. */
- SafeIconImage->icHeader.biHeight = SafeIconImage->icHeader.biHeight
/2;
+ SafeIconImage->icHeader.biHeight = SafeIconImage->icHeader.biHeight
/2;
- if (SafeIconImage->icHeader.biSize == sizeof(BITMAPCOREHEADER))
- {
+ if (SafeIconImage->icHeader.biSize == sizeof(BITMAPCOREHEADER))
+ {
BITMAPCOREHEADER* Core = (BITMAPCOREHEADER*)SafeIconImage;
ColorCount = (Core->bcBitCount <= 8) ? (1 << Core->bcBitCount) :
0;
HeaderSize = sizeof(BITMAPCOREHEADER) + ColorCount *
sizeof(RGBTRIPLE);
- }
- else
- {
+ }
+ else
+ {
ColorCount = SafeIconImage->icHeader.biClrUsed;
if (ColorCount == 0 && SafeIconImage->icHeader.biBitCount <= 8)
- {
- ColorCount = 1 << SafeIconImage->icHeader.biBitCount;
- }
+ ColorCount = 1 << SafeIconImage->icHeader.biBitCount;
HeaderSize = sizeof(BITMAPINFOHEADER) + ColorCount *
sizeof(RGBQUAD);
- }
+ }
- //make data point to the start of the XOR image data
- Data = (PBYTE)SafeIconImage + HeaderSize;
+ /* Make data point to the start of the XOR image data. */
+ Data = (PBYTE)SafeIconImage + HeaderSize;
-
- //get a handle to the screen dc, the icon we create is going to be
compatable with this
- hScreenDc = CreateDCW(L"DISPLAY", NULL, NULL, NULL);
- if (hScreenDc == NULL)
- {
+ /* Get a handle to the screen dc, the icon we create is going to be
+ * compatable with this. */
+ hScreenDc = CreateDCW(L"DISPLAY", NULL, NULL, NULL);
+ if (hScreenDc == NULL)
+ {
if (fuLoad & LR_LOADFROMFILE)
- {
RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
- }
- return(NULL);
- }
+ return NULL;
+ }
- hIcon = ICON_CreateIconFromData(hScreenDc, Data, SafeIconImage,
width, height, width/2, height/2);
- RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
- return hIcon;
+ hIcon = ICON_CreateIconFromData(hScreenDc, Data, SafeIconImage,
width, height, width/2, height/2);
+ RtlFreeHeap(GetProcessHeap(), 0, SafeIconImage);
+
+ return hIcon;
}
static HANDLE
LoadBitmapImage(HINSTANCE hInstance, LPCWSTR lpszName, UINT fuLoad)
{
- HANDLE hResource;
- HANDLE hFile;
- HANDLE hSection;
- BITMAPINFO* BitmapInfo;
- BITMAPINFO* PrivateInfo;
- HDC hScreenDc;
- HANDLE hBitmap;
- ULONG HeaderSize;
- ULONG ColorCount;
- PVOID Data;
+ HANDLE hResource;
+ HANDLE hFile;
+ HANDLE hSection;
+ LPBITMAPINFO BitmapInfo;
+ LPBITMAPINFO PrivateInfo;
+ HDC hScreenDc;
+ HANDLE hBitmap;
+ ULONG HeaderSize;
+ ULONG ColorCount;
+ PVOID Data;
- if (!(fuLoad & LR_LOADFROMFILE))
- {
+ if (!(fuLoad & LR_LOADFROMFILE))
+ {
if (hInstance == NULL)
- {
- hInstance = GetModuleHandleW(L"USER32");
- }
+ hInstance = User32Instance;
+
hResource = FindResourceW(hInstance, lpszName, RT_BITMAP);
if (hResource == NULL)
- {
- return(NULL);
- }
+ return NULL;
hResource = LoadResource(hInstance, hResource);
if (hResource == NULL)
- {
- return(NULL);
- }
+ return NULL;
BitmapInfo = LockResource(hResource);
if (BitmapInfo == NULL)
- {
- return(NULL);
- }
- }
- else
- {
- hFile = CreateFileW(lpszName,
- GENERIC_READ,
- FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- 0,
- NULL);
+ return NULL;
+ }
+ else
+ {
+ hFile = CreateFileW(lpszName, GENERIC_READ, FILE_SHARE_READ,
NULL,
+ OPEN_EXISTING, 0, NULL);
if (hFile == NULL)
- {
- return(NULL);
- }
- hSection = CreateFileMappingW(hFile,
- NULL,
- PAGE_READONLY,
- 0,
- 0,
- NULL);
+ return NULL;
+
+ hSection = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0,
NULL);
CloseHandle(hFile);
if (hSection == NULL)
- {
- return(NULL);
- }
- BitmapInfo = MapViewOfFile(hSection,
- FILE_MAP_READ,
- 0,
- 0,
- 0);
+ return NULL;
+
+ BitmapInfo = MapViewOfFile(hSection, FILE_MAP_READ, 0, 0, 0);
CloseHandle(hSection);
if (BitmapInfo == NULL)
- {
- return(NULL);
- }
- /* offset BitmapInfo by 14 bytes to acount for the size of
BITMAPFILEHEADER
- unfortunatly sizeof(BITMAPFILEHEADER) = 16, but the acutal
size should be 14!
- */
- BitmapInfo = (BITMAPINFO*)(((PBYTE)BitmapInfo) + 14);
- }
+ return NULL;
- if (BitmapInfo->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
- {
+ BitmapInfo = (LPBITMAPINFO)((ULONG_PTR)BitmapInfo +
sizeof(BITMAPFILEHEADER));
+ }
+
+ if (BitmapInfo->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
+ {
BITMAPCOREHEADER* Core = (BITMAPCOREHEADER*)BitmapInfo;
ColorCount = (Core->bcBitCount <= 8) ? (1 << Core->bcBitCount) :
0;
HeaderSize = sizeof(BITMAPCOREHEADER) + ColorCount *
sizeof(RGBTRIPLE);
- }
- else
- {
+ }
+ else
+ {
ColorCount = BitmapInfo->bmiHeader.biClrUsed;
if (ColorCount == 0 && BitmapInfo->bmiHeader.biBitCount <= 8)
- {
- ColorCount = 1 << BitmapInfo->bmiHeader.biBitCount;
- }
+ ColorCount = 1 << BitmapInfo->bmiHeader.biBitCount;
HeaderSize = sizeof(BITMAPINFOHEADER) + ColorCount *
sizeof(RGBQUAD);
- }
- Data = (PVOID)((ULONG_PTR)BitmapInfo + HeaderSize);
+ }
+ Data = (PVOID)((ULONG_PTR)BitmapInfo + HeaderSize);
- PrivateInfo = RtlAllocateHeap(GetProcessHeap(), 0, HeaderSize);
- if (PrivateInfo == NULL)
- {
+ PrivateInfo = RtlAllocateHeap(GetProcessHeap(), 0, HeaderSize);
+ if (PrivateInfo == NULL)
+ {
if (fuLoad & LR_LOADFROMFILE)
- {
- UnmapViewOfFile(BitmapInfo);
- }
- return(NULL);
- }
- memcpy(PrivateInfo, BitmapInfo, HeaderSize);
+ UnmapViewOfFile(BitmapInfo);
+ return NULL;
+ }
+ memcpy(PrivateInfo, BitmapInfo, HeaderSize);
- /* FIXME: Handle color conversion and transparency. */
+ /* FIXME: Handle color conversion and transparency. */
- hScreenDc = CreateCompatibleDC(NULL);
- if (hScreenDc == NULL)
- {
+ hScreenDc = CreateCompatibleDC(NULL);
+ if (hScreenDc == NULL)
+ {
RtlFreeHeap(GetProcessHeap(), 0, PrivateInfo);
if (fuLoad & LR_LOADFROMFILE)
- {
- UnmapViewOfFile(BitmapInfo);
- }
- return(NULL);
- }
+ UnmapViewOfFile(BitmapInfo);
+ return NULL;
+ }
- if (fuLoad & LR_CREATEDIBSECTION)
- {
+ if (fuLoad & LR_CREATEDIBSECTION)
+ {
DIBSECTION Dib;
hBitmap = CreateDIBSection(hScreenDc, PrivateInfo,
DIB_RGB_COLORS, NULL,
- 0, 0);
+ 0, 0);
GetObjectA(hBitmap, sizeof(DIBSECTION), &Dib);
SetDIBits(hScreenDc, hBitmap, 0, Dib.dsBm.bmHeight, Data,
BitmapInfo,
- DIB_RGB_COLORS);
- }
- else
- {
+ DIB_RGB_COLORS);
+ }
+ else
+ {
hBitmap = CreateDIBitmap(hScreenDc, &PrivateInfo->bmiHeader,
CBM_INIT,
- Data, PrivateInfo, DIB_RGB_COLORS);
- }
+ Data, PrivateInfo, DIB_RGB_COLORS);
+ }
- RtlFreeHeap(GetProcessHeap(), 0, PrivateInfo);
- DeleteDC(hScreenDc);
- if (fuLoad & LR_LOADFROMFILE)
- {
+ RtlFreeHeap(GetProcessHeap(), 0, PrivateInfo);
+ DeleteDC(hScreenDc);
+ if (fuLoad & LR_LOADFROMFILE)
UnmapViewOfFile(BitmapInfo);
- }
- return(hBitmap);
+
+ return hBitmap;
}
HANDLE STDCALL
-LoadImageW(HINSTANCE hinst,
- LPCWSTR lpszName,
- UINT uType,
- int cxDesired,
- int cyDesired,
- UINT fuLoad)
+LoadImageW(
+ IN HINSTANCE hinst,
+ IN LPCWSTR lpszName,
+ IN UINT uType,
+ IN INT cxDesired,
+ IN INT cyDesired,
+ IN UINT fuLoad)
{
- if (fuLoad & LR_DEFAULTSIZE)
- {
+ if (fuLoad & LR_DEFAULTSIZE)
+ {
if (uType == IMAGE_ICON)
- {
- if (cxDesired == 0)
- {
- cxDesired = GetSystemMetrics(SM_CXICON);
- }
- if (cyDesired == 0)
- {
- cyDesired = GetSystemMetrics(SM_CYICON);
- }
- }
- else if (uType == IMAGE_CURSOR)
- {
- if (cxDesired == 0)
- {
- cxDesired = GetSystemMetrics(SM_CXCURSOR);
- }
- if (cyDesired == 0)
- {
- cyDesired = GetSystemMetrics(SM_CYCURSOR);
- }
- }
- }
-
- switch (uType)
- {
- case IMAGE_BITMAP:
{
- return(LoadBitmapImage(hinst, lpszName, fuLoad));
+ if (cxDesired == 0)
+ cxDesired = GetSystemMetrics(SM_CXICON);
+ if (cyDesired == 0)
+ cyDesired = GetSystemMetrics(SM_CYICON);
}
- case IMAGE_CURSOR:
+ else if (uType == IMAGE_CURSOR)
{
- return(LoadCursorImage(hinst, lpszName, fuLoad));
+ if (cxDesired == 0)
+ cxDesired = GetSystemMetrics(SM_CXCURSOR);
+ if (cyDesired == 0)
+ cyDesired = GetSystemMetrics(SM_CYCURSOR);
}
- case IMAGE_ICON:
- {
- return(LoadIconImage(hinst, lpszName, cxDesired, cyDesired,
fuLoad));
- }
- default:
- DbgBreakPoint();
- break;
- }
- return(NULL);
+ }
+
+ switch (uType)
+ {
+ case IMAGE_BITMAP:
+ return LoadBitmapImage(hinst, lpszName, fuLoad);
+ case IMAGE_CURSOR:
+ return LoadCursorImage(hinst, lpszName, fuLoad);
+ case IMAGE_ICON:
+ return LoadIconImage(hinst, lpszName, cxDesired, cyDesired,
fuLoad);
+ default:
+ break;
+ }
+
+ return NULL;
}
@@ -657,7 +565,7 @@
HBITMAP STDCALL
LoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName)
{
- return(LoadImageA(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, 0));
+ return LoadImageA(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, 0);
}
@@ -667,7 +575,7 @@
HBITMAP STDCALL
LoadBitmapW(HINSTANCE hInstance, LPCWSTR lpBitmapName)
{
- return(LoadImageW(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, 0));
+ return LoadImageW(hInstance, lpBitmapName, IMAGE_BITMAP, 0, 0, 0);
}
@@ -675,56 +583,67 @@
* @unimplemented
*/
HANDLE WINAPI
-CopyImage(HANDLE hnd, UINT type, INT desiredx, INT desiredy, UINT
flags)
+CopyImage(
+ IN HANDLE hnd,
+ IN UINT type,
+ IN INT desiredx,
+ IN INT desiredy,
+ IN UINT flags)
{
- HBITMAP res;
- BITMAP bm;
+ HBITMAP res;
+ BITMAP bm;
- switch (type)
- {
- case IMAGE_BITMAP:
- {
- DbgPrint("WARNING: Incomplete
implementation of CopyImage!\n");
- /* FIXME: support flags LR_COPYDELETEORG,
LR_COPYFROMRESOURCE,
-
LR_COPYRETURNORG, LR_CREATEDIBSECTION,
- and
LR_MONOCHROME; */
+ switch (type)
+ {
+ case IMAGE_BITMAP:
+ {
+ DbgPrint("WARNING: Incomplete implementation of
CopyImage!\n");
+ /*
+ * FIXME: Support flags LR_COPYDELETEORG,
LR_COPYFROMRESOURCE,
+ * LR_COPYRETURNORG, LR_CREATEDIBSECTION and LR_MONOCHROME.
+ */
+ if (!GetObjectW(hnd, sizeof(bm), &bm))
+ return NULL;
+ bm.bmBits = NULL;
+ if ((res = CreateBitmapIndirect(&bm)))
+ {
+ char *buf = HeapAlloc(GetProcessHeap(), 0,
bm.bmWidthBytes * bm.bmHeight);
+ if (buf == NULL)
+ {
+ DeleteObject(res);
+ return NULL;
+ }
+ GetBitmapBits(hnd, bm.bmWidthBytes * bm.bmHeight, buf);
+ SetBitmapBits(res, bm.bmWidthBytes * bm.bmHeight, buf);
+ HeapFree(GetProcessHeap(), 0, buf);
+ }
+ return res;
+ }
- if (!GetObjectW(hnd, sizeof(bm), &bm))
return 0;
- bm.bmBits = NULL;
- if ((res = CreateBitmapIndirect(&bm)))
- {
- char *buf = HeapAlloc(GetProcessHeap(), 0,
bm.bmWidthBytes * bm.bmHeight);
- if (buf == NULL)
- {
- DeleteObject(res);
- return NULL;
- }
- GetBitmapBits(hnd,
bm.bmWidthBytes * bm.bmHeight, buf);
- SetBitmapBits(res,
bm.bmWidthBytes * bm.bmHeight, buf);
- HeapFree(GetProcessHeap(), 0,
buf);
- }
- return res;
- }
- case IMAGE_ICON:
- {
- static BOOL IconMsgDisplayed = FALSE;
- /* FIXME: support loading the image as
shared from an instance */
- if (!IconMsgDisplayed) {
- DbgPrint("FIXME: CopyImage
doesn't support IMAGE_ICON correctly!\n");
- IconMsgDisplayed = TRUE;
- }
- return CopyIcon(hnd);
- }
- case IMAGE_CURSOR:
- {
- static BOOL IconMsgDisplayed = FALSE;
- /* FIXME: support loading the image as
shared from an instance */
- if (!IconMsgDisplayed) {
- DbgPrint("FIXME: CopyImage
doesn't support IMAGE_CURSOR correctly!\n");
- IconMsgDisplayed = TRUE;
- }
- return CopyCursor(hnd);
- }
- }
- return 0;
+ case IMAGE_ICON:
+ {
+ static BOOL IconMsgDisplayed = FALSE;
+ /* FIXME: support loading the image as shared from an
instance */
+ if (!IconMsgDisplayed)
+ {
+ DbgPrint("FIXME: CopyImage doesn't support IMAGE_ICON
correctly!\n");
+ IconMsgDisplayed = TRUE;
+ }
+ return CopyIcon(hnd);
+ }
+
+ case IMAGE_CURSOR:
+ {
+ static BOOL IconMsgDisplayed = FALSE;
+ /* FIXME: support loading the image as shared from an
instance */
+ if (!IconMsgDisplayed)
+ {
+ DbgPrint("FIXME: CopyImage doesn't support IMAGE_CURSOR
correctly!\n");
+ IconMsgDisplayed = TRUE;
+ }
+ return CopyCursor(hnd);
+ }
+ }
+
+ return NULL;
}