]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/os2/window.h
Applied patch [ 1382552 ] Fixes GDI-ressource leak in wxStaticBitmap
[wxWidgets.git] / include / wx / os2 / window.h
index 3a74134df8600021ed3fa22621e9ac091e1df94a..1c6ae26772bb695a4f5f85fb6408154541fddf65 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        window.h
+// Name:        wx/os2/window.h
 // Purpose:     wxWindow class
 // Author:      David Webster
 // Modified by:
 // Purpose:     wxWindow class
 // Author:      David Webster
 // Modified by:
 // ---------------------------------------------------------------------------
 // headers
 // ---------------------------------------------------------------------------
 // ---------------------------------------------------------------------------
 // headers
 // ---------------------------------------------------------------------------
+#define INCL_DOS
+#define INCL_PM
+#define INCL_GPI
+#include <os2.h>
+
+
+// ---------------------------------------------------------------------------
+// forward declarations
+// ---------------------------------------------------------------------------
+#ifndef CW_USEDEFAULT
+#  define  CW_USEDEFAULT ((int)0x80000000)
+#endif
 
 // ---------------------------------------------------------------------------
 // forward declarations
 
 // ---------------------------------------------------------------------------
 // forward declarations
@@ -28,129 +40,132 @@ class WXDLLEXPORT wxButton;
 // constants
 // ---------------------------------------------------------------------------
 
 // constants
 // ---------------------------------------------------------------------------
 
-// FIXME does anybody use those? they're unused by wxWindows...
+#if WXWIN_COMPATIBILITY_2_4
+// they're unused by wxWidgets...
 enum
 {
     wxKEY_SHIFT = 1,
     wxKEY_CTRL  = 2
 };
 enum
 {
     wxKEY_SHIFT = 1,
     wxKEY_CTRL  = 2
 };
+#endif
 
 // ---------------------------------------------------------------------------
 // wxWindow declaration for OS/2 PM
 // ---------------------------------------------------------------------------
 
 
 // ---------------------------------------------------------------------------
 // wxWindow declaration for OS/2 PM
 // ---------------------------------------------------------------------------
 
