Windowsフォームで、.NETパネルを回転させます
-
16-09-2019 - |
質問
私たちは、Windowsフォームとカスタムユーザーコントロールnoreferrer"> WPF のと似たのfunctionnalitiesを見てきましたが、私は一瞬のためにそれを使用することはできません。それはおそらく、.NETメソッドに内蔵またはを使用して、パネルの回転とその子を達成することが可能ですGDI + の?
私はゲーム開発に表示されたメニューとかなりクールな視覚効果を見てきましたので、Windowsフォームを使用して同様の効果を作成することが可能である場合、私は思っていた。
他のヒント
あなたはhref="http://msdn.microsoft.com/en-us/library/system.drawing.graphics.rotatetransform.aspx" rel="nofollow noreferrer"> のGraphics
オブジェクトのメソッドます。
しかし、全体の制御を回転することはそれほど単純ではありません、そしてコントロールがどのように実装されるかに大きく依存します。
それはそれの内部に他のコントロールを持っている複合UserControlの場合、あなたは運が悪いです。
それは自分自身を描画sinlgeコントロールの場合、コントロールを継承OnPaint
メソッドをオーバーライドし、GraphicsオブジェクトにRotateTransform
を呼び出してみてください。しかし、あなたはおそらくそれとのトラブルを持っています。特に、あなたはおそらく、マウスイベントのすべてをオーバーライドして、回転座標でベースコントロールのイベントを呼び出す必要があります。
これで、ビットマップを回転させると、例えば、それを表示し、あなたのパネルにDrawToBitmapメソッドを呼び出すことにより、途中でそこに着くことができますPictureBoxでます:
Bitmap bmp = new Bitmap(panel.Width, panel.Height);
panel.DrawToBitmap(bmp, new Rectangle(Point.Empty, panel.Size));
bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);
PictureBox pbox = new PictureBox();
pbox.Location = panel.Location;
pbox.SizeMode = PictureBoxSizeMode.AutoSize;
pbox.Image = bmp;
Controls.Remove(panel);
Controls.Add(pbox);
回転はあなたがGDIを使用して別のビットマップにビットマップを描画する場合は90度単位でも可能である以外の角度
Bitmap bmp2 = new Bitmap(bmp.Width + 75, bmp.Height + 100);
Graphics g = Graphics.FromImage(bmp2);
g.TranslateTransform(bmp2.Width / 2, bmp2.Height / 2);
g.RotateTransform(-15f);
g.TranslateTransform(-bmp.Width / 2, -bmp.Height / 2);
g.DrawImageUnscaled(bmp, Point.Empty);
g.Dispose();
もちろんの問題は、あなたが唯一のパネル自体あなたのパネルの画像を表示し、していないということなので、内部コントロールと対話することはできなくなりました。それはおそらく同様に行うことができるが、あなたはかなり複雑になりますウィンドウメッセージ、と混乱するだろう。あなたのニーズに応じて、あなたはまた、パネルのコントロールを操作して、画像を更新し、取り扱いをクリックし、ピクチャボックス上のキーイベントに逃げることができるかもしれません。