- Timestamp:
- Feb 16, 2003, 7:29:05 PM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/pmkbdhk/pmkbdhk.cpp
r7864 r9813 1 /* $Id: pmkbdhk.cpp,v 1. 3 2002-02-11 13:45:33sandervl Exp $ */1 /* $Id: pmkbdhk.cpp,v 1.4 2003-02-16 18:29:05 sandervl Exp $ */ 2 2 /* 3 3 * OS/2 native Presentation Manager hooks … … 473 473 case PMSCAN_PRINT: 474 474 case PMSCAN_ALTLEFT: 475 case PMSCAN_ALTRIGHT:476 475 case PMSCAN_SCROLLLOCK: 477 476 case PMSCAN_ENTER: … … 487 486 488 487 break; 488 489 // 490 // AltGr needs special handling 491 // 492 // AltGr -> WM_KEYDOWN (VK_CONTROL), WM_KEYDOWN (VK_MENU) 493 // WM_SYSKEYUP (VK_CONTROL) 494 // WM_KEYUP (VK_MENU) 495 // 496 // Ctrl+AltGr -> WM_KEYDOWN (VK_CONTROL), WM_KEYUP (VK_CONTROL) 497 // WM_KEYDOWN (VK_CONTROL) 498 // WM_KEYDOWN (VK_MENU) 499 // WM_KEYUP (VK_MENU) 500 // WM_KEYUP (VK_CONTROL) 501 // 502 // AltGr+Ctrl -> WM_KEYDOWN (VK_CONTROL), WM_KEYDOWN (VK_MENU) 503 // WM_KEYDOWN (VK_CONTROL) 504 // WM_SYSKEYUP (VK_CONTROL) 505 // WM_SYSKEYUP (VK_CONTROL) 506 // WM_KEYUP (VK_MENU) 507 // 508 // AltGr down -> if Ctrl down, send WM_KEYUP (VK_CONTROL) 509 // endif 510 // Send WM_KEYDOWN (VK_CONTROL) 511 // Send WM_KEYDOWN (VK_MENU) 512 // AltGr up -> if !(Ctrl down before AltGr was pressed || Ctrl up) 513 // Send WM_SYSKEYUP (VK_CONTROL) 514 // endif 515 // Send WM_KEYDOWN (VK_MENU) 516 // 517 // NOTE: Ctrl = Ctrl-Left; AltGr doesn't care about the right Ctrl key 518 // 519 case PMSCAN_ALTRIGHT: 520 { 521 QMSG msg = *pqmsg; 522 ULONG ctrlstate; 523 ULONG flags; 524 ULONG mp1, mp2; 525 526 flags = SHORT1FROMMP(pqmsg->mp1); 527 528 pqmsg->msg = WM_CHAR_SPECIAL; 529 530 if(flags & KC_KEYUP) 531 {//AltGr up 532 ctrlstate = WinGetPhysKeyState(HWND_DESKTOP, PMSCAN_CTRLLEFT); 533 if(!(ctrlstate & 0x8000)) 534 {//ctrl is up, translate this message to Ctrl key up 535 mp1 = (PMSCAN_CTRLLEFT << 24); //scancode 536 mp1 |= (1 << 16); //repeat count 537 mp1 |= (KC_ALT | KC_KEYUP | KC_VIRTUALKEY | KC_SCANCODE); 538 mp2 = (VK_CTRL << 16); //virtual keycode 539 pqmsg->msg = WM_CHAR_SPECIAL_ALTGRCONTROL; 540 pqmsg->mp1 = (MPARAM)mp1; 541 pqmsg->mp2 = (MPARAM)mp2; 542 543 //and finally, post the AltGr WM_CHAR message 544 WinPostMsg(msg.hwnd, WM_CHAR_SPECIAL, msg.mp1, msg.mp2); 545 } 546 //else do nothing 547 } 548 else 549 {//AltGr down 550 ctrlstate = WinGetPhysKeyState(HWND_DESKTOP, PMSCAN_CTRLLEFT); 551 if(ctrlstate & 0x8000) 552 {//ctrl is down, translate this message to Ctrl key up 553 mp1 = (PMSCAN_CTRLLEFT << 24); //scancode 554 mp1 |= (1 << 16); //repeat count 555 mp1 |= (KC_KEYUP | KC_VIRTUALKEY | KC_SCANCODE); 556 mp2 = (VK_CTRL << 16); //virtual keycode 557 pqmsg->msg = WM_CHAR_SPECIAL_ALTGRCONTROL; 558 pqmsg->mp1 = (MPARAM)mp1; 559 pqmsg->mp2 = (MPARAM)mp2; 560 } 561 //send left control key down message 562 mp1 = (PMSCAN_CTRLLEFT << 24); //scancode 563 mp1 |= (1 << 16); //repeat count 564 mp1 |= (KC_CTRL | KC_VIRTUALKEY | KC_SCANCODE); 565 mp2 = (VK_CTRL << 16); //virtual keycode 566 567 if(ctrlstate & 0x8000) 568 {//ctrl is down, must post this message 569 WinPostMsg(msg.hwnd, WM_CHAR_SPECIAL_ALTGRCONTROL, (MPARAM)mp1, (MPARAM)mp2); 570 } 571 else 572 {//translate this message into control key down 573 pqmsg->msg = WM_CHAR_SPECIAL_ALTGRCONTROL; 574 pqmsg->mp1 = (MPARAM)mp1; 575 pqmsg->mp2 = (MPARAM)mp2; 576 } 577 //and finally, post the AltGr WM_CHAR message 578 WinPostMsg(msg.hwnd, WM_CHAR_SPECIAL, msg.mp1, msg.mp2); 579 } 580 break; 581 } 582 489 583 } 490 584 }
Note:
See TracChangeset
for help on using the changeset viewer.