:: 세상의 중심 ::

1. Resource 편집기로 Dialog에 PictureBox를 하나 추가
  - ID: IDC_STATIC_FILE
  - TYPE: BITMAP

2. Bitmap Image 로딩 예시코드 삽입  
  (1) LoadGraphicFile() 함수 정의
01bool 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 )
01HBITMAP h;
02 
03LoadGraphicFile(_T("test.jpg"), h, &bitmap);
04 
05// 화면의 픽처 컨트롤을 임시로 CStatic 컨트롤로 받아들인다.
06CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC_FILE);
07 
08// 이미지 핸들과 스태틱 컨트롤이 제대로 값을 가지고 있다면
09if(h && pStatic)
10    // 컨트롤에 비트맵을 연결시킨다.
11    pStatic->SetBitmap((HBITMAP)h);
Posted by bsh