Changeset 1005 for trunk/src


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

Location:
trunk/src/user32
Files:
6 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:
  • trunk/src/user32/win32dlg.cpp

    r985 r1005  
    1 /* $Id: win32dlg.cpp,v 1.2 1999-09-19 18:33:31 sandervl Exp $ */
     1/* $Id: win32dlg.cpp,v 1.3 1999-09-22 08:58:35 sandervl Exp $ */
    22/*
    33 * Win32 Dialog Code for OS/2
     
    918918}
    919919//******************************************************************************
    920 //TODO:
     920// GetNextDlgTabItem32   (USER32.276)
    921921//******************************************************************************
    922922HWND Win32Dialog::getNextDlgTabItem(HWND hwndCtrl, BOOL fPrevious)
    923923{
    924     return 0;
    925 }
    926 //******************************************************************************
    927 //TODO
     924 Win32BaseWindow *child, *nextchild, *lastchild;
     925 HWND retvalue;
     926
     927    if (hwndCtrl)
     928    {
     929        child = GetWindowFromHandle(hwndCtrl);
     930        if (!child)
     931        {
     932            retvalue = 0;
     933            goto END;
     934        }
     935        /* Make sure hwndCtrl is a top-level child */
     936        while ((child->getStyle() & WS_CHILD) && (child->getParent() != this))
     937        {
     938            child = child->getParent();
     939            if(child == NULL) break;
     940        }
     941
     942        if (!child || child->getParent() != this)
     943        {
     944            retvalue = 0;
     945            goto END;
     946        }
     947    }
     948    else
     949    {
     950        /* No ctrl specified -> start from the beginning */
     951        child = (Win32BaseWindow *)getFirstChild();
     952        if (!child)
     953        {
     954            retvalue = 0;
     955            goto END;
     956        }
     957
     958        if (!fPrevious)
     959        {
     960            while (child->getNextChild())
     961            {
     962                child = (Win32BaseWindow *)child->getNextChild();
     963            }
     964        }
     965    }
     966
     967    lastchild = child;
     968    nextchild = (Win32BaseWindow *)child->getNextChild();
     969    while (TRUE)
     970    {
     971        if (!nextchild) nextchild = (Win32BaseWindow *)getFirstChild();
     972
     973        if (child == nextchild) break;
     974
     975            if ((nextchild->getStyle() & WS_TABSTOP) && (nextchild->getStyle() & WS_VISIBLE) &&
     976            !(nextchild->getStyle() & WS_DISABLED))
     977            {
     978                lastchild = nextchild;
     979                if (!fPrevious) break;
     980            }
     981            nextchild = (Win32BaseWindow *)nextchild->getNextChild();
     982    }
     983    retvalue = lastchild->getWindowHandle();
     984
     985END:
     986    return retvalue;
     987}
     988//******************************************************************************
    928989//******************************************************************************
    929990Win32BaseWindow *Win32Dialog::getDlgItem(int id)
    930991{
     992    for (Win32BaseWindow *child = (Win32BaseWindow *)getFirstChild(); child; child = (Win32BaseWindow *)child->getNextChild())
     993    {
     994        if (child->getWindowId() == id)
     995        {
     996            return child;
     997        }
     998    }
    931999    return 0;
    9321000}
  • trunk/src/user32/win32wbase.cpp

    r1000 r1005  
    1 /* $Id: win32wbase.cpp,v 1.6 1999-09-21 17:05:36 dengert Exp $ */
     1/* $Id: win32wbase.cpp,v 1.7 1999-09-22 08:58:35 sandervl Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    898898        return SendInternalMessageA(WM_CHAR, cmd, lParam);
    899899    }
     900}
     901//******************************************************************************
     902//******************************************************************************
     903ULONG Win32BaseWindow::MsgKeyUp (ULONG repeatCount, ULONG scancode, ULONG virtualKey)
     904{
     905  ULONG lParam=0;
     906
     907    lParam = repeatCount & 0x0FFFF;                 // bit 0-15, repeatcount
     908    lParam |= (scancode & 0x0FF) << 16;             // bit 16-23, scancode
     909                                                    // bit 24, 1=extended key
     910                                                    // bit 25-28, reserved
     911    lParam |= 0 << 29;                              // bit 29, key is released, always 0 for WM_KEYUP ?? <- conflict according to the MS docs
     912    lParam |= 1 << 30;                              // bit 30, previous state, always 1 for a WM_KEYUP message
     913    lParam |= 1 << 31;                              // bit 31, transition state, always 1 for WM_KEYUP
     914
     915    dprintf(("WM_KEYUP: vkey:(%x) param:(%x)", virtualKey, lParam));
     916
     917    return SendInternalMessageA (WM_KEYUP, virtualKey, lParam);
     918}
     919//******************************************************************************
     920//******************************************************************************
     921ULONG Win32BaseWindow::MsgKeyDown (ULONG repeatCount, ULONG scancode, ULONG virtualKey, BOOL keyWasPressed)
     922{
     923  ULONG lParam=0;
     924
     925    lParam = repeatCount & 0x0FFFF;                 // bit 0-15, repeatcount
     926    lParam |= (scancode & 0x0FF) << 16;             // bit 16-23, scancode
     927                                                    // bit 24, 1=extended key
     928                                                    // bit 25-28, reserved
     929                                                    // bit 29, key is pressed, always 0 for WM_KEYDOWN ?? <- conflict according to the MS docs
     930    if (keyWasPressed)
     931        lParam |= 1 << 30;                          // bit 30, previous state, 1 means key was pressed
     932                                                    // bit 31, transition state, always 0 for WM_KEYDOWN
     933
     934    dprintf(("WM_KEYDOWN: vkey:(%x) param:(%x)", virtualKey, lParam));
     935
     936    return SendInternalMessageA (WM_KEYDOWN, virtualKey, lParam);
     937}
     938//******************************************************************************
     939//******************************************************************************
     940ULONG Win32BaseWindow::MsgSysKeyUp (ULONG repeatCount, ULONG scancode, ULONG virtualKey)
     941{
     942  ULONG lParam=0;
     943
     944    lParam = repeatCount & 0x0FFFF;                 // bit 0-15,repeatcount
     945    lParam |= (scancode & 0x0FF) << 16;             // bit 16-23, scancode
     946                                                    // bit 24, 1=extended key
     947                                                    // bit 25-28, reserved
     948    lParam |= 0 << 29;                              // bit 29, key is released, always 0 for WM_KEYUP ?? <- conflict according to the MS docs
     949    lParam |= 1 << 30;                              // bit 30, previous state, always 1 for a WM_KEYUP message
     950    lParam |= 1 << 31;                              // bit 31, transition state, always 1 for WM_KEYUP
     951
     952    dprintf(("WM_SYSKEYUP: vkey:(%x) param:(%x)", virtualKey, lParam));
     953
     954    return SendInternalMessageA (WM_SYSKEYUP, virtualKey, lParam);
     955}
     956//******************************************************************************
     957//******************************************************************************
     958ULONG Win32BaseWindow::MsgSysKeyDown (ULONG repeatCount, ULONG scancode, ULONG virtualKey, BOOL keyWasPressed)
     959{
     960 ULONG lParam=0;
     961
     962    lParam = repeatCount & 0x0FFFF;                 // bit 0-15, repeatcount
     963    lParam |= (scancode & 0x0FF) << 16;             // bit 16-23, scancode
     964                                                    // bit 24, 1=extended key
     965                                                    // bit 25-28, reserved
     966                                                    // bit 29, key is pressed, always 0 for WM_KEYDOWN ?? <- conflict according to the MS docs
     967    if (keyWasPressed)
     968        lParam |= 1 << 30;                          // bit 30, previous state, 1 means key was pressed
     969                                                    // bit 31, transition state, always 0 for WM_KEYDOWN
     970
     971    dprintf(("WM_SYSKEYDOWN: vkey:(%x) param:(%x)", virtualKey, lParam));
     972
     973    return SendInternalMessageA (WM_SYSKEYDOWN, virtualKey, lParam);
    900974}
    901975//******************************************************************************
  • trunk/src/user32/win32wbase.h

    r1000 r1005  
    1 /* $Id: win32wbase.h,v 1.3 1999-09-21 17:05:36 dengert Exp $ */
     1/* $Id: win32wbase.h,v 1.4 1999-09-22 08:58:36 sandervl Exp $ */
    22/*
    33 * Win32 Window Base Class for OS/2
     
    5151#define WM_WIN32_POSTMESSAGEW   0x4001
    5252
    53 class Win32BaseWindow : public GenericObject, protected ChildWindow
     53class Win32BaseWindow : public GenericObject, public ChildWindow
    5454{
    5555public:
     
    7878         ULONG  MsgSysCommand(ULONG win32sc, ULONG x, ULONG y);
    7979         ULONG  MsgChar(ULONG cmd, ULONG repeatcnt, ULONG scancode, ULONG vkey, ULONG keyflags);
     80         ULONG  MsgKeyUp (ULONG repeatCount, ULONG scancode, ULONG virtualKey);
     81         ULONG  MsgKeyDown (ULONG repeatCount, ULONG scancode, ULONG virtualKey, BOOL keyWasPressed);
     82         ULONG  MsgSysKeyUp (ULONG repeatCount, ULONG scancode, ULONG virtualKey);
     83         ULONG  MsgSysKeyDown (ULONG repeatCount, ULONG scancode, ULONG virtualKey, BOOL keyWasPressed);
    8084         ULONG  MsgButton(ULONG msg, ULONG ncx, ULONG ncy, ULONG clx, ULONG cly);
    8185         ULONG  MsgMouseMove(ULONG keystate, ULONG x, ULONG y);
  • trunk/src/user32/win32wndchild.h

    r949 r1005  
    1 /* $Id: win32wndchild.h,v 1.1 1999-09-15 23:19:02 sandervl Exp $ */
     1/* $Id: win32wndchild.h,v 1.2 1999-09-22 08:58:36 sandervl Exp $ */
    22/*
    33 * Win32 Child/Parent window class for OS/2
     
    2323virtual ~ChildWindow();
    2424
     25ChildWindow   *getFirstChild()                  { return children; };
     26ChildWindow   *getNextChild()                   { return nextchild; };
     27
    2528protected:
    2629
     
    3740        BOOL   RemoveChild(ChildWindow *child);
    3841
    39 ChildWindow   *getFirstChild()                  { return children; };
    40 ChildWindow   *getNextChild()                   { return nextchild; };
    4142        void   setNextChild(ChildWindow *child) { nextchild = child; };
    4243
  • trunk/src/user32/window.cpp

    r996 r1005  
    1 /* $Id: window.cpp,v 1.4 1999-09-21 08:24:05 sandervl Exp $ */
     1/* $Id: window.cpp,v 1.5 1999-09-22 08:58:36 sandervl Exp $ */
    22/*
    33 * Win32 window apis for OS/2
     
    690690{
    691691    dprintf(("USER32:  GetDesktopWindow\n"));
    692     return 0;
     692    return OSLIB_HWND_DESKTOP;
    693693}
    694694//******************************************************************************
Note: See TracChangeset for help on using the changeset viewer.