2009-12-08 8 views
0

우리는 Windows Forms과 사용자 정의 사용자 정의 컨트롤을 사용합니다. 특정 폼에서 userControl을 호스팅하는 패널을 회전시키고 싶습니다. WPF과 비슷한 기능을 본 적이 있지만 잠시 사용할 수 없습니다. 가능하면 빌트인 .NET 메소드 또는 GDI+을 사용하여 패널과 그 자식의 회전을 구현할 수 있습니까?Windows Forms에서 .NET 패널 순환시키기

게임 개발에 표시되는 메뉴와 함께 꽤 멋진 시각 효과를 보았 기 때문에 Windows Forms를 사용하여 유사한 효과를 만들 수 있는지 궁금합니다.

+0

* [Windows Forms에서 C# 수직 레이블] (http://stackoverflow.com/questions/1371943/c-sharp-vertical-label-in-a-windows-forms) *. –

답변

2

Windows Forms에서 패널과 그 자식을 회전시키는 것은 직접 지원되는 것이 아니기 때문에 많은 시간을 낭비 할 수있는 버그가 많습니다.에서 언제 C# 코드가 0 라인이고 XAML이라는 작은 비트로이 작업을 수행 할 수 있는지 생각하는 것이 특히 고통 스럽습니다.

+0

WPF로 패널을 회전하려면 어떻게해야합니까? pls, 내 질문보기 http://stackoverflow.com/questions/15499764/rotate-a-panel-90?noredirect=1#comment21945525_15499764 – Ladessa

2

Graphics 개체에서 RotateTransform 메서드를 호출하여 GDI +에서 회전을 사용할 수 있습니다.

그러나 전체 컨트롤을 회전하는 것은 그리 간단하지 않으며 컨트롤이 구현되는 방식에 크게 의존합니다.
내부에 다른 컨트롤이있는 복합 UserControl 인 경우 운이 없어진 것입니다.
그 자체가 칠하는 컨트롤 인 경우 컨트롤을 상속하고 OnPaint 메서드를 무시하고 Graphics 개체에서 RotateTransform을 호출 해보십시오. 그러나 문제가있을 수 있습니다. 특히 모든 마우스 이벤트를 무시하고 회전 된 좌표로 기본 컨트롤의 이벤트를 호출해야합니다.

1

패널 중간에 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(); 

과정의 문제는 당신이있어 것입니다 패널 자체가 아닌 패널의 이미지 만 표시하므로 더 이상 내부 컨트롤과 상호 작용할 수 없습니다. 아마도 그렇게 할 수도 있지만 윈도우 메시지를 망쳐야 할 것입니다. 윈도우 메시지는 꽤 복잡해집니다. 필요에 따라 PictureBox에서 클릭 및 키 이벤트를 처리하고, 패널에서 컨트롤을 조작 한 다음 이미지를 업데이트 할 수 있습니다.

관련 문제