반응형

 

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 종류 보기)

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형

+ Recent posts