// Purpose: wxWindow class
// Author: David Webster
// Modified by:
-// Created: ??/??/98
+// Created: 10/12/99
// RCS-ID: $Id$
-// Copyright: (c) AUTHOR
-// Licence: wxWindows licence
+// Copyright: (c) David Webster
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_WINDOW_H_
#define _WX_WINDOW_H_
-#ifdef __GNUG__
-#pragma interface "window.h"
-#endif
+#define wxUSE_MOUSEEVENT_HACK 0
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
#define INCL_DOS
#define INCL_PM
+#define INCL_GPI
#include <os2.h>
-#define wxKEY_SHIFT 1
-#define wxKEY_CTRL 2
// ---------------------------------------------------------------------------
// forward declarations
// ---------------------------------------------------------------------------
-
-class WXDLLEXPORT wxWindow;
-class WXDLLEXPORT wxButton;
-
-#if wxUSE_DRAG_AND_DROP
-class WXDLLEXPORT wxDropTarget;
-#endif
-
-#if wxUSE_WX_RESOURCES
-class WXDLLEXPORT wxResourceTable;
-class WXDLLEXPORT wxItemResource;
+#ifndef CW_USEDEFAULT
+# define CW_USEDEFAULT ((int)0x80000000)
#endif
-WXDLLEXPORT_DATA(extern const char*) wxPanelNameStr;
-
-WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize;
-WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition;
-
-class WXDLLEXPORT wxWindow: public wxWindowBase
-{
- DECLARE_ABSTRACT_CLASS(wxWindow)
-
- friend class wxDC;
- friend class wxPaintDC;
-
-public:
- wxWindow() { Init(); };
- inline wxWindow( wxWindow* parent
- ,wxWindowID id
- ,const wxPoint& pos = wxDefaultPosition
- ,const wxSize& size = wxDefaultSize
- ,long style = 0
- ,const wxString& name = wxPanelNameStr
- )
- {
- 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
- );
-
// ---------------------------------------------------------------------------
-// wxWindowBase pure virtual implementations
+// forward declarations
// ---------------------------------------------------------------------------
- // Z order
- virtual void Raise();
- virtual void Lower();
- // Set the focus to this window
- virtual void SetFocus();
- // Warp the pointer the given position
- virtual void WarpPointer(int x_pos, int y_pos) ;
- // Capture/release mouse
- virtual void CaptureMouse();
- virtual void ReleaseMouse();
- // Send the window a refresh event
- virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL);
- // Clear the window
- virtual void Clear();
- // Set window's font
- virtual bool SetFont(const wxFont& f);
- // Get character size
- virtual int GetCharHeight() const;
- virtual int GetCharWidth() const;
- virtual void GetTextExtent( const wxString& string
- ,int* x
- ,int* y
- ,int* descent = NULL
- ,int* externalLeading = NULL
- ,const wxFont* theFont = NULL
- ) const;
-
- // Configure the window's scrollbar
- 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 GetScrollRange(int orient) const;
- virtual int GetScrollThumb(int orient) const;
- virtual void ScrollWindow( int dx
- ,int dy
- ,const wxRect* rect = NULL
- );
-#if wxUSE_DRAG_AND_DROP
- void SetDropTarget(wxDropTarget *pDropTarget);
-#endif
- // coordinates translation
- virtual void DoClientToScreen( int *x, int *y ) const;
- virtual void DoScreenToClient( int *x, int *y ) const;
-
- // retrieve the position/size of the window
- virtual void DoGetPosition( int *x, int *y ) const;
- virtual void DoGetSize( int *width, int *height ) const;
- virtual void DoGetClientSize( int *width, int *height ) const;
-
- // this is the virtual function to be overriden in any derived class which
- // wants to change how SetSize() or Move() works - it is called by all
- // versions of these functions in the base class
- virtual void DoSetSize(int x, int y,
- int width, int height,
- int sizeFlags = wxSIZE_AUTO);
-
- // same as DoSetSize() for the client size
- virtual void DoSetClientSize(int width, int height);
- virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
+class WXDLLEXPORT wxButton;
// ---------------------------------------------------------------------------
-// wxWindowBase virtual implementations that need to be overriden
+// constants
// ---------------------------------------------------------------------------
- // Fit the window around the items
- virtual void Fit();
- // Show or hide the window
- virtual bool Show(bool show); // check if base implementation is OK
- // Enable or disable the window
- virtual bool Enable(bool enable); // check if base implementation is OK
- // Set the cursor
- virtual bool SetCursor(const wxCursor& cursor); // check if base implementation is OK
+// FIXME does anybody use those? they're unused by wxWindows...
+enum
+{
+ wxKEY_SHIFT = 1,
+ wxKEY_CTRL = 2
+};
// ---------------------------------------------------------------------------
-// additional functions
+// wxWindow declaration for OS/2 PM
// ---------------------------------------------------------------------------
- // Dialog support: override these and call
- // base class members to add functionality
- // that can't be done using validators.
- void SetClientSize( int width, int height )
- { DoSetClientSize(width, height); }
-
- void SetClientSize( const wxSize& size )
- { DoSetClientSize(size.x, size.y); }
-
- void SetClientSize(const wxRect& rect)
- { SetClientSize( rect.width, rect.height ); }
+class WXDLLEXPORT wxWindowOS2 : public wxWindowBase
+{
+public:
+ wxWindowOS2()
+ {
+ Init();
+ }
- // Validate controls. If returns FALSE,
- // validation failed: don't quit
- virtual bool Validate();
+ 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
+ );
+ }
- // Return code for dialogs
- inline void SetReturnCode(int retCode);
- inline int GetReturnCode();
+ virtual ~wxWindowOS2();
+ bool Create( wxWindow* pParent
+ ,wxWindowID vId
+ ,const wxPoint& rPos = wxDefaultPosition
+ ,const wxSize& rSize = wxDefaultSize
+ ,long lStyle = 0
+ ,const wxString& rName = wxPanelNameStr
+ );
- // Get the window with the focus
- static wxWindow *FindFocus();
+ // implement base class pure virtuals
+ virtual void SetTitle(const wxString& rTitle);
+ virtual wxString GetTitle(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 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 Clear(void);
+ 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* pDropTarget);
+#endif // wxUSE_DRAG_AND_DROP
// Accept files for dragging
- virtual void DragAcceptFiles(bool accept);
-
- // Most windows have the concept of a label; for frames, this is the
- // title; for items, this is the label or button text.
- inline virtual wxString GetLabel() const { return GetTitle(); }
+ virtual void DragAcceptFiles(bool bAccept);
+
+#if WXWIN_COMPATIBILITY
+ // Set/get scroll attributes
+ virtual void SetScrollRange( int nOrient
+ ,int nRange
+ ,bool bRefresh = TRUE
+ );
+ virtual void SetScrollPage( int nOrient
+ ,int nPage
+ ,bool bRefresh = TRUE
+ );
+ virtual int OldGetScrollRange(int nOrient) const;
+ virtual int GetScrollPage(int nOrient) const;
+
+ //
+ // event handlers
+ //
+ // Handle a control command
+ virtual void OnCommand( wxWindow& rWin
+ ,wxCommandEvent& rEvent
+ );
+
+ // Override to define new behaviour for default action (e.g. double
+ // clicking on a listbox)
+ virtual void OnDefaultAction(wxControl* WXUNUSED(pInitiatingItem)) { }
+#endif // WXWIN_COMPATIBILITY
#if wxUSE_CARET && WXWIN_COMPATIBILITY
- // Caret manipulation
- virtual void CreateCaret(int w, int h);
- virtual void CreateCaret(const wxBitmap *bitmap);
- virtual void DestroyCaret();
- virtual void ShowCaret(bool show);
- virtual void SetCaretPos(int x, int y);
- virtual void GetCaretPos(int *x, int *y) const;
-#endif
-
- // Handle a control command
- virtual void OnCommand(wxWindow& win, wxCommandEvent& event);
-
- // Get the default button, if there is one
- inline virtual wxButton *GetDefaultItem() const;
- inline virtual void SetDefaultItem(wxButton *but);
-
- // Override to define new behaviour for default action (e.g. double clicking
- // on a listbox)
- virtual void OnDefaultAction(wxControl *initiatingItem);
-
- // EventHandlers
- void OnEraseBackground(wxEraseEvent& event);
- void OnChar(wxKeyEvent& event);
- void OnKeyDown(wxKeyEvent& event);
- void OnKeyUp(wxKeyEvent& event);
- void OnPaint(wxPaintEvent& event);
- void OnIdle(wxIdleEvent& event);
-
- // Accessors
-
- WXHWND GetHWND() const { return m_hWnd; }
- void SetHWND(WXHWND hWnd) { m_hWnd = hWnd; }
- virtual WXWidget GetHandle() const { return GetHWND(); }
+ void CreateCaret( int nWidth
+ ,int nHeight
+ );
+ void CreateCaret(const wxBitmap* pBitmap);
+ void DestroyCaret(void);
+ void ShowCaret(bool bShow);
+ void SetCaretPos( int nX
+ ,int nY
+ );
+ void GetCaretPos( int* pX
+ ,int* pY
+ ) const;
+#endif // wxUSE_CARET
+
+#ifndef __WXUNIVERSAL__
+ // Native resource loading (implemented in src/os2/nativdlg.cpp)
+ // FIXME: should they really be all virtual?
+ 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(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 OnSetFocus(wxFocusEvent& rEvent);
+ void OnEraseBackground(wxEraseEvent& rEvent);
+ void OnIdle(wxIdleEvent& rEvent);
public:
-// ---------------------------------------------------------------------------
-// IMPLEMENTATION
-// ---------------------------------------------------------------------------
-
// 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);
+ virtual wxPoint GetClientAreaOrigin(void) const;
// Windows subclassing
void SubclassWin(WXHWND hWnd);
- void UnsubclassWin();
+ void UnsubclassWin(void);
- WXFARPROC OS2GetOldWndProc() const { return m_oldWndProc; }
- void OS2SetOldWndProc(WXFARPROC proc) { m_oldWndProc = proc; }
+ WXFARPROC OS2GetOldWndProc(void) const { return m_fnOldWndProc; }
+ void OS2SetOldWndProc(WXFARPROC fnProc) { m_fnOldWndProc = fnProc; }
- wxWindow *FindItem(long id) const;
- wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = FALSE) const;
+ wxWindow* FindItem(long lId) const;
+ wxWindow* FindItemByHWND( WXHWND hWnd
+ ,bool bControlOnly = FALSE
+ ) const;
+ // Make a Windows extended style from the given wxWindows window style ?? applicable to OS/2??
+ static WXDWORD MakeExtendedStyle( long lStyle
+ ,bool bEliminateBorders = TRUE
+ );
// Determine whether 3D effects are wanted
- WXDWORD Determine3DEffects(WXDWORD defaultBorderStyle, bool *want3D) const;
+ WXDWORD Determine3DEffects( WXDWORD dwDefaultBorderStyle
+ ,bool* pbWant3D
+ ) const;
// PM only: TRUE if this control is part of the main control
virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return FALSE; };
- // Executes the default message
- virtual long Default();
-
- // Constraint implementation
- void UnsetConstraints(wxLayoutConstraints *c);
- // Back-pointer to other windows we're involved with, so if we delete
- // this window, we must delete any constraints we're involved with.
-
- wxObject *GetChild(int number) const ;
+ // translate wxWindows 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 wxWindows 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); }
+
+
+ // returns TRUE if the window has been created
+ bool OS2Create( PSZ zClass
+ ,const char* zTitle
+ ,WXDWORD dwStyle
+ ,const wxPoint& rPos
+ ,const wxSize& rSize
+ ,void* pCtlData
+ ,WXDWORD dwExStyle
+ ,bool bIsChild
+ );
+ virtual bool OS2Command( WXUINT uParam
+ ,WXWORD nId
+ );
+
+#if WXWIN_COMPATIBILITY
+ wxObject* GetChild(int nNumber) const;
+ virtual void OS2DeviceToLogical( float* pfX
+ ,float* pfY
+ ) const;
+#endif // WXWIN_COMPATIBILITY
+
+#ifndef __WXUNIVERSAL__
+ // Create an appropriate wxWindow from a HWND
+ virtual wxWindow* CreateWindowFromHWND( wxWindow* pParent
+ ,WXHWND hWnd
+ );
+
+ // Make sure the window style reflects the HWND style (roughly)
+ virtual void AdoptAttributesFromHWND(void);
+#endif
- // Transfers data to any child controls
- void OnInitDialog(wxInitDialogEvent& event);
+ // Setup background and foreground colours correctly
+ virtual void SetupColours(void);
+
+ // ------------------------------------------------------------------------
+ // helpers for message handlers: these perform the same function as the
+ // message crackers from <windowsx.h> - they unpack WPARAM and LPARAM into
+ // the correct parameters
+ // ------------------------------------------------------------------------
+
+ 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 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 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 OS2OnXXX() function
+ // and if the derived class wants to process them, it should override
+ // OS2WindowProc() directly.
+
+ // scroll event (both horizontal and vertical)
+ virtual bool OS2OnScroll( int nOrientation
+ ,WXWORD nSBCode
+ ,WXWORD pos
+ ,WXHWND control
+ );
+
+ // owner-drawn controls need to process these messages
+ virtual bool OS2OnDrawItem( int nId
+ ,WXDRAWITEMSTRUCT* pItem
+ );
+ virtual bool OS2OnMeasureItem( int nId
+ ,WXMEASUREITEMSTRUCT* pItem
+ );
+
+ // the rest are not virtual
+ bool HandleCreate( WXLPCREATESTRUCT vCs
+ ,bool* pMayCreate
+ );
+ bool HandleInitDialog(WXHWND hWndFocus);
+ 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 MRESULT OS2WindowProc( WXUINT uMsg
+ ,WXWPARAM wParam
+ ,WXLPARAM lParam
+ );
+
+ // Calls an appropriate default window procedure
+ 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 uCtlColor
+ ,WXUINT uMessage
+ ,WXWPARAM wParam
+ ,WXLPARAM lParam
+ );
+
+#if WXWIN_COMPATIBILITY
+ void SetShowing(bool bShow) { (void)Show(show); }
+ bool IsUserEnabled(void) const { return IsEnabled(); }
+#endif // WXWIN_COMPATIBILITY
+
+ // Responds to colour changes: passes event on to children.
+ void OnSysColourChanged(wxSysColourChangedEvent& rEvent);
+
+ // 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;
+
+ // the old window proc (we subclass all windows)
+ WXFARPROC m_fnOldWndProc;
+
+ // additional (OS2 specific) flags
+ bool m_bUseCtl3D:1; // Using CTL3D for this control
+ bool m_bBackgroundTransparent:1;
+ bool m_bMouseInWindow:1;
+ bool m_bDoubleClickAllowed:1;
+ bool m_bLastKeydownProcessed:1;
+ bool m_bWinCaptured:1;
+ WXDWORD m_dwExStyle;
- // Caret data
- int m_caretWidth;
- int m_caretHeight;
- bool m_caretEnabled;
- bool m_caretShown;
+ // the size of one page for scrolling
+ int m_nXThumbSize;
+ int m_nYThumbSize;
+
+#if wxUSE_MOUSEEVENT_HACK
+ // the coordinates of the last mouse event and the type of it
+ long m_lLastMouseX,
+ long m_lLastMouseY;
+ int m_nLastMouseEvent;
+#endif // wxUSE_MOUSEEVENT_HACK
+
+ 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;
+
+ // implement the base class pure virtuals
+ 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
+ );
- wxButton * m_defaultItem;
+#if wxUSE_TOOLTIPS
+ virtual void DoSetToolTip(wxToolTip* pTip);
+#endif // wxUSE_TOOLTIPS
-public:
- WXFARPROC m_oldWndProc;
- int m_returnCode;
- bool m_isBeingDeleted;
- bool m_isShown;
- bool m_winCaptured;
- bool m_mouseInWindow;
- bool m_backgroundTransparent;
- // handles
- WXHWND m_hWnd;
- WXHMENU m_hMenu; // Menu, if any
+ int GetOS2ParentHeight(wxWindowOS2* pParent);
- // the size of one page for scrolling
- int m_xThumbSize;
- int m_yThumbSize;
- long m_lDlgCode;
+private:
+ // common part of all ctors
+ void Init(void);
+
+ // the (non-virtual) handlers for the events
+ 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;
+
+
+ DECLARE_DYNAMIC_CLASS(wxWindowOS2);
+ DECLARE_NO_COPY_CLASS(wxWindowOS2)
+ DECLARE_EVENT_TABLE()
-DECLARE_EVENT_TABLE()
private:
- void Init();
- void PMDetachWindowMenu();
-};
+ HWND m_hWndScrollBarHorz;
+ HWND m_hWndScrollBarVert;
+ SWP m_vWinSwp;
-////////////////////////////////////////////////////////////////////////
-//// INLINES
+ // Virtual function hiding supression
+ inline virtual bool Reparent(wxWindowBase* pNewParent)
+ { return(wxWindowBase::Reparent(pNewParent));};
+}; // end of wxWindow
-inline wxButton *wxWindow::GetDefaultItem() const { return m_defaultItem; }
-inline void wxWindow::SetDefaultItem(wxButton *but) { m_defaultItem = but; }
-inline void wxWindow::SetReturnCode(int retCode) { m_returnCode = retCode; }
-inline int wxWindow::GetReturnCode() { return m_returnCode; }
+class wxWindowCreationHook
+{
+public:
+ wxWindowCreationHook(wxWindow* pWinBeingCreated);
+ ~wxWindowCreationHook();
+}; // end of CLASS wxWindowCreationHook
-// Get the active window.
-wxWindow* WXDLLEXPORT wxGetActiveWindow();
+// ---------------------------------------------------------------------------
+// global functions
+// ---------------------------------------------------------------------------
+// kbd code translation
+WXDLLEXPORT int wxCharCodeOS2ToWX(int nKeySym);
+WXDLLEXPORT int wxCharCodeWXToOS2( int nId
+ ,bool* pbIsVirtual
+ );
#endif
// _WX_WINDOW_H_