Ignore:
Timestamp:
Sep 22, 1999, 10:58:36 AM (26 years ago)
Author:
sandervl
Message:

Rene Pronk's WM_(SYS)KEYUP/DOWN changes + SvL's dialog changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/pmwindow.cpp

    r1000 r1005  
    1 /* $Id: pmwindow.cpp,v 1.4 1999-09-21 17:05:36 dengert Exp $ */
     1/* $Id: pmwindow.cpp,v 1.5 1999-09-22 08:58:35 sandervl Exp $ */
    22/*
    33 * Win32 Window Managment Code for OS/2
     
    511511    case WM_CHAR:
    512512    {
     513        ULONG repeatCount=0, virtualKey=0, keyFlags=0, scanCode=0;
     514        ULONG flags = SHORT1FROMMP(mp1);
     515        BOOL keyWasPressed;
     516        char c;
     517        USHORT virtualKeyTable [66] = {
     518               0x00,    //   OS/2 VK         Win32 VK,    Entry 0 is not used
     519               0x01,    // VK_BUTTON1       VK_LBUTTON
     520               0x02,    // VK_BUTTON2       VK_RBUTTON
     521               0x04,    // VK_BUTTON3       VK_MBUTTON
     522               0x03,    // VK_BREAK         VK_CANCEL
     523               0x08,    // VK_BACKSPACE     VK_BACK
     524               0x09,    // VK_TAB           VK_TAB
     525               0x00,    // VK_BACKTAB       No equivalent!
     526               0x0D,    // VK_NEWLINE       VK_RETURN
     527               0x10,    // VK_SHIFT         VK_SHIFT
     528               0x11,    // VK_CTRL          VK_CONTROL
     529               0x12,    // VK_ALT           VK_MENU, best match I guess
     530               0x12,    // VK_ALTGRAF       VK_MENU, best match I guess
     531               0x13,    // VK_PAUSE         VK_PAUSE
     532               0x14,    // VK_CAPSLOCK      VK_CAPITAL
     533               0x1B,    // VK_ESC           VK_ESCAPE
     534               0x20,    // VK_SPACE         VK_SPACE
     535               0x00,    // VK_PAGEUP        No equivalent! At least, I think
     536               0x00,    // VK_PAGEDOWN      No equivalent! At least, I think
     537               0x23,    // VK_END           VK_END
     538               0x24,    // VK_HOME          VK_HOME
     539               0x25,    // VK_LEFT          VK_LEFT
     540               0x26,    // VK_UP            VK_UP
     541               0x27,    // VK_RIGHT         VK_RIGHT
     542               0x28,    // VK_DOWN          VK_DOWN
     543               0x2C,    // VK_PRINTSCRN     VK_SNAPSHOT
     544               0x2D,    // VK_INSERT        VK_INSERT
     545               0x2E,    // VK_DELETE        VK_DELETE
     546               0x91,    // VK_SCRLLOCK      VK_SCROLL
     547               0x90,    // VK_NUMLOCK       VK_NUMLOCK
     548               0x2B,    // VK_ENTER         VK_EXECUTE, best match I guess
     549               0x00,    // VK_SYSRQ         No equivalent!
     550               0x70,    // VK_F1            VK_F1
     551               0x71,    // VK_F2            VK_F2
     552               0x72,    // VK_F3            VK_F3
     553               0x73,    // VK_F4            VK_F4
     554               0x74,    // VK_F5            VK_F5
     555               0x75,    // VK_F6            VK_F6
     556               0x76,    // VK_F7            VK_F7
     557               0x77,    // VK_F8            VK_F8
     558               0x78,    // VK_F9            VK_F9
     559               0x79,    // VK_F10           VK_F10
     560               0x7A,    // VK_F11           VK_F11
     561               0x7B,    // VK_F12           VK_F12
     562               0x7C,    // VK_F13           VK_F13
     563               0x7D,    // VK_F14           VK_F14
     564               0x7E,    // VK_F15           VK_F15
     565               0x7F,    // VK_F16           VK_F16
     566               0x80,    // VK_F17           VK_F17
     567               0x81,    // VK_F18           VK_F18
     568               0x82,    // VK_F19           VK_F19
     569               0x83,    // VK_F20           VK_F20
     570               0x84,    // VK_F21           VK_F21
     571               0x85,    // VK_F22           VK_F22
     572               0x86,    // VK_F23           VK_F23
     573               0x87,    // VK_F24           VK_F24
     574               0x00,    // VK_ENDDRAG       No equivalent!
     575               0x0C,    // VK_CLEAR         VK_CLEAR
     576               0xF9,    // VK_EREOF         VK_EREOF
     577               0xFD,    // VK_PA1           VK_PA1
     578               0xF6,    // VK_ATTN          VK_ATTN
     579               0xF7,    // VK_CRSEL         VK_CRSEL
     580               0xF8,    // VK_EXSEL         VK_EXSEL
     581               0x00,    // VK_COPY          No equivalent!
     582               0x00,    // VK_BLK1          No equivalent!
     583               0x00};   // VK_BLK2          No equivalent!
     584
     585
     586        repeatCount = SHORT2FROMMP (mp1) >> 8;
     587        scanCode = SHORT2FROMMP (mp1) & 255;
     588        keyWasPressed = ((SHORT1FROMMP (mp1) & KC_PREVDOWN) == KC_PREVDOWN);
     589
     590        // both WM_KEYUP & WM_KEYDOWN want a virtual key, find the right Win32 virtual key
     591        // given the OS/2 virtual key and OS/2 character
     592
     593        if (((SHORT1FROMMP (mp1) & KC_CHAR) == KC_CHAR) ||
     594            ((SHORT1FROMMP (mp1) & KC_LONEKEY) == KC_LONEKEY))
     595        {
     596            c = SHORT1FROMMP (mp2);
     597            if ((c >= 'A') && (c <= 'Z')) {
     598                virtualKey = c;
     599                goto VirtualKeyFound;
     600            }
     601            if ((c >='a') && (c <= 'z')) {
     602                virtualKey = c - 32;   // make it uppercase
     603                goto VirtualKeyFound;
     604            }
     605            if ((c >= '0') && (c <= '9')) {
     606                virtualKey = c;
     607                goto VirtualKeyFound;
     608            }
     609        }
     610
     611        // convert OS/2 virtual keys to Win32 virtual key
     612        if (SHORT2FROMMP (mp2) <= VK_BLK2)
     613            virtualKey = virtualKeyTable [SHORT2FROMMP (mp2)];
     614
     615VirtualKeyFound:
     616
     617        if ((WinGetKeyState (HWND_DESKTOP, VK_ALT) & 0x8000) == 0)
     618        {
     619            //
     620            // the Alt key is not pressed
     621            //
     622            if ((flags & KC_KEYUP) == KC_KEYUP) {
     623                // send WM_KEYUP message
     624
     625                if(win32wnd->MsgKeyUp (repeatCount, scanCode, virtualKey)) {
     626                    goto RunDefWndProc;
     627                }
     628            }
     629            else {
     630                // send WM_KEYDOWN message
     631                if (win32wnd->MsgKeyDown (repeatCount, scanCode, virtualKey, keyWasPressed))
     632                    goto RunDefWndProc;
     633            }
     634        }
     635        else {
     636            //
     637            // the Alt key is pressed
     638            //
     639            if ((flags & KC_KEYUP) == KC_KEYUP) {
     640                // send WM_SYSKEYUP message
     641
     642                if(win32wnd->MsgSysKeyUp (repeatCount, scanCode, virtualKey)) {
     643                    goto RunDefWndProc;
     644                }
     645            }
     646            else {
     647                // send WM_SYSKEYDOWN message
     648                if (win32wnd->MsgSysKeyDown (repeatCount, scanCode, virtualKey, keyWasPressed))
     649                    goto RunDefWndProc;
     650            }
     651        }
     652
     653        break;
     654    }
     655#if 0
     656    case WM_CHAR:
     657    {
    513658     ULONG keyflags = 0, vkey = 0;
    514659     ULONG fl = SHORT1FROMMP(mp1);
     
    538683        break;
    539684    }
     685#endif
    540686    case WM_INITMENU:
    541687    case WM_MENUSELECT:
Note: See TracChangeset for help on using the changeset viewer.