win32 key_released fix

This commit is contained in:
Nishi 2026-09-27 12:40:30 +09:00
commit ec197c1a1b

View file

@ -265,7 +265,9 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
if(HIBYTE(VkKeyScan(wp)) & 2) n |= MwKEY_CONTROL_FLAG;
if(msg == WM_SYSCHAR) n |= MwKEY_ALT_FLAG;
if((0x20 <= n && n <= 0x7f) || (n & MwKEY_FLAG)) MwLLDispatch(u->ll, key, &n);
if((0x20 <= n && n <= 0x7f) || (n & MwKEY_FLAG)) {
MwLLDispatch(u->ll, key, &n);
}
break;
}
case WM_SETFOCUS:
@ -322,6 +324,17 @@ static LRESULT CALLBACK wndproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
break;
}
if(n == -1 && (msg == WM_KEYUP || msg == WM_SYSKEYUP)) {
WORD ch;
BYTE state[256];
GetKeyboardState(state);
if(ToAscii(wp, HIWORD(lp) & 0xff, state, &ch, 0)) {
n = ch;
}
}
if((msg == WM_SYSKEYDOWN || msg == WM_SYSKEYUP) && n != -1 && wp != VK_MENU) {
n |= MwKEY_ALT_FLAG;
}