Ignore:
Timestamp:
Jul 25, 1999, 5:51:57 PM (26 years ago)
Author:
sandervl
Message:

Lots of changes; Solitaire now starts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/new/win32wnd.cpp

    r391 r392  
    1 /* $Id: win32wnd.cpp,v 1.21 1999-07-25 09:19:22 sandervl Exp $ */
     1/* $Id: win32wnd.cpp,v 1.22 1999-07-25 15:51:56 sandervl Exp $ */
    22/*
    33 * Win32 Window Code for OS/2
     
    3131#include <oslibres.h>
    3232#include <winres.h>
     33#include "syscolor.h"
    3334
    3435#define HAS_DLGFRAME(style,exStyle) \
     
    6061{
    6162  isUnicode        = FALSE;
    62 
    63   windowName       = NULL;
     63  fCreated         = FALSE;
     64
     65  memset(windowNameA, 0, MAX_WINDOW_NAMELENGTH);
     66  memset(windowNameW, 0, MAX_WINDOW_NAMELENGTH*sizeof(WCHAR));
    6467  wndNameLength    = 0;
    65 
    66   windowText       = NULL;;
    67   wndTextLength    = 0;
    6868
    6969  userWindowLong   = NULL;;
     
    115115  if(Win32Hwnd)
    116116        HMHandleFree(Win32Hwnd & 0xFFFF);
    117   if(windowName)
    118         free(windowName);
    119   if(windowText)
    120         free(windowText);
    121117  if(userWindowLong)
    122118        free(userWindowLong);
     
    248244  if ((cs->style & WS_CHILD) && cs->hwndParent)
    249245  {
    250     SetParent(cs->hwndParent);
     246        SetParent(cs->hwndParent);
    251247  }
    252248  else
    253249  {
    254250        if (!cs->hwndParent) {
    255                 owner = NULL;
     251            owner = NULL;
    256252        }
    257253        else
    258254        {
    259         owner = GetWindowFromHandle(cs->hwndParent);
    260                 if(owner == NULL)
    261                 {
    262                         dprintf(("HMHandleTranslateToOS2 couldn't find owner window %x!!!", cs->hwndParent));
    263                         return FALSE;
    264                 }
     255            owner = GetWindowFromHandle(cs->hwndParent);
     256            if(owner == NULL)
     257            {
     258                dprintf(("HMHandleTranslateToOS2 couldn't find owner window %x!!!", cs->hwndParent));
     259                return FALSE;
     260            }
    265261        }
    266262  }
     
    361357        return FALSE;
    362358  }
     359
    363360  if(OSLibWinSetWindowULong(OS2Hwnd, OFFSET_WIN32WNDPTR, (ULONG)this) == FALSE) {
    364361        dprintf(("WM_CREATE: WinSetWindowULong %X failed!!", OS2Hwnd));
     
    412409        if( (SendInternalMessage(WM_CREATE, 0, (LPARAM)cs )) != -1 )
    413410        {
     411            if(!(flags & WIN_NEED_SIZE)) {
     412                SendMessageA(WM_SIZE, SIZE_RESTORED,
     413                                MAKELONG(rectClient.right-rectClient.left,
     414                                         rectClient.bottom-rectClient.top));
     415                SendMessageA(WM_MOVE, 0, MAKELONG( rectClient.left, rectClient.top ) );
     416            }
    414417            SetWindowPos(HWND_TOP, rectClient.left, rectClient.top,
    415418                         rectClient.right-rectClient.left,
    416419                         rectClient.bottom-rectClient.top,
    417420                         SWP_NOACTIVATE);
    418 
    419421            if (cs->style & WS_VISIBLE) ShowWindow( sw );
    420422
     
    425427                HOOK_CallHooks16( WH_SHELL, HSHELL_WINDOWCREATED, hwnd, 0 );
    426428#endif
     429            fCreated = TRUE;
    427430            SetLastError(0);
    428431            return TRUE;
     
    606609                                   MinMax.ptMinTrackSize.y );
    607610
    608     if (maxSize) *maxSize = MinMax.ptMaxSize;
    609     if (maxPos) *maxPos = MinMax.ptMaxPosition;
    610     if (minTrack) *minTrack = MinMax.ptMinTrackSize;
    611     if (maxTrack) *maxTrack = MinMax.ptMaxTrackSize;
     611    if (maxSize)    *maxSize = MinMax.ptMaxSize;
     612    if (maxPos)     *maxPos  = MinMax.ptMaxPosition;
     613    if (minTrack)   *minTrack = MinMax.ptMinTrackSize;
     614    if (maxTrack)   *maxTrack = MinMax.ptMaxTrackSize;
    612615}
    613616/***********************************************************************
     
    619622 * when calcValidRect is TRUE.
    620623 */
    621 LONG Win32Window::SendNCCalcSize(BOOL calcValidRect,
    622                             RECT *newWindowRect, RECT *oldWindowRect,
    623                             RECT *oldClientRect, WINDOWPOS *winpos,
    624                             RECT *newClientRect )
     624LONG Win32Window::SendNCCalcSize(BOOL calcValidRect, RECT *newWindowRect, RECT *oldWindowRect,
     625                                 RECT *oldClientRect, WINDOWPOS *winpos,
     626                                 RECT *newClientRect )
    625627{
    626628   NCCALCSIZE_PARAMS params;
     
    632634   {
    633635        winposCopy = *winpos;
    634     params.rgrc[1] = *oldWindowRect;
    635     params.rgrc[2] = *oldClientRect;
    636     params.lppos = &winposCopy;
     636        params.rgrc[1] = *oldWindowRect;
     637        params.rgrc[2] = *oldClientRect;
     638        params.lppos = &winposCopy;
    637639   }
    638640   result = SendInternalMessageA(WM_NCCALCSIZE, calcValidRect,
     
    723725 WORD fwSizeType = 0;
    724726
     727    if(fCreated == FALSE) {//Solitaire crashes if it receives a WM_SIZE during CreateWindowEx (normal or our fault?)
     728        return 1;
     729    }
     730
    725731    if(fMinimize) {
    726732            fwSizeType = SIZE_MINIMIZED;
     
    747753}
    748754//******************************************************************************
    749 //TODO: virtual key translation & extended keyboard bit
     755//TODO: virtual key & (possibly) scancode translation, extended keyboard bit & Unicode
    750756//******************************************************************************
    751757ULONG Win32Window::MsgChar(ULONG cmd, ULONG repeatcnt, ULONG scancode, ULONG vkey, ULONG keyflags)
     
    761767    if(keyflags & KEY_UP)
    762768        lParam |= (1<<31);
    763     dprintf(("WM_CHAR: %x %x %08x", OS2Hwnd, cmd, lParam));
    764     return SendInternalMessageA(WM_CHAR, cmd, lParam);
     769    if(keyflags & KEY_DEADKEY) {
     770        dprintf(("WM_DEADCHAR: %x %x %08x", OS2Hwnd, cmd, lParam));
     771        return SendInternalMessageA(WM_DEADCHAR, cmd, lParam);
     772    }
     773    else {
     774        dprintf(("WM_CHAR: %x %x %08x", OS2Hwnd, cmd, lParam));
     775        return SendInternalMessageA(WM_CHAR, cmd, lParam);
     776    }
    765777}
    766778//******************************************************************************
     
    832844ULONG Win32Window::MsgMouseMove(ULONG keystate, ULONG x, ULONG y)
    833845{
    834 ULONG winstate = 0;
    835 
    836   if(keystate & WMMOVE_LBUTTON)
    837     winstate |= MK_LBUTTON;
    838   if(keystate & WMMOVE_RBUTTON)
    839     winstate |= MK_RBUTTON;
    840   if(keystate & WMMOVE_MBUTTON)
    841     winstate |= MK_MBUTTON;
    842   if(keystate & WMMOVE_SHIFT)
    843     winstate |= MK_SHIFT;
    844   if(keystate & WMMOVE_CTRL)
    845     winstate |= MK_CONTROL;
    846 
    847    return SendInternalMessageA(WM_MOUSEMOVE, keystate, MAKELONG(x, y));
     846 ULONG winstate = 0;
     847
     848    if(keystate & WMMOVE_LBUTTON)
     849        winstate |= MK_LBUTTON;
     850    if(keystate & WMMOVE_RBUTTON)
     851        winstate |= MK_RBUTTON;
     852    if(keystate & WMMOVE_MBUTTON)
     853        winstate |= MK_MBUTTON;
     854    if(keystate & WMMOVE_SHIFT)
     855        winstate |= MK_SHIFT;
     856    if(keystate & WMMOVE_CTRL)
     857        winstate |= MK_CONTROL;
     858
     859    return SendInternalMessageA(WM_MOUSEMOVE, keystate, MAKELONG(x, y));
    848860}
    849861//******************************************************************************
     
    851863ULONG Win32Window::MsgPaint(ULONG tmp1, ULONG tmp2)
    852864{
    853   return SendInternalMessageA(WM_PAINT, 0, 0);
     865    return SendInternalMessageA(WM_PAINT, 0, 0);
    854866}
    855867//******************************************************************************
     
    866878ULONG Win32Window::MsgSetText(LPSTR lpsz, LONG cch)
    867879{
    868   if(isUnicode) {
    869         return SendInternalMessageW(WM_SETTEXT, 0, (LPARAM)lpsz);
    870   }
    871   else  return SendInternalMessageA(WM_SETTEXT, 0, (LPARAM)lpsz);
     880    if(isUnicode) {
     881            return SendInternalMessageW(WM_SETTEXT, 0, (LPARAM)lpsz);
     882    }
     883    else    return SendInternalMessageA(WM_SETTEXT, 0, (LPARAM)lpsz);
     884}
     885//******************************************************************************
     886//TODO: in- or excluding terminating 0?
     887//******************************************************************************
     888ULONG Win32Window::MsgGetTextLength()
     889{
     890    return SendInternalMessageA(WM_GETTEXTLENGTH, 0, 0);
     891}
     892//******************************************************************************
     893//******************************************************************************
     894char *Win32Window::MsgGetText()
     895{
     896    if(isUnicode) {
     897        SendInternalMessageW(WM_GETTEXT, MAX_WINDOW_NAMELENGTH, (LPARAM)windowNameW);
     898    }
     899    else {
     900        SendInternalMessageA(WM_GETTEXT, MAX_WINDOW_NAMELENGTH, (LPARAM)windowNameA);
     901    }
     902    return windowNameA;
     903}
     904//******************************************************************************
     905//******************************************************************************
     906LRESULT Win32Window::DefWindowProcA(UINT Msg, WPARAM wParam, LPARAM lParam)
     907{
     908    switch(Msg)
     909    {
     910    case WM_GETTEXTLENGTH:
     911        return wndNameLength;
     912
     913    case WM_GETTEXT:   //TODO: SS_ICON controls
     914        strncpy((LPSTR)lParam, windowNameA, wParam);
     915        return min(wndNameLength, wParam);
     916
     917    case WM_SETTEXT:
     918        return 0;
     919
     920    case WM_SETREDRAW:
     921        if(wParam)
     922                SetWindowLongA (GWL_STYLE, GetWindowLongA (GWL_STYLE) | WS_VISIBLE);
     923        else    SetWindowLongA (GWL_STYLE, GetWindowLongA (GWL_STYLE) & ~WS_VISIBLE);
     924
     925        return 0; //TODO
     926
     927    case WM_NCCREATE:
     928        return(TRUE);
     929
     930    case WM_CTLCOLORMSGBOX:
     931    case WM_CTLCOLOREDIT:
     932    case WM_CTLCOLORLISTBOX:
     933    case WM_CTLCOLORBTN:
     934    case WM_CTLCOLORDLG:
     935    case WM_CTLCOLORSTATIC:
     936    case WM_CTLCOLORSCROLLBAR:
     937         SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
     938         SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
     939         return GetSysColorBrush(COLOR_BTNFACE);
     940
     941    case WM_PARENTNOTIFY:
     942        return 0;
     943
     944    case WM_MOUSEACTIVATE:
     945    {
     946        DWORD dwStyle = GetWindowLongA(GWL_STYLE);
     947        DWORD dwExStyle = GetWindowLongA(GWL_EXSTYLE);
     948        dprintf(("DefWndProc: WM_MOUSEACTIVATE for %x Msg %s", Win32Hwnd, GetMsgText(HIWORD(lParam))));
     949        if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) )
     950        {
     951            if(getParent()) {
     952                LRESULT rc = getParent()->SendMessageA(WM_MOUSEACTIVATE, wParam, lParam );
     953                if(rc)  return rc;
     954            }
     955        }
     956        return (LOWORD(lParam) == HTCAPTION) ? MA_NOACTIVATE : MA_ACTIVATE;
     957    }
     958    case WM_SETCURSOR:
     959    {
     960        DWORD dwStyle = GetWindowLongA(GWL_STYLE);
     961        DWORD dwExStyle = GetWindowLongA(GWL_EXSTYLE);
     962        dprintf(("DefWndProc: WM_SETCURSOR for %x Msg %s", Win32Hwnd, GetMsgText(HIWORD(lParam))));
     963        if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) )
     964        {
     965            if(getParent()) {
     966                LRESULT rc = getParent()->SendMessageA(WM_SETCURSOR, wParam, lParam);
     967                if(rc)  return rc;
     968            }
     969        }
     970        return 1;
     971    }
     972    case WM_MOUSEMOVE:
     973        return 0;
     974
     975    case WM_ERASEBKGND:
     976    case WM_ICONERASEBKGND:
     977        return 0;
     978
     979    case WM_NCLBUTTONDOWN:
     980    case WM_NCLBUTTONUP:
     981    case WM_NCLBUTTONDBLCLK:
     982    case WM_NCRBUTTONUP:
     983    case WM_NCRBUTTONDOWN:
     984    case WM_NCRBUTTONDBLCLK:
     985    case WM_NCMBUTTONDOWN:
     986    case WM_NCMBUTTONUP:
     987    case WM_NCMBUTTONDBLCLK:
     988        return 0;           //TODO: Send WM_SYSCOMMAND if required
     989
     990    case WM_NCHITTEST: //TODO:
     991        return 0;
     992
     993    default:
     994        return 1;
     995    }
     996}
     997//******************************************************************************
     998//******************************************************************************
     999LRESULT Win32Window::DefWindowProcW(UINT Msg, WPARAM wParam, LPARAM lParam)
     1000{
     1001    switch(Msg)
     1002    {
     1003    case WM_GETTEXTLENGTH:
     1004        return wndNameLength;
     1005
     1006    case WM_GETTEXT:   //TODO: SS_ICON controls
     1007        lstrcpynW((LPWSTR)lParam, windowNameW, wParam);
     1008        return min(wndNameLength, wParam);
     1009
     1010    default:
     1011        return DefWindowProcA(Msg, wParam, lParam);
     1012    }
    8721013}
    8731014//******************************************************************************
     
    8971038                return(0);
    8981039        }
     1040        case WM_SETTEXT: //TODO: Nothing happens if passed to DefWindowProc
     1041                return win32wndproc(getWindowHandle(), WM_SETTEXT, wParam, lParam);
     1042
    8991043        case WM_LBUTTONDOWN:
    9001044        case WM_MBUTTONDOWN:
     
    9371081                return(1);
    9381082        }
     1083        case WM_SETTEXT: //TODO: Nothing happens if passed to DefWindowProc
     1084                return win32wndproc(getWindowHandle(), WM_SETTEXT, wParam, lParam);
     1085
    9391086        case WM_LBUTTONDOWN:
    9401087        case WM_MBUTTONDOWN:
     
    11001247 Win32Resource *winres = (Win32Resource *)hMenu;
    11011248
     1249    dprintf(("SetMenu %x", hMenu));
    11021250    if(HIWORD(winres) == 0) {
    11031251        dprintf(("Win32Window:: Win32Resource *winres == 0"));
    1104     SetLastError(ERROR_INVALID_PARAMETER);
     1252        SetLastError(ERROR_INVALID_PARAMETER);
    11051253        return FALSE;
    11061254    }
Note: See TracChangeset for help on using the changeset viewer.