-class WXDLLEXPORT wxWindow : public wxWindowBase
+class WXDLLEXPORT wxWindowOS2 : public wxWindowBase
 {
 {
-    DECLARE_DYNAMIC_CLASS(wxWindow);
-
 public:
 public:
-    wxWindow() { Init(); }
-
-    wxWindow(wxWindow *parent,
-             wxWindowID id,
-             const wxPoint& pos = wxDefaultPosition,
-             const wxSize& size = wxDefaultSize,
-             long style = 0,
-             const wxString& name = wxPanelNameStr)
+    wxWindowOS2()
     {
         Init();
     {
         Init();
-        Create(parent, id, pos, size, style, name);
     }
 
     }
 
-    virtual ~wxWindow();
-
-    bool Create(wxWindow *parent,
-                wxWindowID id,
-                const wxPoint& pos = wxDefaultPosition,
-                const wxSize& size = wxDefaultSize,
-                long style = 0,
-                const wxString& name = wxPanelNameStr);
-
-    // implement base class pure virtuals
-    virtual void SetTitle( const wxString& title);
-    virtual wxString GetTitle() const;
-
-    virtual void Raise();
-    virtual void Lower();
-
-    virtual bool Show( bool show = TRUE );
-    virtual bool Enable( bool enable = TRUE );
-
-    virtual void SetFocus();
-
-    virtual bool Reparent( wxWindow *newParent );
-
-    virtual void WarpPointer(int x, int y);
-    virtual void CaptureMouse();
-    virtual void ReleaseMouse();
-
-    virtual void Refresh( bool eraseBackground = TRUE,
-                          const wxRect *rect = (const wxRect *) NULL );
-    virtual void Clear();
-
-    virtual bool SetCursor( const wxCursor &cursor );
-    virtual bool SetFont( const wxFont &font );
-
-    virtual int GetCharHeight() const;
-    virtual int GetCharWidth() const;
-    virtual void GetTextExtent(const wxString& string,
-                               int *x, int *y,
-                               int *descent = (int *) NULL,
-                               int *externalLeading = (int *) NULL,
-                               const wxFont *theFont = (const wxFont *) NULL)
-                               const;
+    wxWindowOS2( wxWindow*       pParent
+                ,wxWindowID      vId
+                ,const wxPoint&  rPos = wxDefaultPosition
+                ,const wxSize&   rSize = wxDefaultSize
+                ,long            lStyle = 0
+                ,const wxString& rName = wxPanelNameStr
+               )
+    {
+        Init();
+        Create( pParent
+               ,vId
+               ,rPos
+               ,rSize
+               ,lStyle
+               ,rName
+              );
+    }
 
 
-    virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
+    virtual ~wxWindowOS2();
 
 
-    virtual void SetScrollbar( int orient, int pos, int thumbVisible,
-                               int range, bool refresh = TRUE );
-    virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
-    virtual int GetScrollPos( int orient ) const;
-    virtual int GetScrollThumb( int orient ) const;
-    virtual int GetScrollRange( int orient ) const;
-    virtual void ScrollWindow( int dx, int dy,
-                               const wxRect* rect = (wxRect *) NULL );
+    bool Create( wxWindow*       pParent
+                ,wxWindowID      vId
+                ,const wxPoint&  rPos = wxDefaultPosition
+                ,const wxSize&   rSize = wxDefaultSize
+                ,long            lStyle = 0
+                ,const wxString& rName = wxPanelNameStr
+               );
 
 
+    // implement base class pure virtuals
+    virtual void     SetLabel(const wxString& label);
+    virtual wxString GetLabel(void) const;
+    virtual void     Raise(void);
+    virtual void     Lower(void);
+    virtual bool     Show(bool bShow = true);
+    virtual bool     Enable(bool bEnable = true);
+    virtual void     SetFocus(void);
+    virtual void     SetFocusFromKbd(void);
+    virtual bool     Reparent(wxWindow* pNewParent);
+    virtual void     WarpPointer( int x
+                                 ,int y
+                                );
+    virtual void     Refresh( bool          bEraseBackground = true
+                             ,const wxRect* pRect = (const wxRect *)NULL
+                            );
+    virtual void     Freeze(void);
+    virtual void     Update(void);
+    virtual void     Thaw(void);
+    virtual void     SetWindowStyleFlag(long lStyle);
+    virtual bool     SetCursor(const wxCursor& rCursor);
+    virtual bool     SetFont(const wxFont& rFont);
+    virtual int      GetCharHeight(void) const;
+    virtual int      GetCharWidth(void) const;
+    virtual void     GetTextExtent( const wxString& rString
+                                   ,int*            pX
+                                   ,int*            pY
+                                   ,int*            pDescent = (int *)NULL
+                                   ,int*            pExternalLeading = (int *)NULL
+                                   ,const wxFont*   pTheFont = (const wxFont *)NULL
+                                  ) const;
+#if wxUSE_MENUS_NATIVE
+    virtual bool     DoPopupMenu( wxMenu* pMenu
+                                 ,int     nX
+                                 ,int     nY
+                                );
+#endif // wxUSE_MENUS_NATIVE
+
+    virtual void     SetScrollbar( int  nOrient
+                                  ,int  nPos
+                                  ,int  nThumbVisible
+                                  ,int  nRange
+                                  ,bool bRefresh = true
+                                 );
+    virtual void     SetScrollPos( int  nOrient
+                                  ,int  nPos
+                                  ,bool bRefresh = true
+                                 );
+    virtual int      GetScrollPos(int nOrient) const;
+    virtual int      GetScrollThumb(int nOrient) const;
+    virtual int      GetScrollRange(int nOrient) const;
+    virtual void     ScrollWindow( int           nDx
+                                  ,int           nDy
+                                  ,const wxRect* pRect = (wxRect *)NULL
+                                 );
+
+    inline HWND                   GetScrollBarHorz(void) const {return m_hWndScrollBarHorz;}
+    inline HWND                   GetScrollBarVert(void) const {return m_hWndScrollBarVert;};
 #if wxUSE_DRAG_AND_DROP
 #if wxUSE_DRAG_AND_DROP
-    virtual void SetDropTarget( wxDropTarget *dropTarget );
+    virtual void SetDropTarget(wxDropTarget* pDropTarget);
 #endif // wxUSE_DRAG_AND_DROP
 
     // Accept files for dragging
 #endif // wxUSE_DRAG_AND_DROP
 
     // Accept files for dragging
-    virtual void DragAcceptFiles(bool accept);
+    virtual void DragAcceptFiles(bool bAccept);
 
 
-#if WXWIN_COMPATIBILITY
-    // Set/get scroll attributes
-    virtual void SetScrollRange(int orient, int range, bool refresh = TRUE);
-    virtual void SetScrollPage(int orient, int page, bool refresh = TRUE);
-    virtual int OldGetScrollRange(int orient) const;
-    virtual int GetScrollPage(int orient) const;
-
-    // event handlers
-        // Handle a control command
-    virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
-
-        // Override to define new behaviour for default action (e.g. double
-        // clicking on a listbox)
-    virtual void OnDefaultAction(wxControl * WXUNUSED(initiatingItem)) { }
-#endif // WXWIN_COMPATIBILITY
-
-#if wxUSE_CARET && WXWIN_COMPATIBILITY
-    // caret manipulation (old MSW only functions, see wxCaret class for the
-    // new API)
-    void CreateCaret(int w, int h);
-    void CreateCaret(const wxBitmap *bitmap);
-    void DestroyCaret();
-    void ShowCaret(bool show);
-    void SetCaretPos(int x, int y);
-    void GetCaretPos(int *x, int *y) const;
-#endif // wxUSE_CARET
-
-    // Native resource loading (implemented in src/msw/nativdlg.cpp)
+#ifndef __WXUNIVERSAL__
+    // Native resource loading (implemented in src/os2/nativdlg.cpp)
     // FIXME: should they really be all virtual?
     // FIXME: should they really be all virtual?
-    virtual bool LoadNativeDialog(wxWindow* parent, wxWindowID& id);
-    virtual bool LoadNativeDialog(wxWindow* parent, const wxString& name);
-    wxWindow* GetWindowChild1(wxWindowID id);
-    wxWindow* GetWindowChild(wxWindowID id);
+    virtual bool LoadNativeDialog( wxWindow*   pParent
+                                  ,wxWindowID& vId
+                                 );
+    virtual bool LoadNativeDialog( wxWindow*       pParent
+                                  ,const wxString& rName
+                                 );
+    wxWindow*    GetWindowChild1(wxWindowID vId);
+    wxWindow*    GetWindowChild(wxWindowID vId);
+#endif //__WXUNIVERSAL__
 
     // implementation from now on
     // --------------------------
 
     // implementation from now on
     // --------------------------
@@ -158,72 +173,91 @@ public:
     // simple accessors
     // ----------------
 
     // simple accessors
     // ----------------
 
-    WXHWND GetHWND() const { return m_hWnd; }
-    void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
-    virtual WXWidget GetHandle() const { return GetHWND(); }
-
-    bool GetUseCtl3D() const { return m_useCtl3D; }
-    bool GetTransparentBackground() const { return m_backgroundTransparent; }
-    void SetTransparent(bool t = TRUE) { m_backgroundTransparent = t; }
+    WXHWND           GetHWND(void) const { return m_hWnd; }
+    void             SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
+    virtual WXWidget GetHandle(void) const { return GetHWND(); }
+    bool             GetUseCtl3D(void) const { return m_bUseCtl3D; }
+    bool             GetTransparentBackground(void) const { return m_bBackgroundTransparent; }
+    void             SetTransparent(bool bT = true) { m_bBackgroundTransparent = bT; }
 
     // event handlers
     // --------------
 
     // event handlers
     // --------------
-    void OnEraseBackground(wxEraseEvent& event);
-    void OnIdle(wxIdleEvent& event);
+    void OnSetFocus(wxFocusEvent& rEvent);
+    void OnEraseBackground(wxEraseEvent& rEvent);
+    void OnIdle(wxIdleEvent& rEvent);
 
 public:
 
 public:
-    // For implementation purposes - sometimes decorations make the client area
-    // smaller
-    virtual wxPoint GetClientAreaOrigin() const;
-
-    // Makes an adjustment to the window position (for example, a frame that has
-    // a toolbar that it manages itself).
-    virtual void AdjustForParentClientOrigin(int& x, int& y, int sizeFlags);
 
     // Windows subclassing
     void SubclassWin(WXHWND hWnd);
 
     // Windows subclassing
     void SubclassWin(WXHWND hWnd);
-    void UnsubclassWin();
-
-    WXFARPROC OS2GetOldWndProc() const { return m_oldWndProc; }
-    void OS2SetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; }
-
-    wxWindow *FindItem(long id) const;
-    wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
-
-    // Make a Windows extended style from the given wxWindows window style
-    static WXDWORD MakeExtendedStyle(long style,
-                                     bool eliminateBorders = TRUE);
-    // Determine whether 3D effects are wanted
-    WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const;
-
-    // MSW only: TRUE if this control is part of the main control
-    virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; };
-
-    // returns TRUE if the window has been created
-    bool OS2Create(int id,
-                   wxWindow *parent,
-                   const wxChar *wclass,
-                   wxWindow *wx_win,
-                   const wxChar *title,
-                   int x, int y, int width, int height,
-                   WXDWORD style,
-                   const wxChar *dialog_template = NULL,
-                   WXDWORD exendedStyle = 0);
-    virtual bool OS2Command(WXUINT param, WXWORD id);
-
-#if WXWIN_COMPATIBILITY
-    wxObject *GetChild(int number) const;
-    virtual void OS2DeviceToLogical(float *x, float *y) const;
-#endif // WXWIN_COMPATIBILITY
-
+    void UnsubclassWin(void);
+
+    WXFARPROC OS2GetOldWndProc(void) const { return m_fnOldWndProc; }
+    void OS2SetOldWndProc(WXFARPROC fnProc) { m_fnOldWndProc = fnProc; }
+    //
+    // Return true if the window is of a standard (i.e. not wxWidgets') class
+    //
+    bool IsOfStandardClass(void) const { return m_fnOldWndProc != NULL; }
+
+    wxWindow* FindItem(long lId) const;
+    wxWindow* FindItemByHWND( WXHWND hWnd
+                             ,bool   bControlOnly = false
+                            ) const;
+
+    // Make a Windows extended style from the given wxWidgets window style ?? applicable to OS/2??
+    static WXDWORD MakeExtendedStyle( long lStyle
+                                     ,bool bEliminateBorders = true
+                                    );
+
+    // PM only: true if this control is part of the main control
+    virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return false; };
+
+    // translate wxWidgets style flags for this control into the PM style
+    // and optional extended style for the corresponding native control
+    //
+    // this is the function that should be overridden in the derived classes,
+    // but you will mostly use OS2GetCreateWindowFlags() below
+    virtual WXDWORD OS2GetStyle( long     lFlags
+                                ,WXDWORD* pdwExstyle = NULL
+                               ) const;
+
+    // get the MSW window flags corresponding to wxWidgets ones
+    //
+    // the functions returns the flags (WS_XXX) directly and puts the ext
+    // (WS_EX_XXX) flags into the provided pointer if not NULL
+    WXDWORD OS2GetCreateWindowFlags(WXDWORD* pdwExflags = NULL) const
+        { return OS2GetStyle(GetWindowStyle(), pdwExflags); }
+
+
+    // get the HWND to be used as parent of this window with CreateWindow()
+    virtual WXHWND OS2GetParent(void) const;
+
+    // returns true if the window has been created
+    bool         OS2Create( PSZ            zClass
+                           ,const wxChar*  zTitle
+                           ,WXDWORD        dwStyle
+                           ,const wxPoint& rPos
+                           ,const wxSize&  rSize
+                           ,void*          pCtlData
+                           ,WXDWORD        dwExStyle
+                           ,bool           bIsChild
+                          );
+    virtual bool OS2Command( WXUINT uParam
+                            ,WXWORD nId
+                           );
+
+#ifndef __WXUNIVERSAL__
     // Create an appropriate wxWindow from a HWND
     // Create an appropriate wxWindow from a HWND
