[C++] How to use GDIPlus Library in 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 |
댓글
이 글 공유하기
다른 글
-
[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