怎么画倾斜的矩形

yukongjianjzh 2011-06-30 09:25:56
rectangle画出来的矩形都是水平的,我想画一个倾斜的矩形,也就是四条边不是和水平方向垂直或者平行的,而是有一点倾角的,请问有函数吗
...全文
1307 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyudianxiaoxiao 2011-11-24
  • 打赏
  • 举报
回复
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
pDC->LineTo(x3,y3);
pDC->LineTo(x4,y4);
pDC->LineTo(x1,y1);
Eleven 2011-07-01
  • 打赏
  • 举报
回复
计算4个点,然后Polyline()连接起来就行了
chainyu 2011-07-01
  • 打赏
  • 举报
回复
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
向立天 2011-07-01
  • 打赏
  • 举报
回复
不就是CRgn
Mdesigner 2011-07-01
  • 打赏
  • 举报
回复
可以把旋转后的四个点计算出来再绘制
gz_qmc 2011-06-30
  • 打赏
  • 举报
回复 1

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);
}
}
gz_qmc 2011-06-30
  • 打赏
  • 举报
回复
一个矩形四个点 (left,top) (right,top) (right,bottom) (left,bottom)
假设中心点(top,left);隔另外三个点的距r2,r3,r4;

r2=right-left;
r4=bottom-top;
r3=sqrt(r2*r2+r4*r4);

那么另外三个点围绕中心点旋转一个角度n之后得到四个新点
(x1,y1) (x2,y2) (x3,y3) (x4,y4)

根据极坐标方程
x1=left;
y1=top;
x2=left + r2*cos(n);
y2=top + r2*sin(n);
x3=left + r3*cos(n);
y3=top + r3*sin(n);
x4=left + r4*cos(n);
y4=top + r4*sin(n);

四点画线就好了
wltg2001 2011-06-30
  • 打赏
  • 举报
回复
GDI中没有,要不你自己去画,要不用图像类库。
karlson0211 2011-06-30
  • 打赏
  • 举报
回复
画四条线,还有就是就生成图,利用图的旋转,GDI+中好像就是利用图的旋转
qjgdftxmu 2011-06-30
  • 打赏
  • 举报
回复
GDI里是没有这个函数
yukongjianjzh 2011-06-30
  • 打赏
  • 举报
回复
没有函数吗

[Quote=引用 1 楼 haogeai123 的回复:]
画四条直线就可以了
[/Quote]
haogeai123 2011-06-30
  • 打赏
  • 举报
回复
画四条直线就可以了

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