MFC/MFC 코드기록
IME 입력 상태(한글 모드)에서 Virtual-key code 읽기
lwj789
2023. 2. 21. 10:50
한글 입력모드에서 입력을 하고 있으면, WM_KEYDOWN의 wParam이 VK code가 올라 오지 않고, VK_PROCESSKEY가 올라온다.
scan code는 WM_KEYDOWN message의 lParam의 16~23 bit (8bit)인데, 이를 "MapVirtualKey()"함수를 사용해서 virtual key code를 얻을 수 있다.
핵심 코드
int scan = (lParam >> 16) & 0xff;
int vkcode = ::MapVirtualKey(scan, MAPVK_VSC_TO_VK_EX);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
BOOL CTESTDlg::PreTranslateMessage(MSG *pMsg)
{
// 코드 에디트로 전달되는 키 메시지는 직접 처리한다. 이 루틴이 있어야지
// 키 입력시에 오류 소리가 발생하지 않는다.
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_PROCESSKEY)
{
int scan = 0;
int vkcode = 0;
scan = (pMsg->lParam >> 16) & 0xff;
vkcode = ::MapVirtualKey(scan, MAPVK_VSC_TO_VK_EX);
pMsg->wParam = vkcode;
}
}
}
|
cs |