:: 세상의 중심 ::

1. Resource 편집기로 Dialog에 PictureBox를 하나 추가
  - 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);
Posted by bsh