728x90
728x170
▶ CaptureChangedDelegate.cs
namespace TestProject
{
/// <summary>
/// 캡처 변경시 대리자
/// </summary>
public delegate void CaptureChangedDelegate();
}
728x90
▶ CaptureChangedWindow.cs
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 캡처 변경시 윈도우
/// </summary>
public class CaptureChangedWindow : NativeWindow
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 캡처 변경시 대리자
/// </summary>
public CaptureChangedDelegate CaptureChanged;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Protected
#region 윈도우 프로시저 처리하기 - WndProc(message)
/// <summary>
/// 윈도우 프로시저 처리하기
/// </summary>
/// <param name="message">메시지</param>
protected override void WndProc(ref Message message)
{
if(message.Msg == 533) // WM_CAPTURECHANGED
{
CaptureChanged();
}
base.WndProc(ref message);
}
#endregion
}
}
▶ Style3D.cs
namespace TestProject
{
/// <summary>
/// 3D 스타일
/// </summary>
public enum Style3D
{
/// <summary>
/// INSET
/// </summary>
Inset,
/// <summary>
/// RAISEd
/// </summary>
Raised,
/// <summary>
/// RIDGE
/// </summary>
Ridge,
/// <summary>
/// GROOVE
/// </summary>
Groove
}
}
300x250
▶ InvalidArgumentException.cs
using System;
namespace TestProject
{
/// <summary>
/// 무효 인자 예외
/// </summary>
public class InvalidArgumentException : ArgumentException
{
}
}
▶ GraphicsHelper.cs
using System.Drawing;
using System.Drawing.Drawing2D;
namespace TestProject
{
/// <summary>
/// 그래픽스 헬퍼
/// </summary>
public class GraphicsHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 그래픽스
/// </summary>
private Graphics graphics;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - GraphicsHelper(graphics)
/// <summary>
/// 생성자
/// </summary>
/// <param name="graphics">그래픽스</param>
public GraphicsHelper(Graphics graphics)
{
this.graphics = graphics;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 선 그리기 - DrawLine(pen, startPoint, endPoint)
/// <summary>
/// 선 그리기
/// </summary>
/// <param name="pen">펜</param>
/// <param name="startPoint">시작 포인트</param>
/// <param name="endPoint">종료 포인트</param>
public void DrawLine(Pen pen, Point startPoint, Point endPoint)
{
Point point1 = new Point(startPoint.X, startPoint.Y);
Point point2 = new Point(endPoint.X , endPoint.Y );
if(point2.X < point1.X)
{
Point temporaryPoint = point2;
point2 = point1;
point1 = temporaryPoint;
}
if(point1.Y == point2.Y)
{
point2.X--;
}
else if(point1.X == point2.X)
{
point2.Y--;
}
else if(point2.Y > point1.Y)
{
point2.X--;
point2.Y--;
}
else if(point2.Y < point1.Y)
{
point1.Y--;
point2.X--;
}
graphics.DrawLine(pen, point1, point2);
}
#endregion
#region 선 그리기 - DrawLine(pen, startX, startY, endX, endY)
/// <summary>
/// 선 그리기
/// </summary>
/// <param name="pen">펜</param>
/// <param name="startX">시작 X</param>
/// <param name="startY">시작 Y</param>
/// <param name="endX">종료 X</param>
/// <param name="endY">종료 Y</param>
public void DrawLine(Pen pen, int startX, int startY, int endX, int endY)
{
DrawLine(pen, new Point(startX, startY), new Point(endX, endY));
}
#endregion
#region 사각형 그리기 - DrawRectangle(pen, rectangle)
/// <summary>
/// 사각형 그리기
/// </summary>
/// <param name="pen">펜</param>
/// <param name="rectangle">사각형</param>
public void DrawRectangle(Pen pen, Rectangle rectangle)
{
if(pen.Width == 1)
{
Rectangle rectangle2 = rectangle;
rectangle2.Width--;
rectangle2.Height--;
graphics.DrawRectangle(pen, rectangle2);
}
else
{
PenAlignment penAlignment = pen.Alignment;
pen.Alignment = PenAlignment.Inset;
graphics.DrawRectangle(pen, rectangle);
pen.Alignment = penAlignment;
}
}
#endregion
#region 사각형 그리기 - DrawRectangle(pen, x, y, width, height)
/// <summary>
/// 사각형 그리기
/// </summary>
/// <param name="pen">펜</param>
/// <param name="x">X</param>
/// <param name="y">Y</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
public void DrawRectangle(Pen pen, int x, int y, int width, int height)
{
Rectangle rectangle = new Rectangle(x, y, width, height);
DrawRectangle(pen, rectangle);
}
#endregion
#region 사각형 채우기 - FillRectangle(brush, rectangle)
/// <summary>
/// 사각형 채우기
/// </summary>
/// <param name="brush">브러시</param>
/// <param name="rectangle">사각형</param>
public void FillRectangle(Brush brush, Rectangle rectangle)
{
graphics.FillRectangle(brush, rectangle);
}
#endregion
#region 3D 선 그리기 - Draw3DLine(startPoint, endPoint, style, depth)
/// <summary>
/// 3D 선 그리기
/// </summary>
/// <param name="startPoint">시작 포인트</param>
/// <param name="endPoint">종료 포인트</param>
/// <param name="style">스타일</param>
/// <param name="depth">깊이</param>
public void Draw3DLine(Point startPoint, Point endPoint, Style3D style, int depth)
{
if(startPoint.X != endPoint.X && startPoint.Y != endPoint.Y)
{
throw new InvalidArgumentException();
}
if(depth != 1 && depth != 2)
{
throw new InvalidArgumentException();
}
if(depth == 1)
{
switch(style)
{
case Style3D.Inset :
case Style3D.Groove :
if(startPoint.Y == endPoint.Y)
{
DrawLine(SystemPens.ControlDark, startPoint, endPoint);
Point point1 = new Point(startPoint.X, startPoint.Y + 1);
Point point2 = new Point(endPoint.X , endPoint.Y + 1);
DrawLine(SystemPens.ControlLightLight, point1, point2);
}
else
{
DrawLine(SystemPens.ControlDark, startPoint, endPoint);
Point point1 = new Point(startPoint.X + 1, startPoint.Y);
Point point2 = new Point(endPoint.X + 1 , endPoint.Y );
DrawLine(SystemPens.ControlLightLight, point1, point2);
}
break;
case Style3D.Raised :
case Style3D.Ridge :
if(startPoint.Y == endPoint.Y)
{
DrawLine(SystemPens.ControlLightLight, startPoint, endPoint);
Point point1 = new Point(startPoint.X, startPoint.Y + 1);
Point point2 = new Point(endPoint.X , endPoint.Y + 1);
DrawLine(SystemPens.ControlDark, point1, point2);
}
else
{
DrawLine(SystemPens.ControlLightLight, startPoint, endPoint);
Point point1 = new Point(startPoint.X + 1, startPoint.Y);
Point point2 = new Point(endPoint.X + 1, endPoint.Y );
DrawLine(SystemPens.ControlDark, point1, point2);
}
break;
}
}
else if(depth == 2)
{
switch(style)
{
case Style3D.Inset :
case Style3D.Groove :
if(startPoint.Y == endPoint.Y)
{
DrawLine(SystemPens.ControlDarkDark, startPoint, endPoint);
Point point1 = new Point(startPoint.X, startPoint.Y + 1);
Point point2 = new Point(endPoint.X , endPoint.Y + 1);
DrawLine(SystemPens.ControlDark, point1, point2);
point1.Y++;
point2.Y++;
DrawLine(SystemPens.ControlLight, point1, point2);
point1.Y++;
point2.Y++;
DrawLine(SystemPens.ControlLightLight, point1, point2);
}
else
{
DrawLine(SystemPens.ControlDarkDark, startPoint, endPoint);
Point point1 = new Point(startPoint.X + 1, startPoint.Y);
Point point2 = new Point(endPoint.X + 1, endPoint.Y );
DrawLine(SystemPens.ControlDark, point1, point2);
point1.X++;
point2.X++;
DrawLine(SystemPens.ControlLight, point1, point2);
point1.X++;
point2.X++;
DrawLine(SystemPens.ControlLightLight, point1, point2);
}
break;
case Style3D.Raised :
case Style3D.Ridge :
if(startPoint.Y == endPoint.Y)
{
DrawLine(SystemPens.ControlLightLight, startPoint, endPoint);
Point point1 = new Point(startPoint.X, startPoint.Y + 1);
Point point2 = new Point(endPoint.X , endPoint.Y + 1);
DrawLine(SystemPens.ControlLight, point1, point2);
point1.Y++;
point2.Y++;
DrawLine(SystemPens.ControlDark, point1, point2);
point1.Y++;
point2.Y++;
DrawLine(SystemPens.ControlDarkDark, point1, point2);
}
else
{
DrawLine(SystemPens.ControlLightLight, startPoint, endPoint);
Point point1 = new Point(startPoint.X + 1, startPoint.Y);
Point point2 = new Point(endPoint.X + 1, endPoint.Y );
DrawLine(SystemPens.ControlLight, point1, point2);
point1.X++;
point2.X++;
DrawLine(SystemPens.ControlDark, point1, point2);
point1.X++;
point2.X++;
DrawLine(SystemPens.ControlDarkDark, point1, point2);
}
break;
}
}
}
#endregion
#region 3D 선 그리기 - Draw3DLine(startX, startY, endX, endY, style, depth)
/// <summary>
/// 3D 선 그리기
/// </summary>
/// <param name="startX">시작 X</param>
/// <param name="startY">시작 Y</param>
/// <param name="endX">종료 X</param>
/// <param name="endY">종료 Y</param>
/// <param name="style">스타일</param>
/// <param name="depth">깊이</param>
public void Draw3DLine(int startX, int startY, int endX, int endY, Style3D style, int depth)
{
Draw3DLine(new Point(startX, startY), new Point(endX, endY), style, depth);
}
#endregion
#region 3D 사각형 그리기 - Draw3DRectangle(rectangle, style, depth)
/// <summary>
/// 3D 사각형 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="style">스타일</param>
/// <param name="depth">깊이</param>
public void Draw3DRectangle(Rectangle rectangle, Style3D style, int depth)
{
if(depth != 1 && depth != 2)
{
throw new InvalidArgumentException();
}
if(depth == 1)
{
switch(style)
{
case Style3D.Ridge :
DrawDepth1RidgeGrooveRectangle(rectangle, SystemPens.ControlLightLight, SystemPens.ControlDark);
break;
case Style3D.Groove :
DrawDepth1RidgeGrooveRectangle(rectangle, SystemPens.ControlDark, SystemPens.ControlLightLight);
break;
case Style3D.Raised :
DrawDepth1InsetRaisedRectangle(rectangle, SystemPens.ControlLightLight, SystemPens.ControlDark);
Rectangle rectangle2 = new Rectangle(rectangle.Location, rectangle.Size);
rectangle2.Inflate(-1, -1);
FillRectangle(SystemBrushes.Control, rectangle2);
break;
case Style3D.Inset :
DrawDepth1InsetRaisedRectangle(rectangle, SystemPens.ControlDark, SystemPens.ControlLightLight);
Rectangle rectangle3 = new Rectangle(rectangle.Location, rectangle.Size);
rectangle3.Inflate(-1, -1);
FillRectangle(SystemBrushes.Control, rectangle3);
break;
}
}
else if(depth == 2)
{
switch(style)
{
case Style3D.Ridge :
DrawDepth2RidgeGrooveRectangle
(
rectangle,
SystemPens.ControlLightLight,
SystemPens.ControlLight,
SystemPens.ControlDark,
SystemPens.ControlDarkDark
);
break;
case Style3D.Groove :
DrawDepth2RidgeGrooveRectangle
(
rectangle,
SystemPens.ControlDarkDark,
SystemPens.ControlDark,
SystemPens.ControlLight,
SystemPens.ControlLightLight
);
break;
case Style3D.Raised :
DrawDepth2InsetRaisedRectangle
(
rectangle,
SystemPens.ControlLightLight,
SystemPens.ControlLight,
SystemPens.ControlDark,
SystemPens.ControlDarkDark
);
Rectangle rectangle2 = new Rectangle(rectangle.Location, rectangle.Size);
rectangle2.Inflate(-2, -2);
FillRectangle(SystemBrushes.Control, rectangle2);
break;
case Style3D.Inset :
DrawDepth2InsetRaisedRectangle
(
rectangle,
SystemPens.ControlDarkDark,
SystemPens.ControlDark,
SystemPens.ControlLight,
SystemPens.ControlLightLight
);
Rectangle rectangle3 = new Rectangle(rectangle.Location, rectangle.Size);
rectangle3.Inflate(-2, -2);
FillRectangle(SystemBrushes.Control, rectangle3);
break;
}
}
}
#endregion
#region 3D 사각형 그리기 - Draw3DRectangle(x, y, width, height, style, depth)
/// <summary>
/// 3D 사각형 그리기
/// </summary>
/// <param name="x">X</param>
/// <param name="y">Y</param>
/// <param name="width">너비</param>
/// <param name="height">높이</param>
/// <param name="style">스타일</param>
/// <param name="depth">깊이</param>
public void Draw3DRectangle(int x, int y, int width, int height, Style3D style, int depth)
{
Draw3DRectangle(new Rectangle(x, y, width, height), style, depth);
}
#endregion
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 깊이 1 INSET/RAISED 사각형 그리기 - DrawDepth1InsetRaisedRectangle(rectangle, pen1, pen2)
/// <summary>
/// 깊이 1 INSET/RAISED 사각형 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="pen1">펜 1</param>
/// <param name="pen2">펜 2</param>
private void DrawDepth1InsetRaisedRectangle(Rectangle rectangle, Pen pen1, Pen pen2)
{
Point point1 = new Point(rectangle.Left , rectangle.Top);
Point point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top);
DrawLine(pen1, point1, point2);
point1 = new Point(rectangle.Left, rectangle.Top );
point2 = new Point(rectangle.Left, rectangle.Top + rectangle.Height);
DrawLine(pen1, point1, point2);
point1 = new Point(rectangle.Left , rectangle.Top + rectangle.Height - 1);
point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top + rectangle.Height - 1);
DrawLine(pen2, point1, point2);
point1 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top );
point2 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top + rectangle.Height);
DrawLine(pen2, point1, point2);
}
#endregion
#region 깊이 1 RIDGE/GROOVE 사각형 그리기 - DrawDepth1RidgeGrooveRectangle(rectangle, pen1, pen2)
/// <summary>
/// 깊이 1 RIDGE/GROOVE 사각형 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="pen1">펜 1</param>
/// <param name="pen2">펜 2</param>
private void DrawDepth1RidgeGrooveRectangle(Rectangle rectangle, Pen pen1, Pen pen2)
{
Point point1 = new Point(rectangle.Left , rectangle.Top);
Point point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X--;
point1.Y++;
point2.Y++;
DrawLine(pen2, point1, point2);
point1 = new Point(rectangle.Left, rectangle.Top );
point2 = new Point(rectangle.Left, rectangle.Top + rectangle.Height);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X++;
point1.Y++;
point2.Y--;
DrawLine(pen2, point1, point2);
point1 = new Point(rectangle.Left , rectangle.Top + rectangle.Height - 1);
point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top + rectangle.Height - 1);
DrawLine(pen2, point1, point2);
point1.X++;
point2.X--;
point1.Y--;
point2.Y--;
DrawLine(pen1, point1, point2);
point1 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top );
point2 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top + rectangle.Height);
DrawLine(pen2, point1, point2);
point1.X--;
point2.X--;
point1.Y++;
point2.Y--;
DrawLine(pen1, point1, point2);
}
#endregion
#region 깊이 2 INSERT/RAISED 사각형 그리기 - DrawDepth2InsetRaisedRectangle(rectangle, pen1, pen2, pen3, pen4)
/// <summary>
/// 깊이 2 INSERT/RAISED 사각형 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="pen1">펜 1</param>
/// <param name="pen2">펜 2</param>
/// <param name="pen3">펜 3</param>
/// <param name="pen4">펜 4</param>
private void DrawDepth2InsetRaisedRectangle(Rectangle rectangle, Pen pen1, Pen pen2, Pen pen3, Pen pen4)
{
Point point1 = new Point(rectangle.Left , rectangle.Top);
Point point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X--;
point1.Y++;
point2.Y++;
DrawLine(pen2, point1, point2);
point1 = new Point(rectangle.Left, rectangle.Top );
point2 = new Point(rectangle.Left, rectangle.Top + rectangle.Height);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X++;
point1.Y++;
point2.Y--;
DrawLine(pen2, point1, point2);
point1 = new Point(rectangle.Left , rectangle.Top + rectangle.Height - 1);
point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top + rectangle.Height - 1);
DrawLine(pen4, point1, point2);
point1.X++;
point2.X--;
point1.Y--;
point2.Y--;
DrawLine(pen3, point1, point2);
point1 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top );
point2 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top + rectangle.Height);
DrawLine(pen4, point1, point2);
point1.X--;
point2.X--;
point1.Y++;
point2.Y--;
DrawLine(pen3, point1, point2);
}
#endregion
#region 깊이 2 RIDGE/GROOVE 사각형 그리기 - DrawDepth2RidgeGrooveRectangle(rectangle, pen1, pen2, pen3, pen4)
/// <summary>
/// 깊이 2 RIDGE/GROOVE 사각형 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="pen1">펜 1</param>
/// <param name="pen2">펜 2</param>
/// <param name="pen3">펜 3</param>
/// <param name="pen4">펜 4</param>
private void DrawDepth2RidgeGrooveRectangle(Rectangle rectangle, Pen pen1, Pen pen2, Pen pen3, Pen pen4)
{
Point point1 = new Point(rectangle.Left , rectangle.Top);
Point point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X--;
point1.Y++;
point2.Y++;
DrawLine(pen2, point1, point2);
point1.X++;
point2.X--;
point1.Y++;
point2.Y++;
DrawLine(pen3, point1, point2);
point1.X++;
point2.X--;
point1.Y++;
point2.Y++;
DrawLine(pen4, point1, point2);
point1 = new Point(rectangle.Left, rectangle.Top );
point2 = new Point(rectangle.Left, rectangle.Top + rectangle.Height);
DrawLine(pen1, point1, point2);
point1.X++;
point2.X++;
point1.Y++;
point2.Y--;
DrawLine(pen2, point1, point2);
point1.X++;
point2.X++;
point1.Y++;
point2.Y--;
DrawLine(pen3, point1, point2);
point1.X++;
point2.X++;
point1.Y++;
point2.Y--;
DrawLine(pen4, point1, point2);
point1 = new Point(rectangle.Left , rectangle.Top + rectangle.Height - 1);
point2 = new Point(rectangle.Left + rectangle.Width, rectangle.Top + rectangle.Height - 1);
DrawLine(pen4, point1, point2);
point1.X++;
point2.X--;
point1.Y--;
point2.Y--;
DrawLine(pen3, point1, point2);
point1.X++;
point2.X--;
point1.Y--;
point2.Y--;
DrawLine(pen2, point1, point2);
point1.X++;
point2.X--;
point1.Y--;
point2.Y--;
DrawLine(pen1, point1, point2);
point1 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top );
point2 = new Point(rectangle.Left + rectangle.Width - 1, rectangle.Top + rectangle.Height);
DrawLine(pen4, point1, point2);
point1.X--;
point2.X--;
point1.Y++;
point2.Y--;
DrawLine(pen3, point1, point2);
point1.X--;
point2.X--;
point1.Y++;
point2.Y--;
DrawLine(pen2, point1, point2);
point1.X--;
point2.X--;
point1.Y++;
point2.Y--;
DrawLine(pen1, point1, point2);
}
#endregion
}
}
▶ MainForm.cs
using System.Drawing;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 캡처 변경시 윈도우
/// </summary>
private CaptureChangedWindow captureChangedWindow;
/// <summary>
/// 버튼 사각형
/// </summary>
private Rectangle buttonRectangle = new Rectangle(400, 100, 100, 40);
/// <summary>
/// 버튼 내에서 마우스 DOWN 여부
/// </summary>
private bool mouseDownInButton;
/// <summary>
/// 버튼 DOWN 여부
/// </summary>
private bool buttonDown;
/// <summary>
/// 적색 사각형
/// </summary>
private Rectangle redRectangle = new Rectangle(400, 200, 100, 40);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
this.captureChangedWindow = new CaptureChangedWindow();
this.captureChangedWindow.AssignHandle(Handle);
MouseDown += Form_MouseDown;
MouseMove += Form_MouseMove;
MouseUp += Form_MouseUp;
Paint += Form_Paint;
this.captureChangedWindow.CaptureChanged += captureChangedWindow_CaptureChanged;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 폼 마우스 DOWN 처리하기 - Form_MouseDown(sender, e)
/// <summary>
/// 폼 마우스 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_MouseDown(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left && this.buttonRectangle.Contains(e.X, e.Y))
{
this.mouseDownInButton = true;
this.buttonDown = true;
DrawButton(this.buttonRectangle, null, false);
}
}
#endregion
#region 폼 마우스 이동시 처리하기 - Form_MouseMove(sender, e)
/// <summary>
/// 폼 마우스 이동시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_MouseMove(object sender, MouseEventArgs e)
{
if(this.mouseDownInButton)
{
if(this.buttonRectangle.Contains(e.X, e.Y))
{
if(!this.buttonDown)
{
DrawButton(buttonRectangle, null, false);
this.buttonDown = true;
}
}
else
{
if(this.buttonDown)
{
DrawButton(this.buttonRectangle, null, true);
this.buttonDown = false;
}
}
}
if(this.redRectangle.Contains(new Point(e.X, e.Y)))
{
MessageBox.Show("배터리가 충전되었습니다.");
}
}
#endregion
#region 폼 마우스 UP 처리하기 - Form_MouseUp(sender, e)
/// <summary>
/// 폼 마우스 UP 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_MouseUp(object sender, MouseEventArgs e)
{
if(this.mouseDownInButton && e.Button == MouseButtons.Left)
{
DrawButton(this.buttonRectangle, null, true);
this.mouseDownInButton = false;
if(this.buttonRectangle.Contains(e.X, e.Y))
{
MessageBox.Show("버튼을 눌렀습니다.");
}
}
}
#endregion
#region 폼 페인트시 처리하기 - Form_Paint(sender, e)
/// <summary>
/// 폼 페인트시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Paint(object sender, PaintEventArgs e)
{
Graphics graphics = e.Graphics;
DrawButton(this.buttonRectangle, graphics, true);
graphics.FillRectangle(Brushes.Red, this.redRectangle);
}
#endregion
#region 캡처 변경시 윈도우 캡처 변경시 처리하기 - captureChangedWindow_CaptureChanged()
/// <summary>
/// 캡처 변경시 윈도우 캡처 변경시 처리하기
/// </summary>
private void captureChangedWindow_CaptureChanged()
{
this.mouseDownInButton = false;
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 버튼 그리기 - DrawButton(rectangle, graphics, buttonUp)
/// <summary>
/// 버튼 그리기
/// </summary>
/// <param name="rectangle">사각형</param>
/// <param name="graphics">그래픽스</param>
/// <param name="buttonUp">버튼 UP 여부</param>
private void DrawButton(Rectangle rectangle, Graphics graphics, bool buttonUp)
{
bool disposeGraphics = false;
if(graphics == null)
{
graphics = CreateGraphics();
disposeGraphics = true;
}
GraphicsHelper helper = new GraphicsHelper(graphics);
helper.DrawRectangle(Pens.Black, rectangle);
Rectangle innerRectangle = new Rectangle(rectangle.Location, rectangle.Size);
innerRectangle.Inflate(new Size(-1, -1));
if(buttonUp)
{
helper.Draw3DRectangle(innerRectangle, Style3D.Raised, 2);
}
else
{
helper.FillRectangle(Brushes.LightGray, innerRectangle);
}
if(disposeGraphics)
{
graphics.Dispose();
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM/.NET5] WaveOutEvent 클래스 : Volume 속성을 사용해 볼륨 설정하기 (0) | 2021.12.26 |
---|---|
[C#/WINFORM/.NET5] WaveOutEvent 클래스 : 오디오 파일 재생하기 (기능 개선) (0) | 2021.12.26 |
[C#/WINFORM/.NET5] WaveOutEvent 클래스 : 오디오 파일 재생하기 (0) | 2021.12.26 |
[C#/WINFORM/.NET5] 마이크 입력 스펙트로그램 표시하기 (0) | 2021.12.18 |
[C#/WINFORM] 사운드 필터링 사용하기 (0) | 2021.12.09 |
[C#/WINFORM] 마우스 히트 테스트(Hit Test) 사용하기 (0) | 2021.12.06 |
[C#/WINFORM] 특정 영역에서 마우스 커서 설정하기 (0) | 2021.12.06 |
[C#/WINFORM] 마우스 드래그 대상 이미지 표시하기 (0) | 2021.12.06 |
[C#/WINFORM] 카카오 링크를 사용해 나에게 카카오톡 메시지 보내기 (기능 개선) (0) | 2021.11.24 |
[C#/WINFORM] 누겟 설치 : CefSharp.WinForms (0) | 2021.11.23 |