-    virtual wxWindow* CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd);
+    virtual wxWindow* CreateWindowFromHWND( wxWindow* pParent
+                                           ,WXHWND    hWnd
+                                          );
 
     // Make sure the window style reflects the HWND style (roughly)
 
     // Make sure the window style reflects the HWND style (roughly)
-    virtual void AdoptAttributesFromHWND();
+    virtual void AdoptAttributesFromHWND(void);
+#endif
 
     // Setup background and foreground colours correctly
 
     // Setup background and foreground colours correctly
-    virtual void SetupColours();
+    virtual void SetupColours(void);
 
     // ------------------------------------------------------------------------
     // helpers for message handlers: these perform the same function as the
 
     // ------------------------------------------------------------------------
     // helpers for message handlers: these perform the same function as the
@@ -231,195 +265,326 @@ public:
     // the correct parameters
     // ------------------------------------------------------------------------
 
     // the correct parameters
     // ------------------------------------------------------------------------
 
-    void UnpackCommand(WXWPARAM wParam, WXLPARAM lParam,
-                       WXWORD *id, WXHWND *hwnd, WXWORD *cmd);
-    void UnpackActivate(WXWPARAM wParam, WXLPARAM lParam,
-                        WXWORD *state, WXWORD *minimized, WXHWND *hwnd);
-    void UnpackScroll(WXWPARAM wParam, WXLPARAM lParam,
-                      WXWORD *code, WXWORD *pos, WXHWND *hwnd);
-    void UnpackCtlColor(WXWPARAM wParam, WXLPARAM lParam,
-                        WXWORD *nCtlColor, WXHDC *hdc, WXHWND *hwnd);
-    void UnpackMenuSelect(WXWPARAM wParam, WXLPARAM lParam,
-                          WXWORD *item, WXWORD *flags, WXHMENU *hmenu);
+    void UnpackCommand( WXWPARAM wParam
+                       ,WXLPARAM lParam,
+                        WXWORD*  pId
+                       ,WXHWND*  pHwnd
+                       ,WXWORD*  pCmd
+                      );
+    void UnpackActivate( WXWPARAM wParam
+                        ,WXLPARAM lParam
+                        ,WXWORD*  pState
+                        ,WXHWND*  pHwnd
+                       );
+    void UnpackScroll( WXWPARAM wParam
+                      ,WXLPARAM lParam
+                      ,WXWORD*  pCode
+                      ,WXWORD*  pPos
+                      ,WXHWND*  pHwnd
+                     );
+    void UnpackMenuSelect( WXWPARAM wParam
+                          ,WXLPARAM lParam
+                          ,WXWORD*  pTtem
+                          ,WXWORD*  pFlags
+                          ,WXHMENU* pHmenu
+                         );
 
     // ------------------------------------------------------------------------
 
     // ------------------------------------------------------------------------
