谁能帮我分析一下,我想画梯形怎么却画出来个斜边矩形?

Developerljm 2011-08-31 04:22:16
下面是代码,放一个按钮就能运行出结果,等。。。

CDC * pDC = GetDC();

POINT pt[9] = {{17,36},{0,70},{149,70},{132,36},{17,36}};
CRgn rgn;
rgn.CreatePolygonRgn( pt, 5, ALTERNATE );


CDC dcMem;
CBitmap Bitmap;
dcMem.CreateCompatibleDC(pDC);
Bitmap.CreateCompatibleBitmap(pDC,59,23);
CBitmap * pOldBmp=dcMem.SelectObject(&Bitmap);
int r1=128,g1=200,b1=200;
int r2=100, g2=55, b2=165;
DWORD dwSize = rgn.GetRegionData(0, NULL);
BYTE* pData=new BYTE[dwSize];
rgn.GetRegionData((LPRGNDATA)pData,dwSize);
LPRGNDATA d = (LPRGNDATA)pData;
CRect * rect = (CRect*)(d->Buffer);
int nHeight = d->rdh.nCount;
for(int i=0;i<d->rdh.nCount;i++){
int r,g,b;
r = r1 + (i * (r2-r1) / nHeight);
g = g1 + (i * (g2-g1) / nHeight);
b = b1 + (i * (b2-b1) / nHeight);

CRect aRect = rect+i;
CRect sr(0,i,aRect.Width(),i+1);
dcMem.FillSolidRect(sr,RGB(r,g,b));

pDC->BitBlt(aRect.left,aRect.top,aRect.Width(),aRect.Height(),&dcMem,0,i,SRCCOPY);

}
Bitmap.DeleteObject();
dcMem.SelectObject(pOldBmp);
dcMem.DeleteDC();

...全文
272 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
luwenji309 2011-09-07
  • 打赏
  • 举报
回复
POINT pt[9] = {{17,36},{0,70},{149,70},{132,36},{17,36}};
Bitmap.CreateCompatibleBitmap(pDC,59,23);
这一句创建的兼容位图的宽度小于你的客户区rect的宽度,你把59换成一个大于(149-0)的试试。
Developerljm 2011-09-01
  • 打赏
  • 举报
回复
固定原点我也注意到了,怎么调整也都没有变化,有时间你运行一下代码试试
[Quote=引用 3 楼 echoyin59 的回复:]

你注意你的for循环,里面的i是递增的,这四句
CRect aRect = rect+i;
CRect sr(0,i,aRect.Width(),i+1);
dcMem.FillSolidRect(sr,RGB(r,g,b));
pDC->BitBlt(aRect.left,aRect.top,aRect.Width(),aRect.Height(),&dcMem,0,i,SRC……
[/Quote]
诶呦 2011-08-31
  • 打赏
  • 举报
回复
你注意你的for循环,里面的i是递增的,这四句
CRect aRect = rect+i;
CRect sr(0,i,aRect.Width(),i+1);
dcMem.FillSolidRect(sr,RGB(r,g,b));
pDC->BitBlt(aRect.left,aRect.top,aRect.Width(),aRect.Height(),&dcMem,0,i,SRCCOPY);
你画的图形跟着i变化,而你给的原始点是固定的,左边(或者右边)的两个点的横坐标差17
我只是大概看了一下,你单步跟踪一下再看看
Developerljm 2011-08-31
  • 打赏
  • 举报
回复
为什么,帮忙分析一下
[Quote=引用 1 楼 echoyin59 的回复:]

如果你的nCount大于(17-0)的话,画出来就是斜边矩形
[/Quote]
诶呦 2011-08-31
  • 打赏
  • 举报
回复
如果你的nCount大于(17-0)的话,画出来就是斜边矩形

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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