脑子卡壳做不出来了,设计一个这样的函数
lpDestRect目标区域
lpSrcRect来源区域
lpDestPoint复制的起点坐标如果复制的区域在目标区域外则跳过
DestW:=lpDestRect.Right - lpDestRect.Left;
DestH:=lpDestRect.Bottom - lpDestRect.Top;
if (lpDestPoint.X  + SrcW < lpDestRect.Left) or (lpDestPoint.Y  + SrcH < lpDestRect.Top) or
   (lpDestPoint.X         > lpDestRect.Right)or (lpDestPoint.Y         > lpDestRect.Right) then exit;但如果只是部分在目标区域则要剪切来源区域防止越界复制导致失败
算法该怎么写,请指教

解决方案 »

  1.   

    bitblt实现
    自己判断一下lpDestRect的2个点(左上,右下)是否在lpSrcRect里面,可以用ptinrect这个api
    不在,就设置为其极限,或者一个点一个点比较都可以.
      

  2.   

    假设目标区域的位置是Rect(10,10,810,610)
    现在将来源区域中Rect(50,50,100,100)复制到目标区域起点的Point(800,600)(不进行缩放)
    这样只有10*10个像素是需要显示的,也就是将来源区域转换成Rect(50,50,60,60)
    当然也可能目标区域起点是的Point(-30,-30)
    起点信息能去掉?另外我用的是DX中的函数
    目标.Bitfast(目标X,目标Y,来源,来源区域,参数)
    这样的形式
    只要目标X,目标Y超出区域或来源宽/长超出区域都不能复制成功,因此要剪切
      

  3.   

    楼主,你好。
    请问你画框是怎么画的?用LineDDA吗?
    我在Image的后面放了一个ScrollBox之后,用LineDDA画出的线看不到了,该怎样解决?谢谢!
      

  4.   

    我是用DirectDraw,不是Image,2个概念