-    // internal handlers for MSW messages: all handlers return a boolen value:
-    // TRUE means that the handler processed the event and FALSE that it didn't
+    // internal handlers for OS2 messages: all handlers return a boolen value:
+    // true means that the handler processed the event and false that it didn't
     // ------------------------------------------------------------------------
 
     // ------------------------------------------------------------------------
 
-    // there are several cases where we have virtual functions for Windows
+    // there are several cases where we have virtual functions for PM
     // message processing: this is because these messages often require to be
     // processed in a different manner in the derived classes. For all other
     // message processing: this is because these messages often require to be
     // processed in a different manner in the derived classes. For all other
-    // messages, however, we do *not* have corresponding MSWOnXXX() function
+    // messages, however, we do *not* have corresponding OS2OnXXX() function
     // and if the derived class wants to process them, it should override
     // and if the derived class wants to process them, it should override
-    // MSWWindowProc() directly.
+    // OS2WindowProc() directly.
 
     // scroll event (both horizontal and vertical)
 
     // scroll event (both horizontal and vertical)
-    virtual bool OS2OnScroll(int orientation, WXWORD nSBCode,
-                             WXWORD pos, WXHWND control);
-
-    virtual bool OS2OnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
+    virtual bool OS2OnScroll( int    nOrientation
+                             ,WXWORD nSBCode
+                             ,WXWORD pos
+                             ,WXHWND control
+                            );
 
     // owner-drawn controls need to process these messages
 
     // owner-drawn controls need to process these messages
