⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crgn.cpp

📁 基于Windml2.0的窗口系统原代码 , 以及和MFC CDC兼容的CDC
💻 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 + -