52 lines
973 B
C++
52 lines
973 B
C++
#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
|