2008년 08월 31일
GIF-animation 구현하기

프로세스가 어떠한 동작을 할 때 예를 들어 파일을 불러 온다던가 아니면 소켓 통신으로 데이터를 전송 중 이라던가 하면 사용자에현재 프로세스가 동작 중인 것을 알려줘야 할 경우가 있습니다. 만약 아무런 메시지를 주지 않는다면 사용자는 프로세스가 죽었다고 생각 할 것입니다. 제가 듣기로 UI 프로그램을 개발 할 때 응답이 3초인가? 오지 않으면 사용자들은 가차없이(?) 프로그램을 꺼버린다고 합니다. 하긴 개발자인 저도 프로그램을 사용하다가 잠깐이라도 응답이 오지 않으면 "이거 왜 이래?" 하고 일반 사용자분들께서는 오죽 하겠어요 ㅎㅎ 그래서 이번에는 현재 프로세스가 동작 중임을 알릴 때 사용할 수 있는 GIF-animation을 구현해 보도록 하겠습니다. 우선 gif 파일을 로드하고 동작하도록 하는 부분은 "CodeProject: Add GIF-animation to your MFC and ATLprojects with the help of CPictureEx and CPictureExWnd" 에서 소스를 구했고 이 소스를 사용했습니다. 러시아의 웹 개발자 Oleg Bykov씨가 만들어 주신 소스입니다. ( Oleg Bykov씨 감사해요 ^^)


1. 우선, 자신이 사용하고자 하는 gif 파일을 구합니다. 저는 아래 그림의 gif 파일을 사용했습니다 ~

2. 위 gif파일을 커스텀 리소스로 등록해 보겠습니다. 우선 리소스탭에서 Add Resource .. -> Import ... 를 선택합니다. 이때 주의하실 부분이 있는데요 ~ gif파일을 그대로 아래와 같은 에러 메시지 박스가 뜹니다. 그래서 gif파일의 확장명을 txt로 변경하고 이를 불러들여서 사용했습니다. (혹시 gif확장명 그대로 커스텀 리소스를 등록하는 방법 아시는 분은 좀 알려주세요 ㅡㅜ)

3. 리소스 타입 명을 "GIF"라고 명명해 봤습니다. 커스텀 리소스의 타입명의 경우 자신이 원하는 이름으로 명명해 주시면 됩니다.

4. 그럼, 아래와 같이 리소스가 16진수 바이너리 코드로 등록됩니다.

5. 그럼 이제 리소스 편집기에서 다이얼로그에 "Picture Control"을 올리고 ID를 IDC_MYPICTURE라고 지어줍니다. (ID 역시 원하시는 이름이르 지어주시면 됩니다.)

6. 그리고 Picture control에 변수를 정해줍니다. 여기서 CodeProject의 설명은 Variable type을 CStatic으로 하고 나중에 헤더 파일에서 CStatic을 자신이 만든 CPictureEx로 바꿔주라고 해서 저도 그렇게 했는데요 ~ 에초에 Variable type에서 CPictureEx로 정해줘도 별 문제없이 잘 동작합니다. ㅎㅎ

7. 아래와 같이 OnInitDialog()에 코딩 해 주시면 아래 그림 처럼 잘 동작하네요 ^^

//if(m_Picture.Load(_T("data\\ajax-loader.gif")))   // 파일에서 로드하는 방법입니다 ~
 if(m_Picture.Load(MAKEINTRESOURCE(IDR_GIF1), _T("GIF"))) // 등록 된 리소스에서 로드하는 방법입니다 ~
 {
      m_Picture.Draw();
 }



※ 위 글에 대한 잘못된 부분이나 궁금하신 부분에 대한 피드백은 언제나 환영입니다 ~ 물론, 퍼가신다면 영광이구요. 우리나라의 모든 개발자 분들께서 바쁘시지만 서로 자신의 귀중한 경험과 지식을 공유해서 함께 발전해 나갈 수 있었으면 합니다 ^^

프로젝트 : GifAnimate.zip
by greenfrog | 2008/08/31 20:45 | C++ / WIN32 / MFC | 트랙백 | 덧글(3)
트랙백 주소 : http://greenfrog7.egloos.com/tb/771728
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 비니 at 2009/07/24 15:27
잘 봤습니다. 그런데 저 상태에서 하얀 배경만을 지우기 위한다면..
어떤 멤버함수를 써야 할지..
코드그루 페이지 가면은 까만 고양이가 고민하는 표정으로 왓다리 갓다리 하는데요.
그 고양이의 배경을 어떻게 처리하였는지 너무 궁금하네요.. ;;
Commented by 반디 at 2010/05/11 16:30
제가 해본 경험으로는 gif 파일이 투명배경인 경우엔 배경색이 나오지 않아요
Commented by 백삼번 at 2011/06/07 10:25
감사합니다^^

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>