BitBlt不能变尺寸,但是StrectchBlt可以变尺寸,在使用StrectchBlt时要注意,首先要设置一下SetStretchBltMode,通常设成HALFTONE,这样缩放时就不会失真。
DPtoLP的用处就跟它的名字一样,就是将设备坐标转化成逻辑坐标。

解决方案 »

  1.   

    为什么在使用StrectchBlt前总要来一下DPtoLP?是不是说StrectchBlt功能更强大,完全可以代替BitBlt?
      

  2.   

    i think that just like textout and drawtext
      

  3.   

    StretchBlt看起来似乎功能“强大”,但是它绘制的很慢。用BitBlt要比StretchBlt快。当然,如果绘制的大小不一样,你只能用StretchBlt。
    DPtoLP是将设备坐标转换为逻辑坐标。如果你用的是MM_TEXT映射模式,又没有改变原点,那么不需要用这个函数,因为此时逻辑坐标就是设备坐标。现在假如你改变了映射模式,然后用GetWindowRect得到了一块矩形坐标,你又试图用StrectchBlt往其中绘制位图,这时就有问题了:因为GetWindowRect返回的坐标是设备坐标,而StretchBlt使用的却是逻辑坐标,直接用得到的矩形坐标绘图,肯定出问题。这时就需要用DPtoLP将GetWindowRect得到的RECT坐标转换为逻辑坐标,然后才能作为参数调用StretchBlt。一般来说,USER函数用的都是设备坐标,而GDI函数都是用逻辑坐标。