Я пытаюсь написать панель в CF.NET, которая позволяет мне прокручивать содержимое без мерцания. Я подумал, что попробую иметь класс WrapperPanel, который содержит другую панель с фактическим содержимым. Затем я добавлял содержимое внутренней панели в обертку в зависимости от положения прокрутки.
Но битблт не работает для меня. Он просто оставляет поверхность назначения такой, какой она была, без видимых изменений.
Вот соответствующий код:
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 +. Может кто-то видит, что я делаю не так?