티스토리 뷰



으아악.


CButtonST(http://www.codeproject.com/KB/buttons/cbuttonst.aspx, 버튼에 이미지를 씌우거나, ToolTip을 붙이는 등 스타일을 입힐 수 있는 버튼 라이브러리 ) 라는 오픈소스를 활용하려고 했는데 이미지를 씌우려면 BITMAP 핸들이 필요했다.

그렇다고 내가 쓰고자 하는 애들을 전부다.. Resource로 추가해서 핸들을 얻기에는 프로그램이 너무 무거워 질 것 같아서
Resource에 추가하지 않고도 로컬에 있는 파일로 BITMAP 핸들로 얻는 방법을 찾아보기 시작했다.


HBITMAP CButtonST::MakeDIBSection(LPCTSTR _tszFilePath)

{

HANDLE hFile = CreateFile(_tszFilePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if(INVALID_HANDLE_VALUE == hFile)

return NULL;

DWORD nFileSize, dwRead;

BITMAPFILEHEADER fh;

BITMAPINFO* ih;

ReadFile(hFile, &fh, sizeof(BITMAPFILEHEADER), &dwRead, NULL);

nFileSize = fh.bfOffBits - sizeof(BITMAPFILEHEADER);

ih = (BITMAPINFO*)malloc(nFileSize);

ReadFile(hFile, ih, nFileSize, &dwRead, NULL);

PVOID pRaster;

HBITMAP hBit = CreateDIBSection(NULL, ih, DIB_RGB_COLORS, &pRaster, NULL, 0);

ReadFile(hFile, pRaster, fh.bfSize - fh.bfOffBits, &dwRead, NULL);

free(ih);

CloseHandle(hFile);

return hBit;

}

사용법
Ex )   
 
m_excel.SetBitmaps( CButtonST::MakeDIBSection( CViewUtil::GetPath( _T("exfin\\img\\excel.bmp")) ), RGB( 255, 0, 255 ) ); 

 

댓글