質問

私たちは、Windowsフォームとカスタムユーザーコントロールnoreferrer"> WPF のと似たのfunctionnalitiesを見てきましたが、私は一瞬のためにそれを使用することはできません。それはおそらく、.NETメソッドに内蔵またはを使用して、パネルの回転とその子を達成することが可能ですGDI + の?

私はゲーム開発に表示されたメニューとかなりクールな視覚効果を見てきましたので、Windowsフォームを使用して同様の効果を作成することが可能である場合、私は思っていた。

役に立ちましたか?

解決

Windowsフォームでのパネルとその子を回転させることは直接サポートされものではありません、と私はそれが簡単に多くの時間を吸うことができバギー頭痛になってしまうと思います。それはあなたがゼロC#コードの行として WPF のでこれを行うことができたときに考えることが特に痛いです XAML でのほんの少します。

他のヒント

あなたは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();

もちろんの問題は、あなたが唯一のパネル自体あなたのパネルの画像を表示し、していないということなので、内部コントロールと対話することはできなくなりました。それはおそらく同様に行うことができるが、あなたはかなり複雑になりますウィンドウメッセージ、と混乱するだろう。あなたのニーズに応じて、あなたはまた、パネルのコントロールを操作して、画像を更新し、取り扱いをクリックし、ピクチャボックス上のキーイベントに逃げることができるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top