-    virtual bool OS2OnDrawItem(int id, WXDRAWITEMSTRUCT *item);
-    virtual bool OS2OnMeasureItem(int id, WXMEASUREITEMSTRUCT *item);
+    virtual bool OS2OnDrawItem( int               nId
+                               ,WXDRAWITEMSTRUCT* pItem
+                              );
+    virtual long OS2OnMeasureItem( int                  nId
+                                  ,WXMEASUREITEMSTRUCT* pItem
+                                 );
+
+    virtual void OnPaint(wxPaintEvent& rEvent);
 
     // the rest are not virtual
 
     // the rest are not virtual
-    bool HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate);
+    bool HandleCreate( WXLPCREATESTRUCT vCs
+                      ,bool*            pMayCreate
+                     );
     bool HandleInitDialog(WXHWND hWndFocus);
     bool HandleInitDialog(WXHWND hWndFocus);
-    bool HandleDestroy();
-
-    bool HandlePaint();
-    bool HandleEraseBkgnd(WXHDC pDC);
-
-    bool HandleMinimize();
-    bool HandleMaximize();
-    bool HandleSize(int x, int y, WXUINT flag);
-    bool HandleGetMinMaxInfo(void *mmInfo);
-
-    bool HandleShow(bool show, int status);
-    bool HandleActivate(int flag, bool minimized, WXHWND activate);
-
-    bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
-    bool HandleSysCommand(WXWPARAM wParam, WXLPARAM lParam);
-
-    bool HandleCtlColor(WXHBRUSH *hBrush,
-                        WXHDC hdc,
-                        WXHWND hWnd,
-                        WXUINT nCtlColor,
-                        WXUINT message,
-                        WXWPARAM wParam,
-                        WXLPARAM lParam);
-
-    bool HandlePaletteChanged(WXHWND hWndPalChange);
-    bool HandleQueryNewPalette();
-    bool HandleSysColorChange();
-
-    bool HandleQueryEndSession(long logOff, bool *mayEnd);
-    bool HandleEndSession(bool endSession, long logOff);
-
-    bool HandleSetFocus(WXHWND wnd);
-    bool HandleKillFocus(WXHWND wnd);
-
-    bool HandleDropFiles(WXWPARAM wParam);
-
-    bool HandleMouseEvent(WXUINT msg, int x, int y, WXUINT flags);
-    bool HandleMouseMove(int x, int y, WXUINT flags);
-
-    bool HandleChar(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE);
-    bool HandleKeyDown(WXWORD wParam, WXLPARAM lParam);
-    bool HandleKeyUp(WXWORD wParam, WXLPARAM lParam);
-
-    bool HandleQueryDragIcon(WXHICON *hIcon);
-
-    bool HandleSetCursor(WXHWND hWnd, short nHitTest, int mouseMsg);
+    bool HandleDestroy(void);
+    bool HandlePaint(void);
+    bool HandleEraseBkgnd(WXHDC vDC);
+    bool HandleMinimize(void);
+    bool HandleMaximize(void);
+    bool HandleSize( int    nX
+                    ,int    nY
+                    ,WXUINT uFlag
+                   );
+    bool HandleGetMinMaxInfo(PSWP pMmInfo);
+    bool HandleShow( bool bShow
+                    ,int  nStatus
+                   );
+    bool HandleActivate( int    nFlag
+                        ,WXHWND hActivate
+                       );
+    bool HandleCommand( WXWORD nId
+                       ,WXWORD nCmd
+                       ,WXHWND hControl
+                      );
+    bool HandleSysCommand( WXWPARAM wParam
+                          ,WXLPARAM lParam
+                         );
+    bool HandlePaletteChanged(void);
+    bool HandleQueryNewPalette(void);
+    bool HandleSysColorChange(void);
+    bool HandleDisplayChange(void);
+    bool HandleCaptureChanged(WXHWND hBainedCapture);
+
+    bool HandleCtlColor(WXHBRUSH* hBrush);
+    bool HandleSetFocus(WXHWND hWnd);
+    bool HandleKillFocus(WXHWND hWnd);
+    bool HandleEndDrag(WXWPARAM wParam);
+    bool HandleMouseEvent( WXUINT uMsg
+                          ,int    nX
+                          ,int    nY
+                          ,WXUINT uFlags
+                         );
+    bool HandleMouseMove( int    nX
+                         ,int    nY
+                         ,WXUINT uFlags
+                        );
+    bool HandleChar( WXWPARAM wParam
+                    ,WXLPARAM lParam
+                    ,bool     bIsASCII = false
+                   );
+    bool HandleKeyDown( WXWPARAM wParam
+                       ,WXLPARAM lParam
+                      );
+    bool HandleKeyUp( WXWPARAM wParam
+                     ,WXLPARAM lParam
+                    );
+    bool HandleQueryDragIcon(WXHICON* phIcon);
+    bool HandleSetCursor( USHORT vId
+                         ,WXHWND hWnd
+                        );
+
+    bool IsMouseInWindow(void) const;
+    bool OS2GetCreateWindowCoords( const wxPoint& rPos
+                                  ,const wxSize&  rSize
+                                  ,int&           rnX
+                                  ,int&           rnY
+                                  ,int&           rnWidth
+                                  ,int&           rnHeight
+                                 ) const;
 
     // Window procedure
 
     // Window procedure
