2009-08-13 9 views
0

ビットマップの円形部分を画面に描画するには、ビットマップから作成した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

答えて

0

行動に基づいて、それはTYTN IIのためのディスプレイドライバは、パターンブラシをサポートしていない可能性が非常に高いです。おそらくGDIにはサポートされていないと言えるはずですが、そうではありません。これは珍しいことではありませんが、OEMはディスプレイドライバのすべての機能を実装することはほとんどありません(アルファブレンドは古典的な例です)。ドライバはサポートされていないと報告しません。

関連する問題