System.Windows.Forms의 ProcessCmdKey 메서드가 있다.
namespace System.Windows.Forms
{
public class Form : ContainerControl
{
// ...
protected override bool ProcessCmdKey(ref Message msg, Keys keyData);
// ...
}
}
이것을 오버라이드 한다. (예)
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Control | Keys.F)) {
MessageBox.Show("What the Ctrl+F?");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
이것은 마치 윈도우 메세지 루프에서 TranslateAccelerator 함수 (링크)를 호출해서 Accelerator 테이블에 정의된 단축키들을 WM_COMMAND 이벤트로 발생시켜주는 일종의 테이블 룩업(look-up)하는 것에 비해, 중간에 후킹처럼 해서 특정 동작을 나중에 구현하게 하는 방법으로 객체지향적인 느낌이 들어갔다.
참고.
http://stackoverflow.com/questions/400113/best-way-to-implement-keyboard-shortcuts-in-a-windows-forms-application
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646335(v=vs.85).aspx
'Programing > 닷넷' 카테고리의 다른 글
[C#] 애플리케이션 경로 (0) | 2014.03.06 |
---|---|
[C#] WinForm - Drag & Drap 구현하기 (아이콘 변화) (0) | 2014.03.06 |
[C#] 환경변수 - 시스템폴더 (0) | 2014.01.28 |
Enum에 Description 확장메소드 추가하기 (0) | 2014.01.23 |
[콜백] System.Action<T>로 함수인자 구현하기 (AsyncWorker) (0) | 2014.01.09 |