GDI转换到GDI+之后的困惑?

jxb_memory 2011-10-21 03:08:55
需求:在OnPaint中绘制一个多边形,先绘制多边形的边框和背景色,然后再绘制多边形的填充色,在GDI中没有任何问题。可是在我将代码修改为GDI+的方式后居然发现边框或背景色会覆盖填充色,真是百思不得其解,盼望高人指点迷津啊!
下面是修改为GDI+之后的部分代码:
if (!IsContourClosed() || IsTransparent())
{
graphics.DrawLines(&pen, lpUnRotPts, m_nRotNumPts);
}
else
{
SolidBrush* pSolidBrush = NULL;
HatchBrush* pHatchBrush = NULL;
if (dwHatchStyle != 99)
{
#if _WIN32_WCE
pSolidBrush = new SolidBrush(crNewBkgnd);
#else
pHatchBrush = new HatchBrush((HatchStyle)dwHatchStyle, crNewFrgnd, crNewBkgnd);
#endif
}
else
{
pSolidBrush = new SolidBrush(crNewBkgnd);
}

if (pSolidBrush)
{
//graphics.FillPolygon(pSolidBrush, lpUnRotPts, m_nRotNumPts);//此处填充背景
delete pSolidBrush;
}
else
{
graphics.FillPolygon(pHatchBrush, lpUnRotPts, m_nRotNumPts);
delete pHatchBrush;
}
graphics.DrawPolygon(&pen, lpUnRotPts, m_nRotNumPts);//此处绘制边框
}

delete lpUnRotPts;

DrawFill(pDC,2);//此处绘制填充色
//为什么此处的填充色会被边框或背景覆盖???
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxb_memory 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fandh 的回复:]
加一个作用域的大括号,这样做:

{
Graphics graphics(pDC->m_hDC);
.......//GDI+绘图
}
DrawFill(pDC,2);//

这样试试!
[/Quote]
高人啊,看来你还是想起来怎么回事了,能否解释一下为什么?执行过程应该是顺序的啊为什么会涉及到作用域?这个大括号到底起了什么作用?使用GDI的时候为什么没有这个问题?
libing64 2011-10-21
  • 打赏
  • 举报
回复
可能是你配置的有问题吧~~
用户 昵称 2011-10-21
  • 打赏
  • 举报
回复
虚化了
fandh 2011-10-21
  • 打赏
  • 举报
回复
加一个作用域的大括号,这样做:

{
Graphics graphics(pDC->m_hDC);
.......//GDI+绘图
}
DrawFill(pDC,2);//

这样试试!

fandh 2011-10-21
  • 打赏
  • 举报
回复
DrawFill(pDC,2);//此处绘制填充色
这个是用的GDI+还是GDI?
zjfhgdx 2011-10-21
  • 打赏
  • 举报
回复
我也最近刚开始学GDI+,哈哈.顶你一下
jxb_memory 2011-10-21
  • 打赏
  • 举报
回复
呵呵,没事不管怎样有回答的了,谢了。
fandh 2011-10-21
  • 打赏
  • 举报
回复
好像以前听说过这类问题,但是,如何解决没有印象了!

19,468

社区成员

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

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