16,466
社区成员
发帖
与我相关
我的任务
分享
CRgn::CreateRectRgnIndirect
BOOL CreateRectRgnIndirect( LPCRECT lpRect );
返回值:如果操作成功则返回非零值;否则返回0。
参数: lpRect 指向一个RECT结构或CRect对象,该结构或对象包含了区域的左上角和右下角的逻辑坐标。
RECT结构具有下面的格式:
typedef struct tagRECT
{
int left;
int top;
int right;
int bottom;
} RECT;
说明:
此成员函数用来创建一个矩形区域,该区域被保存在CRgn对象中。
区域的大小被限制在32767×32767个逻辑单位和64K内存这两个值中较小的那个值的范围内。
当使用完了由CreateRectRgnIndirect函数创建的区域时,应用程序应该将此区域选择出设备环境外,并用CGDIObject::DeleteObject成员函数来删除它。
请参阅:
CRgn::CreateRectRgn, CRgn::CreateRoundRectRgn, ::CreateRectRgnIndirect
void MyRectangle(CDC *pDC,int x1,int y1,int x3,int y3,float th)
{
// th表示倾斜角
// 直线方程:y=kx+b;
float PI=3.1415926;
float k1,k2,k3,k4;
float b1,b2,b3,b4;
int x2,y2,x4,y4;
if((asb(th-PI/2)<0.0015926)||asb(th)<0.0015926)
pDC->rectangle(x1,y1,x3,y3);
else
{
k1=k3=tan(th);
k2=k4=1/k1;
if(x1==0) b1=b2=y1;
else
{
b1=y1/(x1*k1);
b2=y1/(x1*k2);
}
if(x3==0) b3=b4=y3;
else
{
b3=y3/(x3*k3);
b4=y3/(x3*k4);
}
x2=(int)((b2-b3)/k3-k2))
y2=(int)(k2*x2+b2);
x4=(int)((b1-b4)/(k4-k1));
y4=(int)(k4*x4+b4);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x3,y3);
pDC->LineTo(x4,y4);
pDC->LineTo(x1,y1);
}
}