CF.NET平滑滚动面板 - bitblt即将出现空白

时间:2010-01-09 22:51:09

标签: windows-mobile gdi+ compact-framework

我正在尝试在CF.NET中编写一个面板,允许我在内部滚动内容而不会闪烁。我以为我会尝试使用包含实际内容的另一个面板的WrapperPanel类。然后我根据滚动位置将内部面板的内容添加到包装器中。

但是bitblt对我不起作用。它只是离开目的地表面,没有明显的变化。

以下是相关代码:

protected override void OnPaint(PaintEventArgs e)
{
    //Generate a proper-sized bitmap
    using (Bitmap bmp = new Bitmap(ClientSize.Width, ClientSize.Height))
    {
        using (Graphics bgr = Graphics.FromImage(bmp))
        {
            //bitblt from interior panel to that bitmap
            var srcDC = GetDC(_interiorPanel.Handle);
            var bmDC = bgr.GetHdc();
            var res = BitBlt(bmDC, 0, YOffSet, Width, Height, srcDC, 0, 0, 0x00CC0020);
            System.Diagnostics.Debug.WriteLine(res);
            ReleaseDC(_interiorPanel.Handle, srcDC);
            bgr.ReleaseHdc(bmDC);
        }
        //Draw that bitmap to this panel
        e.Graphics.DrawImage(bmp, 0, 0);
    }

    base.OnPaint(e);
}

GetDC()和GetHdc()调用都返回一个值,所以至少它们没有失败。但这与我对GDI +的故障排除知识的程度有关。有人能看出我做错了吗?

1 个答案:

答案 0 :(得分:0)

内饰板是否隐形?屏幕外?或者是什么?从HDC获取相关数据的唯一方法是通过正常的消息泵绘制它,如果它被隐藏或屏幕外,或者你手动绘制它,你显然不会这样做。

这是了解无闪烁Win32的绝佳资源:http://www.catch22.net/tuts/flicker