이 영역을 누르면 첫 페이지로 이동
웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

페이지 맨 위로 올라가기

웬디의 기묘한 이야기

C/C++ Windows Hooking 개발자의 블로그 입니다! 이곳은 개발 외에도 저의 취미들이 공유되는 기묘한 이야기가 펼쳐집니다.

[C++] How to use GDIPlus Library in c++

  • 2019.07.28 16:35
  • ⌨ DEVELOPMENT/C++
반응형

C++, MFC에서 GDI+ 사용법

윈도우 프로그램을 개발하다 보면 UI 작업이 필요한 경우가 많이 있습니다. 이때 주로 gdiplus.dll library를 사용하게 되는데, 코드를 가져와서 동작시키려는데 특별히 문제가 없는데 에러가 발생하는 상황이 있습니다.

바로 gdiplus를 초기화하지 않았을 때 입니다. gdiplus library를 사용하기 위해선 꼭 초기화 처리를 해주어야 합니다.

 

#include <gdiplus.h>
#pragma comment(lib, "gdiplus")

GDI+를 사용하기위해선 위와 같은 선언만 하게 되면 됩니다.

#pragma comment(lib, "xxx") 를 통하여 프로젝트 속성에서 lib를 추가하지 않고 코드상으로 lib 파일을 추가할 수 있습니다.

 

GdiplusStartup

ULONG_PTR gdiplus_token;
GdiplusStartupInput gdiplus_startup_input;

if (Gdiplus::Status::Ok != ::GdiplusStartup(&gdiplus_token, &gdiplus_startup_input, NULL)) {
    
    //
    // error.
    //
    
    // ...
}

만약 위의 GdiplusStartup에서 에러가 발생하게되면 Gdiplus::Status::OK 외에 다른 값이 return 될 것이고 GDI+ API가 정상으로 동작하지 못하게 되기 때문에 그에 따른 에러 처리가 필요합니다.

 

GdiplusShutdown

GdiplusShutdown(gdiplus_token);

모든 작업이 완료된 후에는 GdiplusShutdown을 호출해서 GDI+를 정리해야 합니다.

 

Sample

#include <gdiplus.h>
#pragma comment(lib, "gdiplus")

void test() {

    do {

        //
        // initialize GDI+
        //

        ULONG_PTR gdiplus_token;
        GdiplusStartupInput gdiplus_startup_input;
        if (Gdiplus::Status::Ok != ::GdiplusStartup(&gdiplus_token, &gdiplus_startup_input, NULL)) {

            //
            // error.
            //

            break;
        }

        //
        // load image.
        //

        // Gdiplus::Image* image = Gdiplus::Image::FromFile(L"image.jpg");
        Gdiplus::Image* image = new Gdiplus::Image(L"image.jpg");


        //
        // verify.
        //

        if (nullptr == image) {
            // ...
        }
        else {

            if (Gdiplus::Ok != image->GetLastStatus()) {
                delete image;
                image = nullptr;
            }
        }


        //
        // use image.
        //

        // todo.


        //
        // delete image.
        //

        if (nullptr != image) {
            delete image;
            image = nullptr;
        }


        //
        // Finalize GDI+
        //

        GdiplusShutdown(gdiplus_token);

    } while (false);
    
}

 

GDI+ 사용시 주의사항

  • GdiplusStartup을 호출하기 전에 GDI+ API를 호출하면 안 됩니다.
  • GdiplusShutdown를 호출하기 전에 모든 GDI+ 객체를 해제 해야 합니다.
  • dllmain에서 GDI+ 를 초기화하면 안 됩니다.  (dllmain에서 GdiplusStartup, GdiplusShutdown 호출 금지)

 

 

반응형

'⌨ DEVELOPMENT > C++' 카테고리의 다른 글

[C/C++] Get Process Name by Process Id 3가지 방법  (0) 2019.12.12
[MFC] Dialog based - class name 지정하는 간단한 방법  (3) 2019.09.08
[C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제  (5) 2019.08.07
[MFC] Dialog Load GIF image  (5) 2019.07.28
[MFC] 다이얼로그의 윈도우 소멸자 호출 순서  (1) 2019.07.28
[C/C++] string wstring format 사용하기  (1) 2019.07.27
[C/C++] 윈도우10 Boost 최신버전 설치 및 사용법  (13) 2019.07.27
[C/C++] URL 전달을 위한 urlencode & urldecode  (1) 2019.07.11

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제

    [C++] Boost ASIO를 이용한 안전한 TCP/IP 비동기 소켓 서버 예제

    2019.08.07
  • [MFC] Dialog Load GIF image

    [MFC] Dialog Load GIF image

    2019.07.28
  • [MFC] 다이얼로그의 윈도우 소멸자 호출 순서

    [MFC] 다이얼로그의 윈도우 소멸자 호출 순서

    2019.07.28
  • [C/C++] string wstring format 사용하기

    [C/C++] string wstring format 사용하기

    2019.07.27
다른 글 더 둘러보기

정보

웬디의 기묘한 이야기 블로그의 첫 페이지로 이동

웬디의 기묘한 이야기

  • 웬디의 기묘한 이야기의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 이야기

카테고리

  • 분류 전체보기 (204)
    • MY STORY (2)
    • 📸 WALKING WITH YOU (85)
      • 아이슬란드 신혼여행 이야기 (14)
      • 대한민국 구석구석 (62)
      • CONTAX N1 + T* 28-80mm (4)
      • SAMSUNG NX3000 (1)
      • 어느 멋진 날 (4)
    • ⌨ DEVELOPMENT (80)
      • BOOK:Review (1)
      • AI (13)
      • C++ (26)
      • Python (10)
      • WIndows Hooking (9)
      • Windows Kernel (3)
      • Design Pattern (3)
      • Debugging (9)
      • Tools (0)
      • Project (1)
      • Android (1)
      • 상업용 무료폰트 (4)
    • OS (4)
      • News (0)
      • Windows 일반 (4)
    • 모바일 (2)
      • 모바일 게임 (2)
    • 멘사 퍼즐 (9)
    • 생활 꿀 TIP (7)
      • 건강 (3)
      • 일상 (2)
    • 물생활 (8)
      • 골든볼 라미네지 롱핀 (8)
    • IT 기기 (2)
    • BLOG (4)
      • TISTORY BLOG TIP (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • AI
  • 해외여행
  • c++
  • 카페
  • 신혼여행
  • c
  • 아이슬란드
  • windbg

나의 외부 링크

  • kernel undocument api
  • 지구 관찰자의 일기
  • 지구와 지구곰

정보

WENDYS의 웬디의 기묘한 이야기

웬디의 기묘한 이야기

WENDYS

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © WENDYS. Designed by Fraccino.

티스토리툴바