X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e320a79f187558effb04d92020b470372bbe456..26531700c7ec84872c60899ce6219954499086da:/include/wx/os2/window.h?ds=sidebyside diff --git a/include/wx/os2/window.h b/include/wx/os2/window.h index e7e3812265..1bf252de9a 100644 --- a/include/wx/os2/window.h +++ b/include/wx/os2/window.h @@ -1,33 +1,34 @@ ///////////////////////////////////////////////////////////////////////////// // Name: 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 -#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 @@ -39,130 +40,132 @@ class WXDLLEXPORT wxButton; // 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 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 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 // -------------------------- @@ -170,71 +173,91 @@ public: // 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 char* 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 @@ -242,195 +265,327 @@ public: // 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 OS2OnMouseXXX) + void InitMouseEvent( wxMouseEvent& rEvent + ,int nX + ,int nY + ,WXUINT uFlags + ); - // initialize various fields of wxMouseEvent (common part of MSWOnMouseXXX) - void InitMouseEvent(wxMouseEvent& event, int x, int y, WXUINT flags); + 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 + ); + +// ---------------------------------------------------------------------------- +// 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_