RoundPanel 클래스를 제작했습니다.
Panel을 상속해서 처리 했습니다.
Round 하는 코드는 아래의 코드를 참조 하시면 됩니다.
GraphicsPath path = new GraphicsPath();
path.AddArc(arcRect, 180, 90);
arcRect.X = rect.Right - diameter;
path.AddArc(arcRect, 270, 90);
arcRect.Y = rect.Bottom - diameter;
path.AddArc(arcRect, 0, 90);
arcRect.X = rect.Left;
path.AddArc(arcRect, 90, 90);
path.CloseFigure();
return path;
}
Panel 함수에서 드로잉 하는 코드 입니다.
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
int width = panel.ClientRectangle.Width;
int height = panel.ClientRectangle.Height;
Rectangle rect = new Rectangle(0, 0, width-1, height-1);
using (GraphicsPath path = RoundPanel.GetRoundedRectPath(rect, 8))
{
using (Brush brush = new LinearGradientBrush(
new Rectangle(0, 0, panel.ClientRectangle.Width, panel.ClientRectangle.Height),
Color.FromArgb(panel.Opcity, 102, 102, 102),
Color.FromArgb(panel.Opcity, 0, 0, 0),
90.0f))
{
//graphics.FillRectangle(brush, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height);
g.FillPath(brush, path);
}
//g.FillPath(Brushes.Yellow, path);
Pen pen = new Pen(Color.FromArgb(panel.Opcity, 255, 255, 255));
g.DrawPath(pen, path);
}
}
이걸 처리 하다 보면 화면을 전환 하거나 리프레쉬할때 플리커 현상이 생기기도 합니다.
이걸 해결하기 위해서 RoundPanel에 더블버퍼링 처리 코드를 추가 했습니다.
출처 : http://www.iamgsi.com/category/C%23
[C#] - Simple Update Manager (Http 프로토콜 통한 다운로드 : WebClient, DownloadFileAsync) (0) | 2013.05.25 |
---|---|
C# Ftp File Upload - File Type 처리할때 (0) | 2013.05.25 |
C# Deep Copy (0) | 2013.05.25 |
Marshal 을 이용해서 string 을 byte로 변환(복사) 하기 (0) | 2013.05.25 |
DB에 Image 데이터를 바이너리로 저장 및 로드하기 (0) | 2013.05.25 |