디자이너 디자이너의 Play Button과 Stop Button에 단축키 설정하기.
페이지 정보
본문
안녕하세요. 소심비형입니다. 요즘 날씨가 너무 좋네요^^? 코로나19로 모두가 힘든 시기를 보내고 있지만, 짜증내지 말고 좀 더 서로를 배려하면서 극복해봅시다~ 요즘 마스크 빌런에 대한 뉴스를 접하다보면 씁쓸하기까지 합니다. 다시 본론으로 돌아가서~ 단축키 설정하는 방법에 대해 알아보도록 하겠습니다. 디자이너를 이용해서 플레이어를 제작하는 경우 스크립트 실행과 중지 버튼에 단축키를 설정할 수 있습니다. 전체 소스는 첨부파일로 다운 받으세요.
1. 로컬 단축키 설정하기.
우선, 아래 그림처럼 속성에서 단축키를 설정해주세요.
- PlayButton 선택
- 속성탭 선택 (Alt+Enter)
- 단축키 설정
F7을 눌러서 코드 보기로 이동하세요. 아래 그림처럼 디자이너에서 우클릭 후 코드 보기를 클릭해도 됩니다.
아래 코드를 전부 복사한 후 붙여넣기 해줍니다. 참고로, playButton1과 stopButton1은 자동으로 만들어주는 컨트롤 이름입니다. 만약, 컨트롤의 이름을 임의로 변경했다면 아래 코드에서 관련된 이름들을 모두 변경해줘야 합니다. 이름을 변경하는 방법은 디자인 보기(Shift+F7)에서 속성창(Alt+Enter)의 (Name)에서 할 수 있습니다.
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (playButton1.ButtonShortcut != Keys.None)
{
KeyEventArgs e = new KeyEventArgs(keyData);
if ((e.KeyCode | e.Modifiers) == playButton1.ButtonShortcut)
{
playButton1.PerformClick();
return true;
}
}
if (stopButton1.ButtonShortcut != Keys.None)
{
KeyEventArgs e = new KeyEventArgs(keyData);
if ((e.KeyCode | e.Modifiers) == stopButton1.ButtonShortcut)
{
stopButton1.PerformClick();
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
2. 글로벌 단축키 설정하기.
앞서 알아본 내용은 로컬 단축키 설정 방법입니다. 로컬과 글로벌의 차이점은 단순하지만, 사용자 입장에서 보면 아주 크게 느껴질 수 있는 부분입니다. 로컬은 디자이너가 활성화된 상태에서만 단축키가 동작합니다. 따라서, 다른 프로그램이 앞에 있거나 활성 상태라면 단축키를 이용해서 스크립트를 실행하거나 중지할 수 없습니다. 글로벌은 이와 반대로 어떠한 상태에서도 단축키가 동작합니다. 물론, 이미 다른 프로그램이 글로벌 단축키를 사용하고 있다면 문제가 되겠죠^^;
글로벌 단축키를 설정하는 방법은 여러가지가 있습니다. 직접 인터넷에서 소스 코드를 복사+붙여넣기로 직접 구현해도 됩니다. 하지만, 엔지엠은 이미 검증된 안전한 모델을 제공하고 있습니다. 가능하면 검증된 안전한 방식을 사용하는게 정신 건강에 좋습니다. 아래와 같이 코드를 추가해줍니다. 29라인에서 훅매니저를 이용해서 키다운 이벤트 처리기를 추가해주세요. 탭을 두번 누르면 자동으로 처리기가 추가됩니다.
위 37~40라인을 아래와 같이 수정하세요.
private void HookManager_KeyDown(object sender, KeyEventArgs e)
{
if (playButton1.ButtonShortcut != Keys.None)
{
if ((e.KeyCode | e.Modifiers) == playButton1.ButtonShortcut)
{
playButton1.PerformClick();
e.Handled = true;
}
}
if (stopButton1.ButtonShortcut != Keys.None)
{
if ((e.KeyCode | e.Modifiers) == stopButton1.ButtonShortcut)
{
stopButton1.PerformClick();
e.Handled = true;
}
}
}
두가지 방식을 테스트 해보면 어떤 차이점이 있는지 금방 알 수 있을겁니다^^
혹시라도 문제가 있다면 커뮤니티의 질문과 답변 게시판을 이용해주세요~
첨부파일
-
Form1.zip (1.1K)
7회 다운로드 | DATE : 2020-06-28 09:51:18
- 이전글디자이너에서 메뉴 만들기 20.07.03
- 다음글디자이너 플레이 시간 표시하는 방법. 20.06.20