-    virtual MRESULT OS2WindowProc(HWND hwnd, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+    virtual MRESULT OS2WindowProc( WXUINT   uMsg
+                                  ,WXWPARAM wParam
+                                  ,WXLPARAM lParam
+                                 );
 
     // Calls an appropriate default window procedure
 
     // Calls an appropriate default window procedure
-    virtual MRESULT OS2DefWindowProc(HWND hwnd, WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
-    virtual bool OS2ProcessMessage(WXMSG* pMsg);
-    virtual bool OS2TranslateMessage(WXMSG* pMsg);
-    virtual void OS2DestroyWindow();
-
-    // Detach "Window" menu from menu bar so it doesn't get deleted
-    void OS2DetachWindowMenu();
+    virtual MRESULT OS2DefWindowProc( WXUINT   uMsg
+                                     ,WXWPARAM wParam
+                                     ,WXLPARAM lParam
+                                    );
+    virtual bool    OS2ProcessMessage(WXMSG* pMsg);
+    virtual bool    OS2ShouldPreProcessMessage(WXMSG* pMsg);
+    virtual bool    OS2TranslateMessage(WXMSG* pMsg);
+    virtual void    OS2DestroyWindow(void);
 
     // this function should return the brush to paint the window background
     // with or 0 for the default brush
 
     // this function should return the brush to paint the window background
     // with or 0 for the default brush
-    virtual WXHBRUSH OnCtlColor(WXHDC hDC,
-                                WXHWND hWnd,
-                                WXUINT nCtlColor,
-                                WXUINT message,
-                                WXWPARAM wParam,
-                                WXLPARAM lParam);
-
-#if WXWIN_COMPATIBILITY
-    void SetShowing(bool show) { (void)Show(show); }
-    bool IsUserEnabled() const { return IsEnabled(); }
-#endif // WXWIN_COMPATIBILITY
+    virtual WXHBRUSH OnCtlColor( WXHDC    hDC
+                                ,WXHWND   hWnd
+                                ,WXUINT   uCtlColor
+                                ,WXUINT   uMessage
+                                ,WXWPARAM wParam
+                                ,WXLPARAM lParam
+                               );
 
     // Responds to colour changes: passes event on to children.
 
     // Responds to colour changes: passes event on to children.
-    void OnSysColourChanged(wxSysColourChangedEvent& event);
+    void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
 
 
-    // initialize various fields of wxMouseEvent (common part of MSWOnMouseXXX)
-    void InitMouseEvent(wxMouseEvent& event, int x, int y, WXUINT flags);
+    // initialize various fields of wxMouseEvent (common part of OS2OnMouseXXX)
+    void InitMouseEvent( wxMouseEvent& rEvent
+                        ,int           nX
+                        ,int           nY
+                        ,WXUINT        uFlags
+                       );
+
+    void MoveChildren(int nDiff);
+    PSWP GetSwp(void) {return &m_vWinSwp;}
 
 protected:
 
 protected:
+    // PM can't create some MSW styles natively but can perform these after
+    // creation by sending messages
+    typedef enum extra_flags { kFrameToolWindow = 0x0001
+                              ,kVertCaption     = 0x0002
+                              ,kHorzCaption     = 0x0004
+                             } EExtraFlags;
+    // Some internal sizeing id's to make it easy for event handlers
+    typedef enum size_types { kSizeNormal
+                             ,kSizeMax
+                             ,kSizeMin
+                            } ESizeTypes;
     // the window handle
     // the window handle
-    WXHWND                m_hWnd;
+    WXHWND                          m_hWnd;
 
     // the old window proc (we subclass all windows)
 
     // the old window proc (we subclass all windows)
-    WXFARPROC             m_oldWndProc;
+    WXFARPROC                       m_fnOldWndProc;
 
 
-    // additional (MSW specific) flags
-    bool                  m_useCtl3D:1; // Using CTL3D for this control
-    bool                  m_backgroundTransparent:1;
-    bool                  m_mouseInWindow:1;
-    bool                  m_doubleClickAllowed:1;
-    bool                  m_winCaptured:1;
+    // additional (OS2 specific) flags
+    bool                            m_bUseCtl3D:1; // Using CTL3D for this control
+    bool                            m_bBackgroundTransparent:1;
+    bool                            m_bMouseInWindow:1;
+    bool                            m_bLastKeydownProcessed:1;
+    bool                            m_bWinCaptured:1;
+    WXDWORD                         m_dwExStyle;
 
     // the size of one page for scrolling
 
     // the size of one page for scrolling
-    int                   m_xThumbSize;
-    int                   m_yThumbSize;
+    int                             m_nXThumbSize;
+    int                             m_nYThumbSize;
 
 #if wxUSE_MOUSEEVENT_HACK
     // the coordinates of the last mouse event and the type of it
 
 #if wxUSE_MOUSEEVENT_HACK
     // the coordinates of the last mouse event and the type of it
-    long                  m_lastMouseX,
-                          m_lastMouseY;
-    int                   m_lastMouseEvent;
+    long                            m_lLastMouseX,
+    long                            m_lLastMouseY;
+    int                             m_nLastMouseEvent;
 #endif // wxUSE_MOUSEEVENT_HACK
 
 #endif // wxUSE_MOUSEEVENT_HACK
 
-    WXHMENU               m_hMenu; // Menu, if any
+    WXHMENU                         m_hMenu; // Menu, if any
+    unsigned long                   m_ulMenubarId; // it's Id, if any
 
     // the return value of WM_GETDLGCODE handler
 
     // the return value of WM_GETDLGCODE handler
-    long m_lDlgCode;
+    long                            m_lDlgCode;
 
     // implement the base class pure virtuals
 
     // implement the base class pure virtuals
-    virtual void DoClientToScreen( int *x, int *y ) const;
-    virtual void DoScreenToClient( int *x, int *y ) const;
-    virtual void DoGetPosition( int *x, int *y ) const;
-    virtual void DoGetSize( int *width, int *height ) const;
-    virtual void DoGetClientSize( int *width, int *height ) const;
-    virtual void DoSetSize(int x, int y,
-                           int width, int height,
-                           int sizeFlags = wxSIZE_AUTO);
-    virtual void DoSetClientSize(int width, int height);
-
-    // get the size which best suits the window: e.g., for a static text it
-    // will be the width and height of the text
-    virtual wxSize DoGetBestSize();
+    virtual void DoClientToScreen( int* pX
+                                  ,int* pY
+                                 ) const;
+    virtual void DoScreenToClient( int* pX
+                                  ,int* pY
+                                 ) const;
+    virtual void DoGetPosition( int* pX
+                               ,int* pY
+                              ) const;
+    virtual void DoGetSize( int* pWidth
+                           ,int* pHeight
+                          ) const;
+    virtual void DoGetClientSize( int* pWidth
+                                 ,int* pHeight
+                                ) const;
+    virtual void DoSetSize( int nX
+                           ,int nY
+                           ,int nWidth
+                           ,int nHeight
+                           ,int nSizeFlags = wxSIZE_AUTO
+                          );
+    virtual void DoSetClientSize( int nWidth
+                                 ,int nHeight
+                                );
+
+    virtual void     DoCaptureMouse(void);
+    virtual void     DoReleaseMouse(void);
 
     // move the window to the specified location and resize it: this is called
     // from both DoSetSize() and DoSetClientSize() and would usually just call
 
     // move the window to the specified location and resize it: this is called
     // from both DoSetSize() and DoSetClientSize() and would usually just call
-    // ::MoveWindow() except for composite controls which will want to arrange
+    // ::WinSetWindowPos() except for composite controls which will want to arrange
     // themselves inside the given rectangle
     // themselves inside the given rectangle
-    virtual void DoMoveWindow(int x, int y, int width, int height);
+    virtual void DoMoveWindow( int nX
+                              ,int nY
+                              ,int nWidth
+                              ,int nHeight
+                             );
 
 #if wxUSE_TOOLTIPS
 
 #if wxUSE_TOOLTIPS
-    virtual void DoSetToolTip( wxToolTip *tip );
+    virtual void DoSetToolTip(wxToolTip* pTip);
 #endif // wxUSE_TOOLTIPS
 
 #endif // wxUSE_TOOLTIPS
 
+    int  GetOS2ParentHeight(wxWindowOS2* pParent);
+
 private:
     // common part of all ctors
 private:
     // common part of all ctors
-    void Init();
+    void Init(void);
 
     // the (non-virtual) handlers for the events
 
     // the (non-virtual) handlers for the events
-    bool HandleMove(int x, int y);
-    bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags);
-
-    bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
-    DECLARE_NO_COPY_CLASS(wxWindow);
+    bool HandleMove( int nX
+                    ,int nY
+                   );
+    bool HandleJoystickEvent( WXUINT uMsg
+                             ,int    pX
+                             ,int    pY
+                             ,WXUINT uFlags
+                            );
+
+    bool HandleNotify( int       nIdCtrl
+                      ,WXLPARAM  lParam
+                      ,WXLPARAM* pResult
+                     );
+    // the helper functions used by HandleChar/KeyXXX methods
+    wxKeyEvent CreateKeyEvent( wxEventType evType
+                              ,int         nId
+                              ,WXLPARAM    lParam = 0
+                              ,WXWPARAM    wParam = 0
+                             ) const;
+
+    wxWindowList*                   m_pChildrenDisabled;
+    HWND                            m_hWndScrollBarHorz;
+    HWND                            m_hWndScrollBarVert;
+    SWP                             m_vWinSwp;
+
+    DECLARE_DYNAMIC_CLASS(wxWindowOS2);
+    DECLARE_NO_COPY_CLASS(wxWindowOS2)
     DECLARE_EVENT_TABLE()
     DECLARE_EVENT_TABLE()
-};
+
+    //
+    // Virtual function hiding supression
+    //
+    inline virtual bool Reparent(wxWindowBase* pNewParent)
+    { return(wxWindowBase::Reparent(pNewParent));}
+}; // end of wxWindow
+
+class wxWindowCreationHook
+{
+public:
+    wxWindowCreationHook(wxWindow* pWinBeingCreated);
+    ~wxWindowCreationHook();
+}; // end of CLASS wxWindowCreationHook
 
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------
 
 // kbd code translation
 
 // ---------------------------------------------------------------------------
 // global functions
 // ---------------------------------------------------------------------------
 
 // kbd code translation
-WXDLLEXPORT int wxCharCodeOS2ToWX(int keySym);
-WXDLLEXPORT int wxCharCodeWXToOS2(int id, bool *IsVirtual);
-#endif
-    // _WX_WINDOW_H_
+WXDLLEXPORT int wxCharCodeOS2ToWX(int nKeySym);
+WXDLLEXPORT int wxCharCodeWXToOS2( int   nId
+                                  ,bool* pbIsVirtual
+                                 );
+
+// ----------------------------------------------------------------------------
+// global objects
+// ----------------------------------------------------------------------------
+
+// notice that this hash must be defined after wxWindow declaration as it
+// needs to "see" its dtor and not just forward declaration
+#include "wx/hash.h"
+
+// pseudo-template HWND <-> wxWindow hash table
+WX_DECLARE_HASH(wxWindowOS2, wxWindowList, wxWinHashTable);
+
+extern wxWinHashTable *wxWinHandleHash;
+
+#endif // _WX_WINDOW_H_