본문 바로가기

Programing/닷넷

[Winform] 단축키(Accelerator)

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