728x90
반응형
728x170
■ 화면 돋보기를 사용하는 방법을 보여준다.
▶ MainForm.cs
namespace TestProject;
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 스케일 비율
/// </summary>
private double scaleRate = 2.0d;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
KeyPreview = true;
this.timer.Interval = 50;
MouseWheel += Form_MouseWheel;
this.timer.Tick += timer_Tick;
this.scaleInButton.MouseClick += scaleInButton_MouseClick;
this.scaleOutButton.MouseClick += scaleOutButton_MouseClick;
this.timer.Start();
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 폼 마우스 휠 처리하기 - Form_MouseWheel(sender, e)
/// <summary>
/// 폼 마우스 휠 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_MouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta < 0 && this.scaleRate > 0.2d)
{
this.scaleRate -= 0.1d;
}
else if(e.Delta > 0 && this.scaleRate < 5.0d)
{
this.scaleRate += 0.1d;
}
}
#endregion
#region 타이머 틱 처리하기 - timer_Tick(sender, e)
/// <summary>
/// 타이머 틱 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void timer_Tick(object sender, EventArgs e)
{
this.scaleLabel.Text = $"배율 : {this.scaleRate:#.00}";
Size size = new Size(this.pictureBox.Width, this.pictureBox.Height);
Bitmap bitmap = new Bitmap((int)(size.Width / this.scaleRate), (int)(size.Height / this.scaleRate));
using Graphics graphics = Graphics.FromImage(bitmap);
graphics.CopyFromScreen
(
(int)(MousePosition.X - size.Width / (this.scaleRate * 2)),
(int)(MousePosition.Y - size.Height / (this.scaleRate * 2)),
0,
0,
size,
CopyPixelOperation.SourceCopy
);
Bitmap temporaryBitmap = this.pictureBox.Image as Bitmap;
this.pictureBox.Image = bitmap;
if(temporaryBitmap != null)
{
temporaryBitmap.Dispose();
}
}
#endregion
#region 확대 버튼 클릭시 처리하기 - scaleInButton_MouseClick(sender, e)
/// <summary>
/// 확대 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void scaleInButton_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left && this.scaleRate < 5.0d)
{
this.scaleRate += 0.1d;
}
}
#endregion
#region 축소 버튼 클릭시 처리하기 - scaleOutButton_MouseClick(sender, e)
/// <summary>
/// 축소 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void scaleOutButton_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left && this.scaleRate > 0.2d)
{
this.scaleRate -= 0.1d;
}
}
#endregion
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM/.NET6] Point 구조체 : 선의 왼쪽 포인트 여부 구하기 (0) | 2022.10.19 |
---|---|
[C#/WINFORM/.NET6] 별점(Star Rating) 그리기 (0) | 2022.10.14 |
[C#/WINFORM/.NET6] 비주얼 스튜디오 2022에서 단일 실행 파일 배포하기 (0) | 2022.10.10 |
[C#/WINFORM/.NET6] ISynchronizeInvoke 인터페이스 : InvokeRequired 코드 패턴 자동화하기 (0) | 2022.10.09 |
[C#/WINFORM/.NET6] MethodInvoker 대리자 : InvokeRequired 코드 패턴 자동화하기 (0) | 2022.10.09 |
[C#/WINFORM/.NET6] TextBox 클래스 : Multiline 속성이 False일 때 ENTER 키 누르는 경우 알림 소리 방지하기 (0) | 2022.10.07 |
[C#/WINFORM/.NET6] Control 클래스 : 컨트롤 페인팅 보류하기/재개하기 (0) | 2022.10.07 |
[C#/WINFORM/.NET6] Control 클래스 : 컨트롤 페인팅 보류하기/재개하기 (WIN32 API 함수 사용) (0) | 2022.10.07 |
[C#/WINFORM] WebView2 클래스 사용하기 (0) | 2022.10.03 |
[C#/WINFORM] ColorTranslator 클래스 : ToHtml 정적 메소드를 사용해 16진수 색상 코드 구하기 (0) | 2022.10.02 |
댓글을 달아 주세요