www.gusucode.com > VC++实现Vista玻璃窗体程序 > VC++实现Vista玻璃窗体程序/gusucode/Vista玻璃窗体程序文件/Src/Utility.cpp
#include "StdAfx.h" #include "./Utility.h" //------------------------------------------------------------------------- // Function Name :GetModulePath // Parameter(s) :HMODULE hModule Get module handle // Return :The module file path // Create :2007-1-10 11:24 Jerry.Wang // Memo :Retrieve the path of the given module //------------------------------------------------------------------------- CString CUtility::GetModulePath(HMODULE hModule /* = NULL */) { TCHAR buf[MAX_PATH] = {'\0'}; CString strDir, strTemp; ::GetModuleFileName( hModule, buf, MAX_PATH); strTemp = buf; strDir = strTemp.Left( strTemp.ReverseFind('\\') + 1 ); return strDir; } //------------------------------------------------------------------------- // Function Name :IsFileExist // Parameter(s) :LPCTSTR lpszFilePath File path // Return : // Create :2007-4-23 15:13 Jerry.Wang // Memo :verify the file exist //------------------------------------------------------------------------- BOOL CUtility::IsFileExist(LPCTSTR lpszFilePath) { BOOL bExist = FALSE; HANDLE hFile = NULL; hFile = CreateFile( lpszFilePath , GENERIC_READ , FILE_SHARE_READ | FILE_SHARE_WRITE , NULL , OPEN_EXISTING , 0 , 0 ); if( hFile != INVALID_HANDLE_VALUE ) { CloseHandle( hFile ); bExist = TRUE; } return bExist; } //------------------------------------------------------------------------- // Function Name :ExtractResourceToFile // Parameter(s) :UINT nResID The resource id // :LPCTSTR lpszFilename The file name // :HMODULE hModule The module handle // Return :BOOL Success on TRUE // Create :2007-1-8 17:35 Jerry.Wang // Memo :Extract resource to file //------------------------------------------------------------------------- BOOL CUtility::ExtractResourceToFile( LPCTSTR lpszType , UINT nResID , LPCTSTR lpszFilename , HMODULE hModule ) { HRSRC hRes = ::FindResource( hModule, MAKEINTRESOURCE(nResID), lpszType); if( hRes == NULL ) { ATLASSERT(FALSE); return FALSE; } DWORD dwSize = ::SizeofResource( hModule, hRes); if( dwSize == 0 ) { ATLASSERT(FALSE); return FALSE; } HGLOBAL hGlobal = ::LoadResource( hModule, hRes); if( hGlobal == NULL ) { ATLASSERT(FALSE); return FALSE; } LPVOID pBuffer = ::LockResource(hGlobal); if( pBuffer == NULL ) { ATLASSERT(FALSE); ::FreeResource(hGlobal); return FALSE; } HANDLE hFile = ::CreateFile( lpszFilename , GENERIC_WRITE , FILE_SHARE_WRITE | FILE_SHARE_READ , NULL , CREATE_ALWAYS , 0 , NULL ); if( hFile == NULL ) { ATLASSERT(FALSE); ::FreeResource(hGlobal); return FALSE; } DWORD dwWritten = 0; ::WriteFile( hFile, pBuffer, dwSize, &dwWritten, NULL); if( dwWritten != dwSize ) { ATLASSERT(FALSE); ::FreeResource(hGlobal); return FALSE; } ::FlushFileBuffers(hFile); ::CloseHandle(hFile); ::FreeResource(hGlobal); return TRUE; }// ExtractResourceToFile //------------------------------------------------------------------------- // Function Name :LoadImage // Parameter(s) :UINT nID The resource id // :LPCTSTR lpszType The resource type // :HINSTANCE hInstance The module handle // Return :Image * // Create :2009-3-12 14:28 Jerry.Wang // Memo :Load the GDIPlus::Image from resource //------------------------------------------------------------------------- Image * CUtility::LoadImage( UINT nID, LPCTSTR lpszType, HINSTANCE hInstance /*=NULL*/) { Image * pImage = NULL; if( lpszType == RT_BITMAP ) { HBITMAP hBitmap = ::LoadBitmap( hInstance, MAKEINTRESOURCE(nID) ); pImage = (Image*)Bitmap::FromHBITMAP(hBitmap, 0); ::DeleteObject(hBitmap); return pImage; } hInstance = (hInstance == NULL) ? ::AfxGetResourceHandle() : hInstance; HRSRC hRsrc = ::FindResource ( hInstance, MAKEINTRESOURCE(nID), lpszType); ASSERT(hRsrc != NULL); DWORD dwSize = ::SizeofResource( hInstance, hRsrc); LPBYTE lpRsrc = (LPBYTE)::LoadResource( hInstance, hRsrc); ASSERT(lpRsrc != NULL); HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED, dwSize); LPBYTE pMem = (LPBYTE)::GlobalLock(hMem); memcpy( pMem, lpRsrc, dwSize); IStream * pStream = NULL; ::CreateStreamOnHGlobal( hMem, FALSE, &pStream); pImage = Image::FromStream(pStream); ::GlobalUnlock(hMem); pStream->Release(); ::FreeResource(lpRsrc); return pImage; }