컨트롤을 만들고 방향키를 눌러 특정 동작이 되도록 하고 싶었는데 그게 잘 안되었다.
결국 구글링을 했고 방법을 찾았다.
https://support.microsoft.com/en-us/kb/104637
골자는
UINT TestCtrl::OnGetDlgCode()
{
return DLGC_WANTARROWS | DLGC_WANTALLKEYS | DLGC_WANTCHARS;
}
WM_GETDLGCODE 라는 메시지가 올 때 위와 같이 TestCtrl는 dialog로부터 방향키, 모든키, char 를 받겠다는 의미다.
이렇게 수정하면 기본적으로 WM_KEYDOWN, WM_KEYUP 등의 메시지가 상속받은 window로 전달이 된다.
우선 이렇게 해서 기본 루틴을 이용할 수 있게 되었고
Focus는 어떻게 하는가.
일반적으로 control들은 click되었을 때 focus되기 때문에
WM_LBUTTONDOWN 메시지 받았을 때 SetFocus() 함수 호출하였다.
void TestCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
SetFocus();
CWnd::OnLButtonDown(nFlags, point);
}
이렇게 하여 결국은 focus되었을 때 키 이벤트를 처리할 수 있게 되었다.
'Windows' 카테고리의 다른 글
MFC, Popup context menu (0) | 2016.05.11 |
---|---|
Virtual list control (리스트 아이템 가상화?) (0) | 2016.04.21 |
Loading system icon (0) | 2016.04.20 |
Visual Studio : DLL 경로, 환경변수 설정 방법 (0) | 2014.06.19 |
Dos batch 예제1 (0) | 2013.08.23 |