我的思路是
1.用路径在上面画曲线
2.把路径转换为区域
3.把区域和矩形区域相交
4.填充相交区域
大家看一下这段代码:但有两个问题:
由路径转换为区域时它把首两个点相连,我只想要所画的曲线.大家对这段代码能否改进一下吗或者说一下更好的方法,本人将不胜感激.CPoint * DrawPoints=new CPoint[20];DrawPoints[0].x=527;
DrawPoints[0].y=203;DrawPoints[1].x=517;
DrawPoints[1].y=213;DrawPoints[2].x=511;
DrawPoints[2].y=223;DrawPoints[3].x=506;
DrawPoints[3].y=233;DrawPoints[4].x=503;
DrawPoints[4].y=243;DrawPoints[5].x=557;
DrawPoints[5].y=253;DrawPoints[6].x=504;
DrawPoints[6].y=262;DrawPoints[7].x=506;
DrawPoints[7].y=282;DrawPoints[8].x=509;
DrawPoints[8].y=292;DrawPoints[9].x=512;
DrawPoints[9].y=302;
 
DrawPoints[10].x=511;
DrawPoints[10].y=312;DrawPoints[11].x=504;
DrawPoints[11].y=321;DrawPoints[12].x=506;
DrawPoints[12].y=331;
  
DrawPoints[13].x=513;
DrawPoints[13].y=341;DrawPoints[14].x=520;
DrawPoints[14].y=351;DrawPoints[15].x=526;
DrawPoints[15].y=361;
  
DrawPoints[16].x=529;
DrawPoints[16].y=371;
  
DrawPoints[17].x=524;
DrawPoints[17].y=380;DrawPoints[18].x=514;
DrawPoints[18].y=390;DrawPoints[19].x=493;
DrawPoints[19].y=410;CRect rect(500,210,550,400);
pDC->FillSolidRect(rect,RGB(255,0,0));pDC->Polyline(DrawPoints,20);
pDC->BeginPath();
pDC->MoveTo(DrawPoints[0].x ,DrawPoints[0].y);
pDC->Polyline(DrawPoints,20);
pDC->EndPath();CRgn rgn;
rgn.CreateFromPath(pDC);
CBrush brush(RGB(0,233,0));
pDC->FillRgn(&rgn,&brush);

解决方案 »

  1.   

    先在别的地方(比如 内存DC )画, 然后把需要的那块矩形区域复制到CVIEW里面去.
      

  2.   

    rgn.CreateRectRgnIndirect(&rect);//rect为需要的那块矩形区域
    dc->SelectClipRgn(&rgn);//选择的剪取区域为CDC绘图的范围.
      

  3.   

    使你想要在上面画的那个矩形区域成为剪取矩形不就可以了吗?windows不会
    在剪取矩形之外绘图的,至于用什么办法消除闪烁和提高效率,搜索一下吧,
    很多的