|
|
//+----------------------------------------------------------------------------
//
// File: image.cpp
//
// Module: CMUTIL.DLL
//
// Synopsis: Common image loading routines
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// Author: nickball Created 03/30/98
//
//+----------------------------------------------------------------------------
#include "cmmaster.h"
//+---------------------------------------------------------------------------
//
// Function: CmLoadImageA
//
// Synopsis: ANSI Wrapper for LoadImage API which loads a resource based upon
// pszSpec which can be any of 3 formats:
//
// 1) Filename
// 2) Resource ID name
//
// Arguments: hMainInst - Our application instance handle
// pszSpec - The name of the resource
// nResType - The resource type
// nCX - Resource X dimension (ie. 32 X 32 icon)
// nCY - Resource Y dimension (ie. 32 X 32 icon)
//
// Notes: Now includes hInst of main app for portability, due to different OS
// implementations of GetModuleHandle, the 16-bit compilation would grab
// default icons (ie. Question Mark) from the system dll.
//
// Returns: TRUE on Success
//
// History: a-nichb Re-Written 03/21/97
// quintinb Implemented Wide/ANSI forms 04/08/99
// sumitc cleanup 03/14/2000
//
//----------------------------------------------------------------------------
HANDLE CmLoadImageA(HINSTANCE hMainInst, LPCSTR pszSpec, UINT nResType, UINT nCX, UINT nCY) { HANDLE hRes = NULL; // Ensure that the resource is one we can handle
MYDBGASSERT(nResType == IMAGE_BITMAP || nResType == IMAGE_ICON); // enforce that icons can only be 16x16 or 32x32.
MYDBGASSERT(nResType != IMAGE_ICON || ((GetSystemMetrics(SM_CXICON) == (int) nCX && GetSystemMetrics(SM_CYICON) == (int) nCY)) || (GetSystemMetrics(SM_CXSMICON) == (int) nCX && GetSystemMetrics(SM_CYSMICON) == (int) nCY));
if (NULL == pszSpec) { return NULL; }
DWORD dwFlags = 0; if (HIWORD(PtrToUlong(pszSpec))) { if (NULL == *pszSpec) { return NULL; } CMASSERTMSG(NULL == CmStrchrA(pszSpec, ','), TEXT("dll,id syntax no longer supported "));
// If the HIWORD is empty, it's a resource ID, else it is a string.
dwFlags |= LR_LOADFROMFILE; }
if (nResType == IMAGE_BITMAP) { dwFlags |= LR_CREATEDIBSECTION; }
// Apparently, this is intended to cause the low-order word of the
// name to used as an OEM image identifier by LoadImage on Win95.
HINSTANCE hInstTmp = (dwFlags & LR_LOADFROMFILE) ? NULL : hMainInst; hRes = LoadImageA(hInstTmp, pszSpec, nResType, nCX, nCY, (UINT) dwFlags);
#ifdef DEBUG
if (!hRes) { if (dwFlags & LR_LOADFROMFILE) { CMTRACE3A("LoadImage(hInst=0x%x, pszSpec=%S, dwFlags|dwImageFlags=0x%x) failed.", hInstTmp, pszSpec, dwFlags); } else { CMTRACE3A("LoadImage(hInst=0x%x, pszSpec=0x%x, dwFlags|dwImageFlags=0x%x) failed.", hInstTmp, pszSpec, dwFlags); } } #endif
return hRes; }
//+---------------------------------------------------------------------------
//
// Function: CmLoadImageW
//
// Synopsis: Wide Wrapper for LoadImage API which loads a resource based upon
// pszSpec which can be any of 2 formats:
//
// 1) Filename
// 2) Resource ID name
//
// Arguments: hMainInst - Our application instance handle
// pszSpec - The name of the resource
// nResType - The resource type
// nCX - Resource X dimension (ie. 32 X 32 icon)
// nCY - Resource Y dimension (ie. 32 X 32 icon)
//
// Notes: Now includes hInst of main app for portability, due to different OS
// implementations of GetModuleHandle, the 16-bit compilation would grab
// default icons (ie. Question Mark) from the system dll.
//
// Returns: TRUE on Success
//
// History: a-nichb Re-Written 03/21/1997
// quintinb Implemented Wide/ANSI forms 04/08/1999
// sumitc cleanup 03/14/2000
//
//----------------------------------------------------------------------------
HANDLE CmLoadImageW(HINSTANCE hMainInst, LPCWSTR pszSpec, UINT nResType, UINT nCX, UINT nCY) { HANDLE hRes = NULL; // Ensure that the resource is one we can handle
MYDBGASSERT(nResType == IMAGE_BITMAP || nResType == IMAGE_ICON); // enforce that icons can only be 16x16 or 32x32.
MYDBGASSERT(nResType != IMAGE_ICON || ((GetSystemMetrics(SM_CXICON) == (int) nCX && GetSystemMetrics(SM_CYICON) == (int) nCY)) || (GetSystemMetrics(SM_CXSMICON) == (int) nCX && GetSystemMetrics(SM_CYSMICON) == (int) nCY));
if (NULL == pszSpec) { return NULL; }
DWORD dwFlags = 0; if (HIWORD(PtrToUlong(pszSpec))) { if (NULL == *pszSpec) { return NULL; } CMASSERTMSG(NULL == CmStrchrW(pszSpec, L','), TEXT("dll,id syntax no longer supported "));
// If the HIWORD is empty, it's a resource ID, else it is a string.
dwFlags |= LR_LOADFROMFILE; }
if (nResType == IMAGE_BITMAP) { dwFlags |= LR_CREATEDIBSECTION; }
// Apparently, this is intended to cause the low-order word of the
// name to used as an OEM image identifier by LoadImage on Win95.
HINSTANCE hInstTmp = (dwFlags & LR_LOADFROMFILE) ? NULL : hMainInst; hRes = LoadImageU(hInstTmp, pszSpec, nResType, nCX, nCY, (UINT) dwFlags);
#ifdef DEBUG
if (!hRes) { if (dwFlags & LR_LOADFROMFILE) { CMTRACE3W(L"LoadImage(hInst=0x%x, pszSpec=%s, dwFlags|dwImageFlags=0x%x) failed.", hInstTmp, pszSpec, dwFlags); } else { CMTRACE3W(L"LoadImage(hInst=0x%x, pszSpec=0x%x, dwFlags|dwImageFlags=0x%x) failed.", hInstTmp, pszSpec, dwFlags); } } #endif
return hRes; }
//+---------------------------------------------------------------------------
//
// Function: CmLoadIconA
//
// Synopsis: This function loads a large icon from the given file path or
// the given instance handle and resource ID.
//
// Arguments: HINSTANCE hInst - Instance Handle
// LPCSTR pszSpec - either filename path or a resource ID, see
// CmLoadImage for details.
//
// Returns: HICON - Handle to an Icon on Success, NULL on Failure
//
// History: quintinb Created Header 01/13/2000
//
//----------------------------------------------------------------------------
HICON CmLoadIconA(HINSTANCE hInst, LPCSTR pszSpec) { return ((HICON) CmLoadImageA(hInst, pszSpec, IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON))); }
//+---------------------------------------------------------------------------
//
// Function: CmLoadIconW
//
// Synopsis: This function loads a large icon from the given file path or
// the given instance handle and resource ID.
//
// Arguments: HINSTANCE hInst - Instance Handle
// LPCWSTR pszSpec - either filename path or a resource ID, see
// CmLoadImage for details.
//
// Returns: HICON - Handle to an Icon on Success, NULL on Failure
//
// History: quintinb Created Header 01/13/2000
//
//----------------------------------------------------------------------------
HICON CmLoadIconW(HINSTANCE hInst, LPCWSTR pszSpec) { return ((HICON) CmLoadImageW(hInst, pszSpec, IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON))); }
//+---------------------------------------------------------------------------
//
// Function: CmLoadSmallIconA
//
// Synopsis: This function loads a small icon from the given file path or
// the given instance handle and resource ID.
//
// Arguments: HINSTANCE hInst - Instance Handle
// LPCWSTR pszSpec - either filename path or a resource ID, see
// CmLoadImage for details.
//
// Returns: HICON - Handle to an Icon on Success, NULL on Failure
//
// History: quintinb Created Header 01/13/2000
//
//----------------------------------------------------------------------------
HICON CmLoadSmallIconA(HINSTANCE hInst, LPCSTR pszSpec) { HICON hRes = NULL;
hRes = (HICON) CmLoadImageA(hInst, pszSpec, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); if (!hRes) { hRes = CmLoadIconA(hInst, pszSpec); }
return hRes; }
//+---------------------------------------------------------------------------
//
// Function: CmLoadSmallIconW
//
// Synopsis: This function loads a small icon from the given file path or
// the given instance handle and resource ID.
//
// Arguments: HINSTANCE hInst - Instance Handle
// LPCWSTR pszSpec - either filename path or a resource ID, see
// CmLoadImage for details.
//
// Returns: HICON - Handle to an Icon on Success, NULL on Failure
//
// History: quintinb Created Header 01/13/2000
//
//----------------------------------------------------------------------------
HICON CmLoadSmallIconW(HINSTANCE hInst, LPCWSTR pszSpec) { HICON hRes = NULL;
hRes = (HICON) CmLoadImageW(hInst, pszSpec, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON)); if (!hRes) { hRes = CmLoadIconW(hInst, pszSpec); }
return hRes; }
|