반응형
MFC 프로그램에서 마우스 클릭 또는 키보드로 선택한 UI컨트롤에 대한 타입을 확인할 수 있습니다.
# 개발 환경
운영체제 : Windows 10 Pro 64bit
개발도구 : Visual Studio 2013 Professional
# 필요 함수
# 결과
- 키보드로 스페이스(space) 또는 엔터(return)으로 조작
- Tab 키로 UI컨트롤 포커스(focus)를 이동하면서 checkBox 또는 Button 에 키보드 키를 누릅니다.
# 예제 소스
- PreTranslateMessage(MSG* pMsg)
BOOL CMFCApplication2013Dlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN) // 키를 누를 경우
{
if((pMsg->wParam==VK_SPACE) || (pMsg->wParam==VK_RETURN)) // 스페이스바 또는 엔터 누를 경우
{
UINT uiType = GetWindowLong(pMsg->hwnd, GWL_STYLE) & 0x0000000F; // 컨트롤 타입 값 반환
if (uiType == BS_CHECKBOX || uiType == BS_AUTOCHECKBOX) printf("clicked checkBox\n");
else if(uiType == BS_PUSHBUTTON || uiType == BS_DEFPUSHBUTTON) printf("clicked button\n");
}
}
return CDialogEx::PreTranslateMessage(pMsg);
}
- pMsg->message 로 키의 상태를 알 수 있음. (WM_KEYDOWN = 키 누름) → (LINK : 윈도우메시지 보기)
- pMsg->wParam 로 입력한 키 정보를 알 수 있음 (VK_SPACE = 스페이스바 / VK_RETURN = 엔터) → (LINK : 가상 키 보기)
- GetWindowLong(pMsg->hwnd, GWL_STYLE) 로 통해 UI컨트롤 타입을 알 수 있음.
- if문 BS_(UI컨트롤 종류)로 반환된 UI컨트롤에 따른 코드를 수행할 수 있음. → (LINK : BS 종류 보기)
감사합니다.
잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다.
반응형
'GUI > C++ MFC' 카테고리의 다른 글
[C++/MFC] UI 컨트롤 ID 포커스 설정하기 (0) | 2022.03.20 |
---|---|
[C++/MFC] 윈도우 및 다이얼로그 위치 지정하기(GetSystemMetrics) (0) | 2022.03.19 |
[C++/MFC] 키보드 키 조합 입력 이벤트 처리(PreTranslateMessage) (0) | 2022.03.15 |
[C++/MFC] 마우스, 키보드 입력 이벤트 호출하기(PreTranslateMessage) (0) | 2022.03.12 |
[C++/MFC] Visual Studio MFC 프로젝트 만들기 (5 step) (0) | 2022.03.03 |