19.VC(ui) - 그림 자원을 불러오는 방법(랜덤 코드)

BOOL CImageManager::LoadResImage(UINT nResID,
								 LPCTSTR lpType,
								 Bitmap *&lpImage, 
								 HINSTANCE hInstance)
{
	lpImage  = NULL;

	hInstance = (NULL == hInstance) ? ::AfxGetResourceHandle() : hInstance;
	// If bmp,use system load.
	if (RT_BITMAP == lpType)
	{
		HBITMAP hBmp = ::LoadBitmap(hInstance, MAKEINTRESOURCE(nResID));
		lpImage = Bitmap::FromHBITMAP(hBmp, 0);
		::DeleteObject(hBmp);

		if (!lpImage)
		{
			TRACE("lpImage is NULL
"); return FALSE; } else { if (Gdiplus::Ok != lpImage->GetLastStatus()) { TRACE("lpImage is error
"); return FALSE; } else { return TRUE; } } } // User-Defined HRSRC hRsrc = ::FindResource(hInstance, MAKEINTRESOURCE(nResID), lpType); if (!hRsrc) { TRACE("hRscs is NULL
"); return FALSE; } // Load resource into memory --------------------------------- DWORD len = ::SizeofResource(hInstance, hRsrc); BYTE *lpRsrc = (BYTE*)::LoadResource(hInstance, hRsrc); if (!lpRsrc) { TRACE("lpRsrc is NULL
"); return FALSE; } // Allocate global memory on which to create stream ---------- HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED, len); BYTE *pMem = (BYTE*)::GlobalLock(hMem); memcpy(pMem, lpRsrc, len); IStream *pStream = NULL; // You can query MSDN,why I use TRUE, -- hgy notes. HRESULT ht = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream); if (S_OK != ht) { TRACE("ht is error
"); return FALSE; } // Load from stream ------------------------------------------- lpImage = Gdiplus::Bitmap::FromStream(pStream); // free/release stuff ----------------------------------------- ::GlobalUnlock(hMem); pStream->Release(); ::FreeResource(lpRsrc); if (!lpImage) { TRACE("lpImage is NULL
"); return FALSE; } else { if (Gdiplus::Ok != lpImage->GetLastStatus()) { TRACE("lpImage is error
"); return FALSE; } else { return TRUE; } } }

좋은 웹페이지 즐겨찾기