2009년 11월 7일 토요일

Visual C++에서 윈도우 내장 이미지 뷰어 사용하는 방법

메르카토르 지도에 최단경로를 그리는 프로그램을 개발 중 이미지 파일(PNG)을 화면에 간단히 출력하는 기능을 넣기로 했다.

처음엔 그냥 ShellExecute() 함수에서 이미지 파일을 직접 실행시켰는데, PC마다 일관성이 없어 보기 좋지 않았다.
그래서 윈도우 XP에 내장된 이미지 뷰어를 이용해서 이미지 파일을 출력하기로 방향을 수정.

Visual C++에서 이런 식으로 윈도우에 내장된 이미지 뷰어를 사용하려면 아래와 같은 짤막한 코드면 충분하다.


csPNG에 이미지 파일의 full path가 들어있다고 가정함.

CString csParam;
csParam.Format(_T("shimgvw.dll, ImageView_Fullscreen %s"), csPNG);
ShellExecute(NULL, _T("open"), _T("rundll32.exe"), csParam, NULL, SW_SHOW);


댓글 6개:

  1. 나중에 써봐야겠네요

    1. 그런데 이거는 winXP 전용인가요?

    2. 레지스트리로 변경되어도 무조건 내장 뷰어로 띄우는건가요?

    답글삭제
  2. @구차니 - 2009/11/09 13:47
    원체 (W2k를 포함한) XP 이전의 OS는 아오안이라서요...

    그리고, 무조건 내장 뷰어로 띄웁니다. ^^;

    답글삭제
  3. 원래 ShellExecute() 함수는 잘 쓰는 함수입니다.

    그냥 exe 파일을 실행할때 쓸 수 있고 게다가 여러가지 파라미터를 추가할 수 있죠~

    당근 왠만한 OS는 기본지원입니다.

    아마도 windows 95 이상부터 실행 가능 할겁니다... ^^

    답글삭제
  4. @oneniner - 2009/11/11 16:08
    헉... 웬 이런 생뚱맞은 답을...



    원래는 ShellExecute(NULL, _T("open"), _T("이미지 파일명"....); 이렇게 했다가

    다시 ShellExecute(NULL, _T("open"), _T("rundll32.exe"), parameter....); 으로 바꿨단 얘기인데...

    답글삭제
  5. @BLUEnLIVE - 2009/11/12 09:59
    내가 잘못 얘기한겐가~ ㅋㅋ 나는 ShellExecute() 함수는 어떤 OS에서도 되는거였구 마찬가지로 DLL 을 콜할 때 자네처럼 하면 어떤 OS 에서두 콜이 잘 된다구 얘기할려던 건디... ㅠ.ㅠ

    답글삭제
  6. @oneniner - 2009/11/11 16:08
    이 글의 핵심은 'shimgvw.dll'...

    ShellExecute는 거들 뿐...

    답글삭제