728x90
반응형
WinForm을 다루다 보면 마우스 커서의 모양을 변경해야 하는 경우가 있다.
이는 아래의 ChangeCursor(Control control) 처럼 컨트롤을 받아와서
컨트롤 위에서의 커서를 변경한다.
control.Cursor = Cursors.SizeNWSE;
커서 종류는 Visual Studio환경에서 Cursors. 하고 Ctrl+SPACE 눌러보면 확인할 수 있다.
아래의 코드는 입력된 Left, Top, Width, Bottom을 pictureBox1에 그리는데,
그려진 빨간 선 위에서 마우스의 커서모양이 변경되도록 한 코드이다.
pictureBox1_MouseMove 이벤트에서 마우스가 움직일 때
그려진 선 위에 마우스 커서가 위치하는 지 확인한 후에 커서 모양을 변경해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
public Rectangle CropR;
public static bool MouseInLeft { get; set; }
public static bool MouseInRight { get; set; }
public static bool MouseInTop { get; set; }
public static bool MouseInBottom { get; set; }
public Form1()
{
InitializeComponent();
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
CropR = new Rectangle(50, 50, 400, 300);
CheckMousePosition(CropR, new Point(e.X, e.Y), true);
ChangeCursor(pictureBox1);
}
private static void CheckMousePosition(Rectangle r, Point e, bool OnlyRectangle)
{
if (OnlyRectangle) //사각형 내부에서만 마우스 커서 변경
{
MouseInLeft = (Math.Abs(e.X - r.X) <= 5) && (e.Y > r.Y) && (e.Y < r.Y + r.Height);
MouseInRight = (Math.Abs(e.X - r.X - r.Width) <= 5) && (e.Y > r.Y) && (e.Y < r.Y + r.Height);
MouseInTop = (Math.Abs(e.Y - r.Y) <= 5) && (e.X > r.X) && (e.X < r.X + r.Width);
MouseInBottom = (Math.Abs(e.Y - r.Y - r.Height) <= 5) && (e.X > r.X) && (e.X < r.X + r.Width);
} else // 사각형 외부에서도 마우스 커서 변경
{
MouseInLeft = (Math.Abs(e.X - r.X) <= 5);
MouseInRight = (Math.Abs(e.X - r.X - r.Width) <= 5);
MouseInTop = (Math.Abs(e.Y - r.Y) <= 5);
MouseInBottom = (Math.Abs(e.Y - r.Y - r.Height) <= 5);
}
}
private static void ChangeCursor(Control control)
{
if (MouseInLeft)
{
if (MouseInTop)
{
control.Cursor = Cursors.SizeNWSE;
}
else if (MouseInBottom)
{
control.Cursor = Cursors.SizeNESW;
}
else
{
control.Cursor = Cursors.SizeWE;
}
}
else if (MouseInRight)
{
if (MouseInTop)
{
control.Cursor = Cursors.SizeNESW;
}
else if (MouseInBottom)
{
control.Cursor = Cursors.SizeNWSE;
}
else
{
control.Cursor = Cursors.SizeWE;
}
}
else if (MouseInTop || MouseInBottom)
{
control.Cursor = Cursors.SizeNS;
}
else
{
control.Cursor = Cursors.Default;
}
}
|
cs |
728x90
반응형
'IT > C#' 카테고리의 다른 글
[C#] Selenium Web Crawler 이용하여 우편번호 검색하기 (458) | 2022.07.06 |
---|---|
[C#] 마우스 위치에 따라 3배 확대 이미지 보여주는 프로그램 (feat. 반투명 사각형 그리기) (0) | 2022.04.15 |
[C#] 윈도우 그림판 기능 추가해보기 (PPT처럼 도형과 도형을 직선으로 잇기) (0) | 2021.03.31 |
[C#] MySQL to SQLite Converter (0) | 2021.03.25 |
[C#] SQLite 설치 및 사용하기 (0) | 2021.03.15 |