MFC에서 Jpg나 png 이미지 로드하고 보여주기

CBitmap 클래스 대신 CImage 클래스 로 교체
CImage 클래스중
Load() : 함수를 이용 클래스 인스턴트에 이미지 로드
Draw() : 함수를 이용 대하상자에 이미지 출력.
Destroy() : 함수를 써서 이전 이미지 언로드 시키고, 두번째 이미지를 로드하기 위한 준비


1. stdafx.h 해더에 마지막 줄에 다음을 추가
#include <atlimage.h>

2. 메인 프로그램 헤더 파일을 열어서
// CBitmap m_bmpBitmap;  주석처리
CImage m_bmpBitmap; 추가


3. 로드를 실행시킬 함수 (OnCreate 나 OnInit 함수등)에 다음 소스를 추가하자
m_bmpBitmap.Destroy();
m_bmpBitmap.Load("BackPic.png");

// 현제 대화상자 다시 그려주는 함수 로드


4. ShowBitmap() 함수 수정
void PaintDlg::ShowBitmap(CPaintDC *pdc)
{
 // 포인터를 메인 대화상자 클래스 포인터로 변경
 CGraphicsDlg *pWnd = (CGraphicsDlg*)GetParent();
// 대략 pWnd는 Dialog의 this 포인터를 위함..
 CDC dcMem;
 CRect rRect;

 // 보여줄 영역을 얻는다
 GetClientRect(rRect);
 rRect.NormalizeRect();

 // 대화상자 윈도우로 비트맵을 복사하면서 크기 조절
 pWnd->m_bmpBitmap.Draw(pdc->m_hDC, rRect);
}

// 무슨 코드인지 궁금하면 Visual C++6.0 21일 완성 책을 참조..

데브피아에선

void CTestDlg::OnPaint()
{
    if (IsIconic()) //여기서는 그려봐야 소용 없습니다.
    {
        CPaintDC dc(this); // device context for painting

        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

        // Center icon in client rectangle
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // Draw the icon
        dc.DrawIcon(x, y, m_hIcon);
    }
    else // 여기서 그리셔야죠.
    {
        CPaintDC dc(this); // device context for painting
        dc.Rectangle(0, 0, 100, 100);  

        CDialog::OnPaint();
    }
}
시도해 보라는..

http://www.devpia.com/Search/MAEULResult.aspx?boardID=50&MAEULNo=20&keyw=Dialog%bf%a1+%b1%d7%b8%b2&keyr=title
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소