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);