본문 바로가기

Windows

MFC Control Focusing & Arraw Keys

컨트롤을 만들고 방향키를 눌러 특정 동작이 되도록 하고 싶었는데 그게 잘 안되었다.

결국 구글링을 했고 방법을 찾았다.

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