12 #include "../GrayLibBase.h"
15 #include "../Geometry/cRectI.h"
53 void DeleteObjectLast() noexcept
57 ::DeleteObject(m_hObject);
67 cWndGDI(HBITMAP h) noexcept
68 : m_hObject((HGDIOBJ)h)
77 void Attach(HGDIOBJ hObject) noexcept
79 if (hObject != m_hObject)
85 void Detach() noexcept
89 HGDIOBJ DetachRet() noexcept
91 HGDIOBJ hObject = m_hObject;
96 void DeleteObject() noexcept
100 ::DeleteObject(m_hObject);
105 DWORD GetObjectType() const noexcept
108 return ::GetObjectType(m_hObject);
110 int GetObjectX(
size_t iSizeMax,
void* pData)
const noexcept
116 return _GTN(::GetObject)(m_hObject, (int)iSizeMax, pData);
118 bool GetBitmap(BITMAP* pBitmap)
const noexcept
122 return GetObjectX(
sizeof(BITMAP), (
char*)pBitmap) ==
sizeof(BITMAP) ;
125 HGDIOBJ get_Handle() const noexcept
130 operator HGDIOBJ() const noexcept
134 bool isValidHandle() const noexcept
139 HBRUSH get_HBrush() const noexcept
141 return (HBRUSH)m_hObject;
143 HPEN get_HPen() const noexcept
145 return (HPEN)m_hObject;
147 HRGN get_HRgn() const noexcept
149 return (HRGN)m_hObject;
151 HBITMAP get_HBitmap() const noexcept
153 return (HBITMAP)m_hObject;
155 HFONT get_HFont() const noexcept
157 return (HFONT)m_hObject;
160 HBRUSH CreateSolidBrush(
COLORREF color) noexcept
162 Attach((HGDIOBJ) ::CreateSolidBrush(color));
165 HPEN CreatePen(
int iStyle,
int cWidth,
COLORREF color) noexcept
168 Attach((HGDIOBJ) ::CreatePen(iStyle, cWidth, color));
174 HBITMAP CreateCompatibleBitmap(HDC hDC,
int cx,
int cy)
176 Attach((HGDIOBJ) ::CreateCompatibleBitmap(hDC, cx, cy));
177 return get_HBitmap();
182 template <
class _TYPE_HANDLE = HGDIOBJ>
183 class cWndGDIT :
public cWndGDI
189 typedef cWndGDI SUPER_t;
193 : cWndGDI((HGDIOBJ)h)
196 _TYPE_HANDLE get_Handle()
const
199 return (_TYPE_HANDLE)m_hObject;
201 operator _TYPE_HANDLE()
const
203 return (_TYPE_HANDLE)m_hObject;
212 typedef cWndGDIT<HBRUSH> SUPER_t;
216 : cWndGDIT<HBRUSH>(h)
220 : cWndGDIT<HBRUSH>(::CreateSolidBrush(color))
230 typedef cWndGDIT<HPEN> SUPER_t;
237 cWndPen(
int iStyle,
int cWidth,
COLORREF color)
238 : cWndGDIT<HPEN>(::CreatePen(iStyle, cWidth, color))
249 typedef cWndGDIT<HFONT> SUPER_t;
256 int GetLogFont(
_GTN(LOGFONT)& lf)
const noexcept
260 return GetObjectX(
sizeof(
_GTN(LOGFONT)), &lf);
262 HFONT CreateFontIndirectX(
const _GTN(LOGFONT)* pLogFont) noexcept
265 Attach((HGDIOBJ)
_GTN(::CreateFontIndirect)(pLogFont));
274 typedef cWndGDIT<HRGN> SUPER_t;
280 cWndRgn(
int nLeft,
int nTop,
int nRight,
int nBottom)
281 : cWndGDIT<HRGN>(::CreateRectRgn(nLeft, nTop, nRight, nBottom))
284 cWndRgn(
const RECT& new_rect)
285 : cWndGDIT<HRGN>(::CreateRectRgnIndirect(&new_rect))
293 HRGN CreateRectRgn(
int nLeft,
int nTop,
int nRight,
int nBottom)
295 Attach((HGDIOBJ) ::CreateRectRgn(nLeft, nTop, nRight, nBottom));
298 HRGN CreateRectRgn(
const RECT& new_rect)
300 Attach((HGDIOBJ) ::CreateRectRgnIndirect(&new_rect));
303 bool SetRectRgn(
int nLeft,
int nTop,
int nRight,
int nBottom)
306 return ::SetRectRgn(get_HRgn(), nLeft, nTop, nRight, nBottom);
308 int CombineRgn(HRGN hRgn1, HRGN hRgn2,
int iMode)
313 return ::CombineRgn(get_HRgn(), hRgn1, hRgn2, iMode);
315 bool IsEqualRgn(HRGN hRgn)
const
317 return ::EqualRgn(get_HRgn(), hRgn);
319 int GetRgnBox(RECT* pRectRet)
const
321 return ::GetRgnBox(get_HRgn(), pRectRet);
323 int OffsetRgn(
int x,
int y)
325 return ::OffsetRgn(get_HRgn(), x, y);
327 bool PtInRegion(
int x,
int y)
const
329 return ::PtInRegion(get_HRgn(), x, y);
331 bool RectInRegion(
const RECT* pRect)
const
333 return ::RectInRegion(get_HRgn(), pRect);
336 int AddRect(
const RECT& new_rect);
337 int SubtractRect(
const RECT& new_rect);
339 void Combine(
const cWndRgn &rgn);
340 void Intersect(
const cWndRgn &rgn);
341 void Subtract(
const cWndRgn &rgn);
343 int GetRects(cArrayStruct<RECT>& rects)
const;
344 bool SetRects(
const RECT* pRects,
int nCount);
354 HGDIOBJ m_hGDIObjPrv;
356 cWndGDISelect(HDC hDC, HGDIOBJ hGDIObj)
360 m_hGDIObjPrv = ::SelectObject(hDC, hGDIObj);
364 ::SelectObject(m_hDC, m_hGDIObjPrv);
368 class GRAYLIB_LINK cWndGDICur :
public cWndGDI,
public cWndGDISelect
374 cWndGDICur(HDC hDC, HGDIOBJ hObj)
376 , cWndGDISelect(hDC, hObj)
386 cWndGDIT<HBITMAP> m_hbmMask;
387 cWndGDIT<HBITMAP> m_hbmColor;
390 bool InitIconInfo(HICON hIcon)
395 if (!::GetIconInfo(hIcon,
static_cast<::ICONINFO*
>(
this)))
397 m_hbmMask.Attach(this->hbmMask);
398 m_hbmColor.Attach(this->hbmColor);
401 bool InitCursorInfo(HCURSOR hCursor)
403 return InitIconInfo((HCURSOR)hCursor);
407 typedef cWndGDIT<HCURSOR> cWndCursor;
408 typedef cWndGDIT<HICON> cWndIcon;
411 typedef cWinSize CSize;
412 typedef cWndGDI CGdiObject;
413 typedef cWndFont CFont;
414 typedef cWndRgn CRgn;
415 typedef cWndPen CPen;
416 typedef cWndBrush CBrush;
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define _GTN(c)
_WIN32 name has a A or W for UTF8 or UNICODE (like _FNF)
Definition: StrConst.h:28
#define ASSERT(exp)
Definition: cDebugAssert.h:87
#define WINHANDLE_NULL
HWND, HPEN, etc are NOT OS Handles. like HWND_DESKTOP. like HANDLEPTR_NULL. This is a WINAPI void* ha...
Definition: cOSHandle.h:23
UINT32 COLORREF
ABGR (high to low bits)
Definition: cVariantData.h:21
void CloseHandle()
Definition: cHandlePtr.h:79
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14