1. Resource 편집기로 Dialog에 PictureBox를 하나 추가
- ID: IDC_STATIC_FILE
- TYPE: BITMAP
2. Bitmap Image 로딩 예시코드 삽입
(1) LoadGraphicFile() 함수 정의
(2) 로딩해야 할 시점의 코드 ( OnInitDialog )
- ID: IDC_STATIC_FILE
- TYPE: BITMAP
2. Bitmap Image 로딩 예시코드 삽입
(1) LoadGraphicFile() 함수 정의
bool LoadGraphicFile(LPCTSTR szFileName,HBITMAP &hBmp,BITMAP *bmp)
{
HRESULT hr;
HANDLE hFile = CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
// 파일이 없을 경우
if(hFile = INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Graphic File Open Error"));
return false;
}
// 파일사이즈
DWORD dwFileSize = GetFileSize(hFile, NULL);
if(dwFileSize == -1)
{
AfxMessageBox(_T("Graphic File Read Error"));
return false;
}
LPVOID pvData = NULL;
// 파일의 크기만큼 동적할당(alloc memory based on file size)
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
if(hGlobal == NULL)
return false;
pvData = GlobalLock(hGlobal);
if(pvData == NULL)
return false;
DWORD dwBytesRead = 0;
// 파일을 읽고 할당된 전역공간에 저장(read file and store in global memory)
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
if(FALSE == bRead)
return false;
GlobalUnlock(hGlobal);
CloseHandle(hFile);
LPSTREAM pstm = NULL;
// create IStream* from global memory
hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
if(S_OK != hr || pstm == NULL)
return false;
// Create IPicture from image file
LPPICTURE pPicture;
hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&pPicture);
if(S_OK != hr || pPicture == NULL)
{
AfxMessageBox(_T("Graphic File Load Error"));
return false;
}
pstm->Release();
GlobalFree(hGlobal);
OLE_HANDLE picHandle;
pPicture->get_Handle(&picHandle);
hBmp=(HBITMAP)picHandle;
if(NULL!=bmp)
GetObject(hBmp,sizeof(BITMAP),bmp);
return true;
}(2) 로딩해야 할 시점의 코드 ( OnInitDialog )
HBITMAP h;
LoadGraphicFile(_T("test.jpg"), h, &bitmap);
// 화면의 픽처 컨트롤을 임시로 CStatic 컨트롤로 받아들인다.
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_FILE);
// 이미지 핸들과 스태틱 컨트롤이 제대로 값을 가지고 있다면
if(h && pStatic)
// 컨트롤에 비트맵을 연결시킨다.
pStatic->SetBitmap((HBITMAP)h);