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() 함수 정의
01 | bool LoadGraphicFile( LPCTSTR szFileName, HBITMAP &hBmp,BITMAP *bmp) |
02 | { |
03 | HRESULT hr; |
04 | HANDLE hFile = CreateFile(szFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); |
05 | |
06 | // 파일이 없을 경우 |
07 | if (hFile = INVALID_HANDLE_VALUE) |
08 | { |
09 | AfxMessageBox(_T( "Graphic File Open Error" )); |
10 | return false ; |
11 | } |
12 | |
13 | // 파일사이즈 |
14 | DWORD dwFileSize = GetFileSize(hFile, NULL); |
15 | if (dwFileSize == -1) |
16 | { |
17 | AfxMessageBox(_T( "Graphic File Read Error" )); |
18 | return false ; |
19 | } |
20 | |
21 | LPVOID pvData = NULL; |
22 | |
23 | // 파일의 크기만큼 동적할당(alloc memory based on file size) |
24 | HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); |
25 | |
26 | if (hGlobal == NULL) |
27 | return false ; |
28 | |
29 | pvData = GlobalLock(hGlobal); |
30 | |
31 | if (pvData == NULL) |
32 | return false ; |
33 | |
34 | DWORD dwBytesRead = 0; |
35 | |
36 | // 파일을 읽고 할당된 전역공간에 저장(read file and store in global memory) |
37 | BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL); |
38 | |
39 | if (FALSE == bRead) |
40 | return false ; |
41 | |
42 | GlobalUnlock(hGlobal); |
43 | CloseHandle(hFile); |
44 | |
45 | LPSTREAM pstm = NULL; |
46 | |
47 | // create IStream* from global memory |
48 | hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm); |
49 | |
50 | if (S_OK != hr || pstm == NULL) |
51 | return false ; |
52 | |
53 | // Create IPicture from image file |
54 | LPPICTURE pPicture; |
55 | |
56 | hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, ( LPVOID *)&pPicture); |
57 | |
58 | if (S_OK != hr || pPicture == NULL) |
59 | { |
60 | AfxMessageBox(_T( "Graphic File Load Error" )); |
61 | |
62 | return false ; |
63 | } |
64 | |
65 | pstm->Release(); |
66 | GlobalFree(hGlobal); |
67 | |
68 | OLE_HANDLE picHandle; |
69 |
70 | pPicture->get_Handle(&picHandle); |
71 | |
72 | hBmp=( HBITMAP )picHandle; |
73 | |
74 | if (NULL!=bmp) |
75 | GetObject(hBmp, sizeof (BITMAP),bmp); |
76 | |
77 | return true ; |
78 | } |
(2) 로딩해야 할 시점의 코드 ( OnInitDialog )
01 | HBITMAP h; |
02 |
03 | LoadGraphicFile(_T( "test.jpg" ), h, &bitmap); |
04 |
05 | // 화면의 픽처 컨트롤을 임시로 CStatic 컨트롤로 받아들인다. |
06 | CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_FILE); |
07 |
08 | // 이미지 핸들과 스태틱 컨트롤이 제대로 값을 가지고 있다면 |
09 | if (h && pStatic) |
10 | // 컨트롤에 비트맵을 연결시킨다. |
11 | pStatic->SetBitmap(( HBITMAP )h); |