📄 crgn.cpp
字号:
////////////////////////////////////////////////////////////////////////
//
// 作者:
// 创建日期:
// 最后修改日期:
// 说明:本类是为兼容MFC中CRgn类而设计,仅仅提供非常简单的功能
//
////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "crgn.h"
//##ModelId=3FC7048000DB
CRgn::CRgn ()
{
m_uglRegionId = uglRegionCreate();
uglRegionEmpty(m_uglRegionId);
}
CRgn::CRgn(UGL_REGION_ID uglRegionId)
{
m_uglRegionId = uglRegionId;
}
//##ModelId=3FC7048000DC
CRgn::~CRgn ()
{
DeleteObject();
}
void CRgn::SetRegionId(UGL_REGION_ID uglRegionId)
{
m_uglRegionId = uglRegionId;
}
//##ModelId=3FC7048000DE
bool CRgn::CreateRectRgn( int x1, int y1, int x2, int y2 )
{
UGL_RECT rect = { x1 , y1 , x2 , y2 } ;
uglRegionRectInclude( m_uglRegionId , &rect);
if(uglRegionIsEmpty(m_uglRegionId) == true)
assert(false);
return(true);
}
//##ModelId=3FC7048000E7
bool CRgn::CreateRectRgnIndirect( LPCRECT lpRect )
{
CreateRectRgn( lpRect->left, lpRect->top , lpRect->right , lpRect->bottom);
return true;
}
//##ModelId=3FC7048000EF
bool CRgn::CreateRectRgnIndirect( CRect *lpRect )
{
CreateRectRgn( lpRect->left,lpRect->top , lpRect->right ,lpRect->bottom);
return true;
}
/*
//##ModelId=3FC7048000F1
bool CRgn::CreatePolygonRgn( CPoint *lpPoints, int nCount, int nMode )
{
m_nMode = nMode;
m_style = POLYGON_CRGN;
m_PointList.clear();
int i;
for(i = 0;i < nCount;i++)
{
POINT pt;
pt.x = lpPoints[i].x;
pt.y = lpPoints[i].y;
m_PointList.push_back(pt);
}
return(true);
}
//##ModelId=3FC7048000FA
bool CRgn::CreatePolygonRgn( POINT *lpPoints, int nCount, int nMode )
{
m_nMode = nMode;
m_style = POLYGON_CRGN;
m_PointList.clear();
int i;
for(i = 0;i < nCount;i++)
{
POINT pt;
pt.x = lpPoints[i].x;
pt.y = lpPoints[i].y;
m_PointList.push_back(pt);
}
return(true);
}
//##ModelId=3FC704800104
bool CRgn::CreateEllipticRgn( int x1, int y1, int x2, int y2 )
{
m_style = ELLIPSE_CRGN;
m_PointList.clear();
POINT pt;
pt.x = x1;
pt.y = y1;
m_PointList.push_back(pt);
pt.x = x2;
pt.y = y2;
m_PointList.push_back(pt);
return(true);
}
*/
//##ModelId=3FC704800121
const CRgn & CRgn::operator=(const CRgn &rgn)
{
m_uglRegionId = rgn.m_uglRegionId;
return *this;
}
//##ModelId=3FC704800119
bool CRgn::DeleteObject()
{
if(m_uglRegionId != NULL){
if(uglRegionDestroy(m_uglRegionId) != UGL_STATUS_OK)
return false;
m_uglRegionId = UGL_NULL;
}
return true;
}
//##ModelId=3FC70480011A
void CRgn::Copy(CRgn *rgn)
{
uglRegionCopy( rgn->m_uglRegionId , m_uglRegionId );
}
//##ModelId=3FC70480010F
int CRgn::CombineRgn( CRgn* pRgn1, CRgn* pRgn2, int nCombineMode )
{
if(nCombineMode == RGN_AND){
uglRegionIntersect(pRgn1->m_uglRegionId , pRgn2->m_uglRegionId , m_uglRegionId);
}else if(nCombineMode == RGN_COPY){
if(uglRegionCopy( pRgn1->m_uglRegionId , m_uglRegionId ) != UGL_STATUS_OK)
printf("out of memory!\n");
}else if(nCombineMode == RGN_DIFF){
//uglRegionRegionExclude(pRgn1->m_uglRegionId , pRgn2->m_uglRegionId);
assert(false);
}else if(nCombineMode == RGN_OR){
uglRegionUnion(pRgn1->m_uglRegionId , pRgn2->m_uglRegionId , m_uglRegionId);
}else if(nCombineMode == RGN_XOR){
UGL_REGION_ID andRegionId = uglRegionCreate();
UGL_REGION_ID orRegionId = uglRegionCreate();
uglRegionIntersect(pRgn1->m_uglRegionId , pRgn2->m_uglRegionId , andRegionId);
uglRegionUnion(pRgn1->m_uglRegionId , pRgn2->m_uglRegionId , orRegionId);
//uglRegionRegionExclude(andRegionId , orRegionId );
assert(false);
uglRegionCopy( andRegionId , m_uglRegionId );
uglRegionDestroy(andRegionId);
uglRegionDestroy(orRegionId);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -