/////////////////////////////////////////////////////////////////////////////
-// Name: window.h
+// Name: wx/os2/window.h
// Purpose: wxWindow class
-// Author: Julian Smart
+// Author: David Webster
// Modified by:
-// Created: 01/02/97
+// Created: 10/12/99
// RCS-ID: $Id$
-// Copyright: (c) Julian Smart and Markus Holzem
+// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_WINDOW_H_
#define _WX_WINDOW_H_
+#define wxUSE_MOUSEEVENT_HACK 0
+
// ---------------------------------------------------------------------------
// headers
// ---------------------------------------------------------------------------
+#define INCL_DOS
+#define INCL_PM
+#define INCL_GPI
+#include <os2.h>
-#ifdef __GNUG__
- #pragma interface "window.h"
-#endif
-
-// #include "wx/msw/winundef.h"
-// VZ: apparently some version of Windows send extra mouse move messages after
-// a mouse click. My tests under NT 4.0 and 95 didn't show it so I'm
-// tempted to think that it was just an effect of a poor mouse and so the
-// code to work around this is currently disabled - just define this as 1
-// to reenable it
-#define wxUSE_MOUSEEVENT_HACK 0
+// ---------------------------------------------------------------------------
+// forward declarations
+// ---------------------------------------------------------------------------
+#ifndef CW_USEDEFAULT
+# define CW_USEDEFAULT ((int)0x80000000)
+#endif
// ---------------------------------------------------------------------------
// forward declarations
// 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
};
+#endif
// ---------------------------------------------------------------------------
-// wxWindow declaration for MSW
+// wxWindow declaration for OS/2 PM
// ---------------------------------------------------------------------------
-class WXDLLEXPORT wxWindow : public wxWindowBase
-{
- DECLARE_DYNAMIC_CLASS(wxWindow);
+class WXDLLEXPORT wxWindowOS2 : public wxWindowBase
+{
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();
- 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;
-
- virtual bool PopupMenu( wxMenu *menu, int x, int y );
+ 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
- virtual void SetDropTarget( wxDropTarget *dropTarget );
+ virtual void SetDropTarget(wxDropTarget* pDropTarget);
#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?
- 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
// --------------------------
// 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
// --------------
- void OnEraseBackground(wxEraseEvent& event);
- void OnIdle(wxIdleEvent& event);
+ void OnSetFocus(wxFocusEvent& rEvent);
+ void OnEraseBackground(wxEraseEvent& rEvent);
+ void OnIdle(wxIdleEvent& rEvent);
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);
- void UnsubclassWin();
-
- WXFARPROC MSWGetOldWndProc() const { return m_oldWndProc; }
- void MSWSetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; }
-
- wxWindow *FindItem(int id) const;
- wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
-
- // Make a Windows extended style from the given wxWindows window style
- virtual WXDWORD MakeExtendedStyle(long style, bool eliminateBorders = TRUE);
- // Determine whether 3D effects are wanted
- virtual WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D);
-
- // 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 MSWCreate(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 MSWCommand(WXUINT param, WXWORD id);
-
-#if WXWIN_COMPATIBILITY
- wxObject *GetChild(int number) const;
- virtual void MSWDeviceToLogical(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
- virtual wxWindow* CreateWindowFromHWND(wxWindow* parent, WXHWND hWnd);
+ virtual wxWindow* CreateWindowFromHWND( wxWindow* pParent
+ ,WXHWND hWnd
+ );
// Make sure the window style reflects the HWND style (roughly)
- virtual void AdoptAttributesFromHWND();
+ virtual void AdoptAttributesFromHWND(void);
+#endif
// Setup background and foreground colours correctly
- virtual void SetupColours();
+ virtual void SetupColours(void);
// ------------------------------------------------------------------------
// helpers for message handlers: these perform the same function as the
// 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
- // 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
- // MSWWindowProc() directly.
+ // OS2WindowProc() directly.
// scroll event (both horizontal and vertical)
- virtual bool MSWOnScroll(int orientation, WXWORD nSBCode,
- WXWORD pos, WXHWND control);
-
- // child control notifications
-#ifdef __WIN95__
- virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
-#endif // __WIN95__
+ virtual bool OS2OnScroll( int nOrientation
+ ,WXWORD nSBCode
+ ,WXWORD pos
+ ,WXHWND control
+ );
// owner-drawn controls need to process these messages
- virtual bool MSWOnDrawItem(int id, WXDRAWITEMSTRUCT *item);
- virtual bool MSWOnMeasureItem(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
- bool HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate);
+ bool HandleCreate( WXLPCREATESTRUCT vCs
+ ,bool* pMayCreate
+ );
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
- virtual long MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
+ virtual MRESULT OS2WindowProc( WXUINT uMsg
+ ,WXWPARAM wParam
+ ,WXLPARAM lParam
+ );
// Calls an appropriate default window procedure
- virtual long MSWDefWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
- virtual bool MSWProcessMessage(WXMSG* pMsg);
- virtual bool MSWTranslateMessage(WXMSG* pMsg);
- virtual void MSWDestroyWindow();
-
- // Detach "Window" menu from menu bar so it doesn't get deleted
- void MSWDetachWindowMenu();
+ 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
- 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.
- 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:
+ // 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
- WXHWND m_hWnd;
+ WXHWND m_hWnd;
// 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
- 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
- long m_lastMouseX,
- m_lastMouseY;
- int m_lastMouseEvent;
+ long m_lLastMouseX,
+ long m_lLastMouseY;
+ int m_nLastMouseEvent;
#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
- long m_lDlgCode;
+ long m_lDlgCode;
// 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
+ // ::WinSetWindowPos() except for composite controls which will want to arrange
+ // themselves inside the given rectangle
+ virtual void DoMoveWindow( int nX
+ ,int nY
+ ,int nWidth
+ ,int nHeight
+ );
#if wxUSE_TOOLTIPS
- virtual void DoSetToolTip( wxToolTip *tip );
+ virtual void DoSetToolTip(wxToolTip* pTip);
#endif // wxUSE_TOOLTIPS
+ int GetOS2ParentHeight(wxWindowOS2* pParent);
+
private:
// common part of all ctors
- void Init();
+ void Init(void);
// the (non-virtual) handlers for the events
- bool HandleMove(int x, int y);
- bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags);
-
- 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()
- // Supress virtual function hiding warning
- virtual bool Reparent( wxWindowBase *newParent )
- {return(wxWindowBase::Reparent(newParent));}
-};
+
+ //
+ // 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
-WXDLLEXPORT int wxCharCodeMSWToWX(int keySym);
-WXDLLEXPORT int wxCharCodeWXToMSW(int id, bool *IsVirtual);
+WXDLLEXPORT int wxCharCodeOS2ToWX(int nKeySym);
+WXDLLEXPORT int wxCharCodeWXToOS2( int nId
+ ,bool* pbIsVirtual = NULL
+ );
-#endif
- // _WX_WINDOW_H_
+// ----------------------------------------------------------------------------
+// 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_