nim_duilib/duilib/Render/Clip.cpp

52 lines
973 B
C++
Raw Normal View History

2019-04-19 17:19:57 +08:00
#include "StdAfx.h"
namespace ui {
GdiClip::GdiClip()
{
}
GdiClip::~GdiClip()
{
}
void GdiClip::CreateClip(HDC hDC, UiRect rcItem)
{
if (hDC != NULL) {
CPoint ptWinOrg;
GetWindowOrgEx(hDC, &ptWinOrg);
rcItem.Offset(-ptWinOrg.x, -ptWinOrg.y);
HRGN hRgn = ::CreateRectRgnIndirect(&rcItem);
::SaveDC(hDC);
::ExtSelectClipRgn(hDC, hRgn, RGN_AND);
::DeleteObject(hRgn);
}
}
void GdiClip::CreateRoundClip(HDC hDC, UiRect rcItem, int width, int height)
{
if (hDC != NULL) {
CPoint ptWinOrg;
GetWindowOrgEx(hDC, &ptWinOrg);
rcItem.Offset(-ptWinOrg.x, -ptWinOrg.y);
HRGN hRgn = ::CreateRoundRectRgn(rcItem.left, rcItem.top, rcItem.right + 1, rcItem.bottom + 1, width, height);
::SaveDC(hDC);
::ExtSelectClipRgn(hDC, hRgn, RGN_AND);
::DeleteObject(hRgn);
}
}
void GdiClip::ClearClip(HDC hDC)
{
if (hDC != NULL) {
ASSERT(::GetObjectType(hDC) == OBJ_DC || ::GetObjectType(hDC) == OBJ_MEMDC);
::RestoreDC(hDC, -1);
}
}
} // namespace ui