Changeset 215 for trunk/src


Ignore:
Timestamp:
Jun 26, 1999, 3:21:53 PM (26 years ago)
Author:
sandervl
Message:

Spy and window message changes

Location:
trunk/src/user32
Files:
1 added
2 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/Makefile

    r196 r215  
    1 # $Id: Makefile,v 1.8 1999-06-25 21:35:27 sandervl Exp $
     1# $Id: Makefile,v 1.9 1999-06-26 13:21:10 sandervl Exp $
    22
    33#
     
    2222
    2323OBJS =  user32.obj resstring.obj dialog.obj loadres.obj \
    24         wndproc.obj wndsubproc.obj wndclass.obj dde.obj \
     24        wndproc.obj wndclass.obj dde.obj \
    2525        dlgconvert.obj icon.obj hook.obj hooks.obj menu.obj \
    2626        usrcall.obj defwndproc.obj syscolor.obj char.obj initterm.obj \
    27         uitools.obj unknown.obj spy.obj
     27        uitools.obj unknown.obj spy.obj setwindow.obj
    2828
    2929
     
    4343
    4444user32.obj: user32.cpp $(PDWIN32_INCLUDE)\wndproc.h \
    45             $(PDWIN32_INCLUDE)\wndclass.h wndsubproc.h icon.h syscolor.h
     45            $(PDWIN32_INCLUDE)\wndclass.h icon.h syscolor.h
    4646resstring.obj: resstring.cpp resstring.h
    4747char.obj: char.cpp user32.h
     
    6464             $(PDWIN32_INCLUDE)\wndproc.h $(PDWIN32_INCLUDE)\wndclass.h \
    6565             dlgconvert.h hooks.h
    66 wndsubproc.obj: wndsubproc.cpp wndsubproc.h \
    67                 $(PDWIN32_INCLUDE)\wndproc.h
    6866wndclass.obj: wndclass.cpp \
    6967              $(PDWIN32_INCLUDE)\wndproc.h $(PDWIN32_INCLUDE)\wndclass.h
     
    7169uitools.obj: uitools.cpp
    7270unknown.obj: unknown.cpp
     71setwindow.obj: setwindow.cpp $(PDWIN32_INCLUDE)\wndproc.h $(PDWIN32_INCLUDE)\wndclass.h
    7372
    7473spy.obj: spy.cpp $(PDWIN32_INCLUDE)\spy.h
  • trunk/src/user32/defwndproc.cpp

    r140 r215  
    1 /* $Id: defwndproc.cpp,v 1.4 1999-06-21 00:48:57 buerkle Exp $ */
     1/* $Id: defwndproc.cpp,v 1.5 1999-06-26 13:21:11 sandervl Exp $ */
    22
    33/*
     
    1212#include "user32.h"
    1313#include "syscolor.h"
     14#include <wndproc.h>
     15
     16#ifdef DEBUG
     17char *GetMsgText(int Msg);
     18#endif
    1419
    1520//******************************************************************************
     
    4449                dprintf(("DefWndProc: WM_PARENTNOTIFY for %x", hwnd));
    4550                return 0;
     51
     52        case WM_MOUSEACTIVATE:
     53        {
     54                DWORD dwStyle = GetWindowLongA(hwnd, GWL_STYLE);
     55                dprintf(("DefWndProc: WM_MOUSEACTIVATE for %x Msg %s", hwnd, GetMsgText(HIWORD(lParam))));
     56                if (dwStyle & WS_CHILD)
     57                {
     58                        HWND hwndParent = GetParent(hwnd);
     59                        Win32WindowProc *parentwnd = Win32WindowProc::FindProc(hwndParent);
     60                        if(parentwnd) {
     61                                LRESULT rc = parentwnd->SendMessageA(hwndParent, WM_MOUSEACTIVATE, wParam, lParam );
     62                                if(rc)  return rc;
     63                        }
     64                }
     65                return (LOWORD(lParam) == HTCAPTION) ? MA_NOACTIVATE : MA_ACTIVATE;
     66        }
     67        case WM_SETCURSOR:
     68        {
     69                DWORD dwStyle = GetWindowLongA(hwnd, GWL_STYLE);
     70                dprintf(("DefWndProc: WM_SETCURSOR for %x Msg %s", hwnd, GetMsgText(HIWORD(lParam))));
     71                if (dwStyle & WS_CHILD)
     72                {
     73                        HWND hwndParent = GetParent(hwnd);
     74
     75                        Win32WindowProc *parentwnd = Win32WindowProc::FindProc(hwndParent);
     76                        if(parentwnd) {
     77                                LRESULT rc = parentwnd->SendMessageA(hwndParent, WM_SETCURSOR, wParam, lParam);
     78                                if(rc)  return rc;
     79                        }
     80                }
     81                return O32_DefWindowProc(hwnd, Msg, wParam, lParam);
     82        }
    4683        default:
    4784                return O32_DefWindowProc(hwnd, Msg, wParam, lParam);
  • trunk/src/user32/spy.cpp

    r196 r215  
    1 /* $Id: spy.cpp,v 1.1 1999-06-25 21:35:27 sandervl Exp $ */
     1/* $Id: spy.cpp,v 1.2 1999-06-26 13:21:12 sandervl Exp $ */
    22
    33/*
     
    7171}
    7272
    73 VOID PostSpyMessage(HWND hwnd, ULONG Msg, ULONG wParam, ULONG lParam)
     73BOOL PostSpyMessage(HWND hwnd, ULONG Msg, ULONG wParam, ULONG lParam)
    7474{
    7575 APIRET rc;
    7676
    7777   if (hqQueue == 0)
    78         return;
     78        return FALSE;
    7979   
    8080   pvdQMemory[msgIndex].hwnd   = hwnd;
     
    9191        hqQueue = 0; //give up, server probably died
    9292        dprintf(("PostSpyMessage: DosWriteQueue returned %d", rc));
    93         return;
     93        return FALSE;
    9494   }
    9595   if(++msgIndex >= MAX_MESSAGES)
     
    9797        msgIndex = 0;
    9898   }
     99   return TRUE;
    99100}
    100101
  • trunk/src/user32/user32.cpp

    r161 r215  
    1 /* $Id: user32.cpp,v 1.14 1999-06-23 16:36:56 achimha Exp $ */
     1/* $Id: user32.cpp,v 1.15 1999-06-26 13:21:12 sandervl Exp $ */
    22
    33/*
     
    2424#include "user32.h"
    2525#include "wndproc.h"
    26 #include "wndsubproc.h"
    2726#include "wndclass.h"
    2827#include "icon.h"
     
    639638 LRESULT rc;
    640639
    641 #ifdef DEBUG
     640#ifdef DEBUG1
    642641    WriteLog("USER32:  SendMessage....\n");
    643642#endif
    644643    rc = O32_SendMessage(arg1, arg2, arg3, arg4);
    645 #ifdef DEBUG
     644#ifdef DEBUG1
    646645    WriteLog("USER32:  *****SendMessage %X %X %X %X returned %d\n", arg1, arg2, arg3, arg4, rc);
    647646#endif
     
    952951//******************************************************************************
    953952//******************************************************************************
    954 LONG WIN32API GetWindowLongA(HWND hwnd, int nIndex)
    955 {
    956  LONG rc;
    957 
    958     if(nIndex == GWL_WNDPROC || nIndex == DWL_DLGPROC) {
    959 #ifdef DEBUG
    960         WriteLog("USER32:  GetWindowLong %X %d\n", hwnd, nIndex);
    961 #endif
    962         Win32WindowProc *window = Win32WindowProc::FindProc(hwnd);
    963         if(window && !(nIndex == DWL_DLGPROC && window->IsWindow() == TRUE)) {
    964                 return (LONG)window->GetWin32Callback();
    965         }
    966     }
    967     rc = O32_GetWindowLong(hwnd, nIndex);
    968     return(rc);
    969 }
    970 //******************************************************************************
    971 //******************************************************************************
    972953BOOL WIN32API SetDlgItemInt( HWND arg1, int arg2, UINT arg3, BOOL  arg4)
    973954{
     
    12301211#endif
    12311212
    1232     if(Win32WindowSubProc::FindSubProc((WNDPROC_O32)wndprcPrev) != NULL) {
    1233          WNDPROC_O32 orgprc = (WNDPROC_O32)wndprcPrev; //is original Open32 system class callback (_System)
    1234          return orgprc(arg2, arg3, arg4, arg5);
    1235     }
    1236     else return wndprcPrev(arg2, arg3, arg4, arg5);   //win32 callback (__stdcall)
     1213    return wndprcPrev(arg2, arg3, arg4, arg5);   //win32 callback (__stdcall)
    12371214}
    12381215//******************************************************************************
     
    23172294//******************************************************************************
    23182295//******************************************************************************
    2319 LONG WIN32API GetWindowLongW( HWND arg1, int  arg2)
    2320 {
    2321 #ifdef DEBUG
    2322     WriteLog("USER32:  GetWindowLongW\n");
    2323 #endif
    2324     return GetWindowLongA(arg1, arg2);   //class procedures..
    2325 }
    2326 //******************************************************************************
    2327 //******************************************************************************
    23282296BOOL WIN32API GetWindowPlacement( HWND arg1, LPWINDOWPLACEMENT arg2)
    23292297{
     
    23962364//******************************************************************************
    23972365//******************************************************************************
    2398 WORD WIN32API GetWindowWord( HWND arg1, int  arg2)
    2399 {
    2400 #ifdef DEBUG
    2401     WriteLog("USER32:  GetWindowWord\n");
    2402 #endif
    2403     return O32_GetWindowWord(arg1, arg2);
    2404 }
    2405 //******************************************************************************
    2406 //******************************************************************************
    24072366BOOL WIN32API HideCaret( HWND arg1)
    24082367{
     
    29132872//******************************************************************************
    29142873//******************************************************************************
    2915 LONG WIN32API SetWindowLongA(HWND hwnd, int nIndex, LONG  arg3)
    2916 {
    2917  LONG rc;
    2918 
    2919     dprintf(("USER32:  SetWindowLongA %X %d %X\n", hwnd, nIndex, arg3));
    2920     if(nIndex == GWL_WNDPROC || nIndex == DWL_DLGPROC) {
    2921         Win32WindowProc *wndproc = Win32WindowProc::FindProc(hwnd);
    2922         if(wndproc == NULL) {//created with system class and app wants to change the handler
    2923                 dprintf(("USER32:  SetWindowLong new WindowProc for system class\n"));
    2924                 wndproc = new Win32WindowProc((WNDPROC)arg3);
    2925                 wndproc->SetWindowHandle(hwnd);
    2926                 rc = O32_GetWindowLong(hwnd, nIndex);
    2927                 Win32WindowSubProc *subwndproc = new Win32WindowSubProc(hwnd, (WNDPROC_O32)rc);
    2928                 O32_SetWindowLong(hwnd, nIndex, (LONG)wndproc->GetOS2Callback());
    2929                 return((LONG)subwndproc->GetWin32Callback());
    2930         }
    2931         else {
    2932                 if(!(nIndex == DWL_DLGPROC && wndproc->IsWindow() == TRUE)) {
    2933                         rc = (LONG)wndproc->GetWin32Callback();
    2934                         dprintf(("USER32:  SetWindowLong change WindowProc %X to %X\n", rc, arg3));
    2935                         wndproc->SetWin32Callback((WNDPROC)arg3);
    2936                         return(rc);
    2937                 }
    2938                 //else window that accesses it's normal window data
    2939        }
    2940     }
    2941     return O32_SetWindowLong(hwnd, nIndex, arg3);
    2942 }
    2943 //******************************************************************************
    2944 //TODO: Is this always correct? (GWL_ID: window identifier??)
    2945 //******************************************************************************
    2946 LONG WIN32API SetWindowLongW(HWND arg1, int arg2, LONG  arg3)
    2947 {
    2948     dprintf(("USER32:  SetWindowLongW %X %d %X\n", arg1, arg2, arg3));
    2949     return SetWindowLongA(arg1, arg2, arg3);
    2950 }
    2951 //******************************************************************************
    2952 //******************************************************************************
    29532874BOOL WIN32API SetWindowPlacement( HWND arg1, const WINDOWPLACEMENT *  arg2)
    29542875{
     
    29672888   FreeAsciiString(astring);
    29682889   return(rc);
    2969 }
    2970 //******************************************************************************
    2971 //******************************************************************************
    2972 WORD WIN32API SetWindowWord( HWND arg1, int arg2, WORD  arg3)
    2973 {
    2974     dprintf(("USER32:  SetWindowWord\n"));
    2975     return O32_SetWindowWord(arg1, arg2, arg3);
    29762890}
    29772891//******************************************************************************
  • trunk/src/user32/wndclass.cpp

    r208 r215  
    1 /* $Id: wndclass.cpp,v 1.8 1999-06-26 08:25:22 sandervl Exp $ */
     1/* $Id: wndclass.cpp,v 1.9 1999-06-26 13:21:11 sandervl Exp $ */
    22
    33/*
     
    1616#include <os2win.h>
    1717#include <stdarg.h>
     18#include <stdio.h>
     19#include <string.h>
     20#include <stdlib.h>
    1821#include <assert.h>
    19 #include "misc.h"
    20 #include "user32.h"
    21 #include "wndproc.h"
    22 #include "wndclass.h"
     22#include <misc.h>
     23#include <wndproc.h>
     24#include <wndclass.h>
     25#include <nameid.h>
     26#include <spy.h>
    2327#include "hooks.h"
    24 #include <spy.h>
    2528
    2629//default window handlers that are registered by RegisterClass are called
     
    6467LRESULT WIN32API ButtonCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    6568{
     69 DWORD dwStyle, dwExStyle;
     70
     71  PostSpyMessage(hwnd, Msg, wParam, lParam);
    6672  switch(Msg)
    6773  {
     74        case WM_MOUSEACTIVATE:
     75                //Open32 sends an OS/2 window message for a button click
     76                if(HIWORD(lParam) == 0x71)  //WM_BUTTONCLICKFIRST
     77                {
     78                        lParam = (WM_LBUTTONDOWN << 16) | LOWORD(lParam);
     79                }
     80                dwStyle   = GetWindowLongA(hwnd, GWL_STYLE);
     81                dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE);
     82
     83                if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) )
     84                {
     85                        HWND hwndParent = GetParent(hwnd);
     86
     87                        Win32WindowProc *parentwnd = Win32WindowProc::FindProc(hwndParent);
     88                        if(parentwnd) {
     89                                LRESULT rc = parentwnd->SendMessageA(hwndParent, Msg, wParam, lParam);
     90                                if(rc) return TRUE;
     91                        }
     92                }
     93                break;
    6894        case WM_CREATE:
    6995        case WM_DESTROY:
     
    80106LRESULT WIN32API ListboxCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    81107{
     108  PostSpyMessage(hwnd, Msg, wParam, lParam);
    82109  return ListboxHandler(hwnd, Msg, wParam, lParam);
    83110}
     
    86113LRESULT WIN32API ComboboxCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    87114{
     115  PostSpyMessage(hwnd, Msg, wParam, lParam);
    88116  return ComboboxHandler(hwnd, Msg, wParam, lParam);
    89117}
     
    92120LRESULT WIN32API MdiClientCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    93121{
     122  PostSpyMessage(hwnd, Msg, wParam, lParam);
    94123  return MdiClientHandler(hwnd, Msg, wParam, lParam);
    95124}
     
    98127LRESULT WIN32API EditCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    99128{
     129  PostSpyMessage(hwnd, Msg, wParam, lParam);
    100130  return EditHandler(hwnd, Msg, wParam, lParam);
    101131}
     
    104134LRESULT WIN32API ScrollbarCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    105135{
     136  PostSpyMessage(hwnd, Msg, wParam, lParam);
    106137  return ScrollbarHandler(hwnd, Msg, wParam, lParam);
    107138}
     
    110141LRESULT WIN32API StaticCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
    111142{
     143  PostSpyMessage(hwnd, Msg, wParam, lParam);
    112144  return StaticHandler(hwnd, Msg, wParam, lParam);
    113145}
     
    198230{
    199231   dprintf(("KERNEL32: UnregisterSystemClasses"));
    200    if(hwndButton)    O32_DestroyWindow(hwndButton);
    201    if(hwndListbox)   O32_DestroyWindow(hwndListbox);
    202    if(hwndCombobox)  O32_DestroyWindow(hwndCombobox);
    203    if(hwndMdiClient) O32_DestroyWindow(hwndMdiClient);
    204    if(hwndEdit)      O32_DestroyWindow(hwndEdit);
    205    if(hwndScrollbar) O32_DestroyWindow(hwndScrollbar);
    206    if(hwndStatic)    O32_DestroyWindow(hwndStatic);
     232   if(hwndButton)     O32_DestroyWindow(hwndButton);
     233   if(hwndListbox)    O32_DestroyWindow(hwndListbox);
     234   if(hwndCombobox)   O32_DestroyWindow(hwndCombobox);
     235   if(hwndMdiClient)  O32_DestroyWindow(hwndMdiClient);
     236   if(hwndEdit)       O32_DestroyWindow(hwndEdit);
     237   if(hwndScrollbar)  O32_DestroyWindow(hwndScrollbar);
     238   if(hwndStatic)     O32_DestroyWindow(hwndStatic);
    207239   if(ButtonClass)    delete ButtonClass;
    208240   if(ListboxClass)   delete ListboxClass;
     
    257289    //These are not supported by Open32
    258290    wc.style &= ~(CS_PARENTDC | CS_CLASSDC);
    259 
    260 //SvL: 18-7-'98 Breaks apps (solitaire, rasmol..) 
    261 #if 0
    262     /* @@@PH 98/06/21 experimental fix for WInhlp32 */
    263 #ifndef CS_SYNCPAINT
    264   #define CS_SYNCPAINT 0x02000000L
    265 #endif
    266  
    267     wc.style |= CS_SYNCPAINT;
    268 #endif
    269291
    270292    wc.lpfnWndProc = (WNDPROC)Win32WindowClass::GetOS2ClassCallback();
     
    840862                case WM_KEYUP:
    841863                case WM_CHAR:   //SvL: Correct Open32 key mapping bug
     864                        //TODO: Not good enough, look at Wine
    842865                        lParam = MapOEMToRealKey(wParam, lParam);
    843866                        break;
     867
     868                case WM_MOUSEACTIVATE:
     869                        //Open32 sends an OS/2 window message for a button click
     870                        if(HIWORD(lParam) == 0x71)  //WM_BUTTONCLICKFIRST
     871                        {
     872                                lParam = (WM_LBUTTONDOWN << 16) | LOWORD(lParam);
     873                        }
     874                        break;
     875
    844876                case WM_ACTIVATE:
    845                         if(LOWORD(wParam) != WA_INACTIVE)
    846                   {
    847                    //EB: I think the problem is not a missing wm_erasebkgnd.
    848                    //Maybe some wrong flags in open32 during async repainting.
    849                    //SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire)
    850                    RECT rect;
    851                    HRGN hrgn;
    852                    HDC hdc = GetDC(hwnd);
    853 
    854                    // erase the dirty rect
    855                    GetUpdateRect(hwnd, &rect, TRUE);
    856                    hrgn = CreateRectRgnIndirect(&rect);
    857                    SelectClipRgn (hdc, hrgn);
    858                    DeleteObject (hrgn);
    859                    wclass->GetWinCallback()(hwnd, WM_ERASEBKGND, hdc, (LPARAM)&rect);
    860                    SelectClipRgn (hdc, NULL);
    861                    ReleaseDC(hwnd, hdc);
    862                   }
     877                        if(LOWORD(wParam) != WA_INACTIVE)
     878                        {
     879                          //EB: I think the problem is not a missing wm_erasebkgnd.
     880                          //Maybe some wrong flags in open32 during async repainting.
     881                          RECT rect;
     882                          HRGN hrgn;
     883                          HDC hdc = GetDC(hwnd);
     884
     885                                // erase the dirty rect
     886                                GetUpdateRect(hwnd, &rect, TRUE);
     887                                hrgn = CreateRectRgnIndirect(&rect);
     888                                SelectClipRgn (hdc, hrgn);
     889                                DeleteObject (hrgn);
     890                                wclass->GetWinCallback()(hwnd, WM_ERASEBKGND, hdc, (LPARAM)&rect);
     891                                SelectClipRgn (hdc, NULL);
     892                                ReleaseDC(hwnd, hdc);
     893                        }
    863894                        break;
    864895                }
  • trunk/src/user32/wndproc.cpp

    r208 r215  
    1 /* $Id: wndproc.cpp,v 1.8 1999-06-26 08:25:22 sandervl Exp $ */
     1/* $Id: wndproc.cpp,v 1.9 1999-06-26 13:21:11 sandervl Exp $ */
    22
    33/*
     
    1515#include <string.h>
    1616#include <stdarg.h>
     17#include <stdlib.h>
    1718#include <assert.h>
    18 #include "misc.h"
    19 #include "user32.h"
    20 #include "wndproc.h"
    21 #include "wndsubproc.h"
    22 #include "wndclass.h"
     19#include <misc.h>
     20#include <wndproc.h>
     21#include <wndclass.h>
     22#include <spy.h>
    2323#include "dlgconvert.h"
    2424#include "hooks.h"
    25 #include <spy.h>
    2625
    2726#ifdef DEBUG
     
    4140        if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) )
    4241        {
     42                //NOTE: Open32's SendMessage swallows a WM_PARENTNOTIFY, so call
     43                //      the win32 callback handler directly!
    4344                hwndParent = GetParent(hwnd);
     45                if(hwnd == hwndParent) {
     46                        break;
     47                }
     48
    4449                dprintf(("%s Send WM_PARENTNOTIFY from child %x to parent %x", GetMsgText(Msg), hwnd, hwndParent));
    4550                /* Notify the parent window only */
     
    4853                        if(Msg == WM_CREATE || Msg == WM_DESTROY) {
    4954                                //Todo: Set IdChild!!
    50                                 parentwnd->GetWin32Callback()(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), (LPARAM)hwnd );
     55                                parentwnd->SendMessageA(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), (LPARAM)hwnd );
    5156                        }
    52                         else    parentwnd->GetWin32Callback()(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), lParam );
     57                        else    parentwnd->SendMessageA(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), lParam );
    5358                }
    5459        }
    55         if(hwnd == hwndParent) {
    56                 break;
    57         }
     60        else    break;
     61
    5862        hwnd = hwndParent;
    5963   }
     
    220224  WriteLog("::DeleteWindow, can't find window %X!!\n", hwnd);
    221225#endif
     226}
     227//******************************************************************************
     228//******************************************************************************
     229LRESULT Win32WindowProc::SendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
     230{
     231  PostSpyMessage(hwnd, Msg, wParam, lParam);
     232  return pCallback(hwnd, Msg, wParam, lParam); 
    222233}
    223234//******************************************************************************
     
    300311                break;
    301312        case WM_CREATE:  //Open32 isn't sending WM_NCCREATE messages!!
    302                 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) {
     313                if(curwnd->SendMessageA(hwnd, WM_NCCREATE, 0, lParam) == 0) {
    303314                       dprintf(("WM_NCCREATE returned FALSE\n"));
    304315                       return(-1); //don't create window
     
    308319//TODO
    309320#if 0
    310                 if(curwnd->pCallback(hwnd, WM_NCCALCSIZE, 0, lParam) == 0) {
     321                if(curwnd->SendMessageA(hwnd, WM_NCCALCSIZE, 0, lParam) == 0) {
    311322                        return(-1); //don't create window
    312323                }
     
    326337                  HDC hdc = GetDC(hwnd);
    327338
    328                         curwnd->pCallback(hwnd, WM_ERASEBKGND, hdc, 0);
     339                        curwnd->SendMessageA(hwnd, WM_ERASEBKGND, hdc, 0);
    329340                        ReleaseDC(hwnd, hdc);
    330341                }
     342                break;
     343        case WM_MOUSEACTIVATE:
     344                //Open32 sends an OS/2 window message for a button click
     345                if(HIWORD(lParam) == 0x71)  //WM_BUTTONCLICKFIRST
     346                {
     347                        lParam = (WM_LBUTTONDOWN << 16) | LOWORD(lParam);
     348                }
    331349                break;
    332350        }
     
    334352        if(Msg == WM_NCDESTROY) {
    335353                dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd));
    336                 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present
    337354                delete curwnd;
    338355        }
Note: See TracChangeset for help on using the changeset viewer.