Чтобы нарисовать круговую часть растрового изображения на экране, я использую PatternBrush, созданный из растрового изображения, чтобы заполнить эллипс. Я использую P/Invoke для собственных функций, потому что, похоже, ошибка в CF2.0, если вы используете управляемые функции (см. Здесь для более подробной информации: http://social.msdn.microsoft.com/forums/en-US/netfxcompact/thread/e831ea2f-039a-4b92-adb6-941954bee060/).CreatePatternBrush/Ellipse не работает на устройстве WinMobile, но на эмуляторе
Вот код, я использую:
[DllImport("coredll.dll")]
private extern static int Ellipse(IntPtr hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
[DllImport("coredll.dll")]
private extern static IntPtr CreatePatternBrush(IntPtr hImage);
[DllImport("coredll.dll")]
private extern static IntPtr CreatePen(int fnPenStyle, int nWidth, uint crColor);
[DllImport("coredll.dll")]
private extern static IntPtr SelectObject(IntPtr hDC, IntPtr hBrush);
[DllImport("coredll.dll")]
private extern static bool DeleteObject(IntPtr hBrush);
private void DrawCircleOfBitmap(Graphics g, Bitmap bmp, Rectangle rect)
{
IntPtr hBitmap = bmp.GetHbitmap(); // get HBitmap
IntPtr hBrush = CreatePatternBrush(hBitmap); // create the PatternBrush
IntPtr hPen = CreatePen(5, 1, 0); // empty Pen (PS_NULL = 5)
IntPtr hDC = g.GetHdc(); // get HDC
IntPtr hOldBrush = SelectObject(hDC, hBrush); // select Brush into context
IntPtr hOldPen = SelectObject(hDC, hPen); // select Pen into context
Ellipse(hDC, rect.Left, rect.Top, rect.Right, rect.Bottom);
// Release of native GDI objects
SelectObject(hDC, hOldBrush);
SelectObject(hDC, hOldPen);
DeleteObject(hBrush);
DeleteObject(hPen);
g.ReleaseHdc(hDC);
DeleteObject(hBitmap);
}
Это отлично работает на любой эмулятор (WM6, WM6.1.4, WM6.5), но если я использую точно так же на моем реальном устройстве (HTC TyTN II) все, что я получаю, это белый круг. Круг не заполнен растровым изображением. Я проверил коды возврата каждой строки на устройстве - все не сообщает об ошибке. Замена CreatePatternBrush на CreateSolidBrush работает, чем заполняет круг цветом. У кого-нибудь есть идея, почему кисть шаблона не работает?
Благодаря Maik