我们使用 Windows窗体和自定义用户控件,我想能够旋转的托管用户控件中的特定形式的面板。我已经看到了 WPF 类似functionnalities,但我不能用它的那一刻。是否有可能使用,实现了面板的旋转和它的孩子可能内置.NET方法或 GDI +

我已经看到了这显示在游戏开发的菜单一些很酷的视觉效果,所以我在想,如果有可能创建使用Windows窗体类似的效果。

有帮助吗?

解决方案

旋转面板及其子女在Windows窗体是不是直接支持,而且我认为它最终会被一个有错误的头痛,可以很容易地吸了大量的时间。这是特别痛苦的思考时,你可以用零线的C#代码,并为此在 WPF XAML

其他提示

可以通过调用使用GDI +旋转RotateTransform 方法的Graphics对象上。

然而,旋转的整个控制不是那么简单,并且将在很大程度上取决于控制是如何实施的。结果 如果它是有它内部的其他控件的复合用户控件,你的运气了。结果 如果它是一个的单层控件油漆本身,尝试继承了控制,覆盖OnPaint方法和图形对象上调用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);

旋转角度不同于90度的增量也是可能的,如果绘制位图成使用GDI另一个位图:

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