본문 바로가기

카테고리 없음

[MFC] Picture Control 로 image(BMP) 보여주기, 바꾸기

반응형

차례

가. 이미지 보여주기

나.  버튼 눌러 이미지 바꾸어 보여주기

 

 

가. 이미지 보여주기

1. 이미지 지정

  - 먼저 image1.bmp,  image2.bmp  를 만들어 ~/res 에 가져다 놓는다

  -  Project  - Add - resource - Bitmap - import - 하여 파일 선택 한다.

  - 두번 하고, 보면, ~.rc 에 IDB_BITMAP1, IDB_BITMAP2 가 생긴다.

    이것을 IDB_BITMAP_CarOUT, IDB_BITMAP_CarIN 으로 바꾼다 ( 맘대로 정하셔요)

 

2. 다이얼 로그 에서   Ctrl-Alt-X 해서 나오는 Toolbox 에서 

  - Picture Control  1개 추가,

3.  Picture Control 의 Property 변경

    -  기본 ID가 IDC_STATIC 으로 나오는 데 이를 .IDC_PIC_Car2 로 바꾼다

        ~.rc 에     "CONTROL         130,IDC_PIC_Car2,"Static",SS_BITMAP,183,98,33,17"  와 비슷한 줄 추가됨 확

    -  Type 를  Frame 에서 Bitmap 으로 바꾼다.

    - 그럼 활성화 되는 Image 의 값을 위에서 만든 IDB_BITMAP_CarOUT 으로 설정

4. 컴파일 해서 실행 시키면 나온다.

 

 

나. 이미지 바꾸기  - 먼저 위에거 를 한다음에, 

1. 다이얼 로그 에서   Ctrl-Alt-X 해서 나오는 Toolbox 에서

  -  버튼 1개 추가 하면, properties 에서  ID: IDC_BUTTON1  로 보인다.

  - 이를 더블 클릭 하면 소스가 보인다  , 거기에 아래 내용을 추가 한다.

void CSeralTermDlg::OnBnClickedButton1()     // 버튼을 누를때 마다 들어 온다.
{

static BOOL isState = FALSE;
CStatic * m_pPicture1 = (CStatic *)GetDlgItem(IDC_PIC_Car1);   //  pointer 할당
CBitmap new_image;  // 리소스에 있는 비트맵 이미지를 읽기 위해서 CBitmap 클래스 객체를 선언한다.

 

if( isState == FALSE ) {
       isState = TRUE;
       new_image.LoadBitmap(IDB_BITMAP_CarIN);  // 리소스에서 IDB_BITMAP_CarIN이미지를 읽는다.
} else {
      isState = FALSE;
      new_image.LoadBitmap(IDB_BITMAP_CarOUT);  // 리소스에서 IDB_BITMAP_CarOUT이미지를 읽는다.
}

 

  // Picture 컨트롤에 새로 읽어들인 이미지를 설정하고 이전에 사용하던 이미지 핸들을
  // p_old_ bitmap 변수에 저장한다.
  HBITMAP h_old_bitmap = m_pPicture1->SetBitmap(new_image);
 
  // Picture 컨트롤이 이전에 사용하던 이미지가 있었다면 제거한다.
  if(h_old_bitmap != NULL) ::DeleteObject(h_old_bitmap);
 
  // Picture 컨트롤에 이미지를 설정하기 위해서 생성했던 이미지는 Picture 컨트롤이
 //사용하기 때문에 lamp_image 객체가 종료되면서 삭제되지 않도록 연결을 해제한다.
 // 이 코드를 사용하지 않아도 되는 것처럼 보이지만 해당 Picture 컨트롤이 가려졌다가
 // 다시 보이게 되는 경우 그림이 그려지지 않는다. 따라서 꼭 사용해야 합니다. 
  new_image.Detach();
}

 

2. 실행 시키면 버튼 누를 때 마다.. 바뀐다.

 

 

 

 

 

 

 

 

반응형