|
1
|
1 #pragma once
|
|
|
2 #include <GdiPlus.h>
|
|
|
3 #include <functional>
|
|
|
4 #include <memory>
|
|
|
5
|
|
|
6 #include "win32_op.h"
|
|
|
7 #include "win32_utility.h"
|
|
|
8
|
|
|
9 class GdiplusErrorHandler {
|
|
|
10 public:
|
|
|
11 static void Handle(Gdiplus::Status code);
|
|
|
12 void operator<<(Gdiplus::Status p_code) {Handle(p_code);}
|
|
|
13 };
|
|
|
14
|
|
|
15 class GdiplusScope {
|
|
|
16 public:
|
|
|
17 GdiplusScope() {
|
|
|
18 Gdiplus::GdiplusStartupInput input;
|
|
|
19 Gdiplus::GdiplusStartupOutput output;
|
|
|
20 GdiplusErrorHandler() << Gdiplus::GdiplusStartup(&m_token,&input,&output);
|
|
|
21 }
|
|
|
22 ~GdiplusScope() {
|
|
|
23 Gdiplus::GdiplusShutdown(m_token);
|
|
|
24 }
|
|
|
25 static void Once();
|
|
|
26 private:
|
|
|
27 GdiplusScope( const GdiplusScope & ) = delete;
|
|
|
28 void operator=( const GdiplusScope & ) = delete;
|
|
|
29
|
|
|
30 ULONG_PTR m_token = 0;
|
|
|
31 };
|
|
|
32
|
|
|
33 typedef std::function<void(Gdiplus::Bitmap*) > GdiplusBitmapTransform_t;
|
|
|
34
|
|
|
35 struct GdiplusIconArg_t {
|
|
|
36 CSize size = CSize(0,0);
|
|
|
37 GdiplusBitmapTransform_t transform = nullptr;
|
|
|
38 };
|
|
|
39
|
|
|
40 HBITMAP GdiplusLoadBitmap(UINT id, const TCHAR* resType, CSize size);
|
|
|
41 std::unique_ptr<Gdiplus::Image> GdiplusImageFromMem(const void* ptr, size_t bytes);
|
|
|
42 std::unique_ptr<Gdiplus::Bitmap> GdiplusResizeImage(Gdiplus::Image* source, CSize size, Gdiplus::PixelFormat pf = PixelFormat32bppARGB);
|
|
|
43 HICON GdiplusLoadIconFromMem(const void* ptr, size_t bytes, CSize size);
|
|
|
44 HICON GdiplusLoadIcon(UINT id, const TCHAR* resType, CSize size);
|
|
|
45 HICON GdiplusLoadIconEx(UINT id, const TCHAR* resType, GdiplusIconArg_t const & arg);
|
|
|
46 HICON GdiplusLoadPNGIcon(UINT id, CSize size);
|
|
|
47 HICON LoadPNGIcon(UINT id, CSize size);
|
|
|
48
|
|
|
49 void GdiplusLoadButtonPNG(CIcon& icon, HWND btn_, UINT image, GdiplusBitmapTransform_t transform = nullptr);
|
|
|
50 std::unique_ptr<Gdiplus::Bitmap> GdiplusLoadResource(UINT id, const TCHAR* resType);
|
|
|
51 std::unique_ptr<Gdiplus::Bitmap> GdiplusLoadResourceAsSize(UINT id, const TCHAR* resType, CSize size);
|
|
|
52 void GdiplusDimImage(Gdiplus::Bitmap* bmp);
|
|
|
53 void GdiplusInvertImage(Gdiplus::Bitmap* bmp);
|