여기서는 특정 키를 누르면 프로그램이 종료되는 예제를 쓰겠습니다.
프로젝트 파일 안에
클래스 파일을 생성하고 아래의 코드를 붙여넣어 클래스 파일을 만듭니다.
/* * FileName : ExitProgramUsingESC.cs * esc 키를 누르면 프로그램이 종료됨 * Application 레벨에서 메세지를 처리 */ using System.Windows.Forms; public class ExitProgramClass : IMessageFilter { private const int WM_KEYDOWN = 0x0100; // 키보드 다운 private const int VK_ESCAPE = 0x1B; // esc 키 public bool PreFilterMessage(ref Message m) { // 키보드가 다운 되었고 esc가 눌렸다면 if (m.Msg == WM_KEYDOWN && m.wParam.ToInt32() == VK_ESCAPE) { Application.Exit(); // 프로그램 종료 return true; } return false; } }
그리고 폼의 생성자 부분에 다음과 같이 코드를 집어넣으면 됩니다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace AStarAlgorithm { public partial class BaseForm : Form { public BaseForm() { InitializeComponent(); // esc 키를 누르면 프로그램 종료 Application.AddMessageFilter(new ExitProgramClass()); } } }
C#에서는 WM_KEYDOWN, WM_MOUSEDOWN 과 같은
메세지에 대한 값이 정의 되있지 않으므로 사용자가 직접
정의해서 사용해야합니다.
위의 예제를 응용하면
프로그램 전체에 대해서
어플리케이션 레벨의
메세지 전체를 처리할 수 있습니다.
키보드 입력값은 m.Msg 의 wParam을 비교한다!
'C# > 윈도우 프로그래밍' 카테고리의 다른 글
[c#] 인터넷에 연결 되있는지 확인하기 (0) | 2012.05.09 |
---|---|
[C#] 마우스 휠 이벤트 (0) | 2012.04.07 |
전체화면 설정 (Full Screen) (0) | 2012.04.06 |