コード例 #1
0
        //protected override Size MeasureOverride(Size availableSize)
        //{
        //    bool bNeedUpdate = false;
        //    if (m_bufferedBmp != null && m_ptOffset.X + (int)ActualWidth > ExtentWidth)
        //    {
        //        bNeedUpdate = true;
        //        m_ptOffset.X = ExtentWidth - (int)ActualWidth;
        //        if (m_ptOffset.X < 0)
        //            m_ptOffset.X = 0;

        //    }
        //    if (bNeedUpdate)
        //    {
        //        paintArea(new GDI.Rectangle(0, 0, m_bufferedBmp.PixelWidth, m_bufferedBmp.PixelHeight));
        //        Invalidate();
        //    }
        //    return base.MeasureOverride(availableSize);
        //}

        internal void SetHorizontalOffset(double offset)
        {
            offset = (int)offset;


            // 这里产生了水平滚动,识别哪些数据可以使用就只需copy一下就可以了
            int OffsetX = (int)Math.Abs(m_ptOffset.X - offset);

            if (OffsetX < ActualWidth - 20) // 说明是可以使用部分数据的, -20是如果只有20象素宽可用的话,那也没意义了,直接刷新效率更好
            {
                if (m_ptOffset.X < offset)
                {
                    GB_GridView.Bitblt(m_bufferedBmp, new GDI.Rectangle(OffsetX, 0, (int)ActualWidth - OffsetX, (int)ActualHeight),
                                       new GDI.Rectangle(0, 0, (int)ActualWidth - OffsetX, (int)ActualHeight));

                    m_ptOffset.X = offset;

                    paintArea(new GDI.Rectangle((int)ActualWidth - OffsetX, 0, OffsetX, (int)ActualHeight));
                }
                else
                {
                    GB_GridView.Bitblt(m_bufferedBmp, new GDI.Rectangle(0, 0, (int)m_bufferedBmp.PixelWidth - OffsetX, (int)m_bufferedBmp.PixelHeight),
                                       new GDI.Rectangle(OffsetX, 0, (int)m_bufferedBmp.PixelWidth - OffsetX, (int)m_bufferedBmp.PixelHeight));
                    m_ptOffset.X = offset;

                    paintArea(new GDI.Rectangle(0, 0, OffsetX, (int)m_bufferedBmp.PixelHeight));
                }
            }
            else
            {
                m_ptOffset.X = offset;
                paintArea(new GDI.Rectangle(0, 0, (int)m_bufferedBmp.PixelWidth, (int)m_bufferedBmp.PixelHeight));
            }



            m_bufferedBmp.Lock();
            m_bufferedBmp.AddDirtyRect(new Int32Rect(0, 0, m_bufferedBmp.PixelWidth, m_bufferedBmp.PixelHeight));
            m_bufferedBmp.Unlock();
        }
コード例 #2
0
 public void BitBlt(GDI.Rectangle rectSrc, GDI.Rectangle rectDest)
 {
     GB_GridView.Bitblt(m_bufferedBmp, rectSrc, rectDest);
 }