X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0ed460c2e7802793d591c84f3cfdbff159c5549..7010b7bccd3674adaa1b53b371b0dae57d4ba4bf:/include/wx/msw/window.h diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index c0b172bb2f..212504c34f 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -6,7 +6,7 @@ // Created: 01/02/97 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_WINDOW_H_ @@ -27,6 +27,7 @@ #include "wx/list.h" #include "wx/region.h" #include "wx/msw/accel.h" +#include "wx/intl.h" #define wxKEY_SHIFT 1 #define wxKEY_CTRL 2 @@ -66,6 +67,7 @@ class WXDLLEXPORT wxPen; class WXDLLEXPORT wxIcon; class WXDLLEXPORT wxDC; class WXDLLEXPORT wxValidator; +class WXDLLEXPORT wxToolTip; #if wxUSE_DRAG_AND_DROP class WXDLLEXPORT wxDropTarget; @@ -81,6 +83,42 @@ WXDLLEXPORT_DATA(extern const char*) wxPanelNameStr; WXDLLEXPORT_DATA(extern const wxSize) wxDefaultSize; WXDLLEXPORT_DATA(extern const wxPoint) wxDefaultPosition; +//----------------------------------------------------------------------------- +// wxClientData +//----------------------------------------------------------------------------- + +class wxClientData +{ +public: + wxClientData() { } + virtual ~wxClientData() { } +}; + +//----------------------------------------------------------------------------- +// wxStringClientData +//----------------------------------------------------------------------------- + +class wxStringClientData: public wxClientData +{ +public: + wxStringClientData() { } + wxStringClientData( wxString &data ) { m_data = data; } + void SetData( wxString &data ) { m_data = data; } + wxString GetData() const { return m_data; } + +private: + wxString m_data; +}; + +// Clash with Windows headers +#ifdef GetCharWidth +#undef GetCharWidth +#endif + +#ifdef FindWindow +#undef FindWindow +#endif + class WXDLLEXPORT wxWindow : public wxEvtHandler { DECLARE_ABSTRACT_CLASS(wxWindow) @@ -162,39 +200,50 @@ public: // Get overall window size virtual void GetSize(int *width, int *height) const; - virtual wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); } - virtual wxRect GetRect() const { int w, h; int x, y; GetPosition(& x, & y); GetSize(& w, & h); return wxRect(x, y, w, h); } + wxSize GetSize() const { int w, h; GetSize(& w, & h); return wxSize(w, h); } // Get window position, relative to parent (or screen if no parent) virtual void GetPosition(int *x, int *y) const; - virtual wxPoint GetPosition() const { int x, y; GetPosition(&x, &y); return wxPoint(x, y); } + wxPoint GetPosition() const + { int x, y; GetPosition(&x, &y); return wxPoint(x, y); } + + // Get size and position + wxRect GetRect() const + { int x, y, w, h; GetPosition(& x, & y); GetSize(& w, & h); return wxRect(x, y, w, h); } // Get client (application-useable) size virtual void GetClientSize(int *width, int *height) const; - virtual wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); } + wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); } // Set overall size and position + // generic function, may be overriden in derived classes virtual void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); - virtual void SetSize(int width, int height) { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); } - virtual void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) + + void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) { SetSize(rect.x, rect.y, rect.width, rect.height, sizeFlags); } - virtual void SetSize(const wxSize& size) { SetSize(-1, -1, size.x, size.y, wxSIZE_USE_EXISTING); } + // set size only + void SetSize(int width, int height) + { SetSize(-1, -1, width, height, wxSIZE_USE_EXISTING); } + void SetSize(const wxSize& size) + { SetSize(-1, -1, size.x, size.y, wxSIZE_USE_EXISTING); } + + // set position only virtual void Move(int x, int y) { SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING); } - virtual void Move(const wxPoint& pt) { SetSize(pt.x, pt.y, -1, -1, wxSIZE_USE_EXISTING); } + void Move(const wxPoint& pt) { SetSize(pt.x, pt.y, -1, -1, wxSIZE_USE_EXISTING); } // Set client size virtual void SetClientSize(int width, int height); - virtual void SetClientSize(const wxSize& sz) { SetClientSize(sz.x, sz.y); } + void SetClientSize(const wxSize& sz) { SetClientSize(sz.x, sz.y); } // Convert client to screen coordinates virtual void ClientToScreen(int *x, int *y) const; - virtual wxPoint ClientToScreen(const wxPoint& pt) const + wxPoint ClientToScreen(const wxPoint& pt) const { int x = pt.x; int y = pt.y; ClientToScreen(& x, & y); return wxPoint(x, y); } // Convert screen to client coordinates virtual void ScreenToClient(int *x, int *y) const; - virtual wxPoint ScreenToClient(const wxPoint& pt) const + wxPoint ScreenToClient(const wxPoint& pt) const { int x = pt.x; int y = pt.y; ScreenToClient(& x, & y); return wxPoint(x, y); } // Set the focus to this window @@ -214,6 +263,17 @@ public: wxDropTarget *GetDropTarget() const { return m_pDropTarget; } #endif +#if wxUSE_TOOLTIPS + // tooltips + // create a tooltip with this text + void SetToolTip(const wxString &tip); + // pointer may be NULL to remove the tooltip + void SetToolTip(wxToolTip *tooltip); + // get the current tooltip (may return NULL if none) + wxToolTip* GetToolTip() const { return m_tooltip; } + +#endif // wxUSE_TOOLTIPS + // Accept files for dragging virtual void DragAcceptFiles(bool accept); @@ -324,7 +384,7 @@ public: // be searched) void PushEventHandler(wxEvtHandler *handler) ; wxEvtHandler *PopEventHandler(bool deleteHandler = FALSE) ; - + // Close the window by calling OnClose, posting a deletion virtual bool Close(bool force = FALSE); @@ -406,18 +466,20 @@ public: void UpdateWindowUI(); void OnEraseBackground(wxEraseEvent& event); - void OnChar(wxKeyEvent& event); + void OnKeyDown(wxKeyEvent& event); + void OnKeyUp(wxKeyEvent& event); void OnPaint(wxPaintEvent& event); + void OnChar(wxKeyEvent& event); void OnIdle(wxIdleEvent& event); // Does this window want to accept keyboard focus? virtual bool AcceptsFocus() const; - virtual void PrepareDC( wxDC &dc ) {}; + virtual void PrepareDC( wxDC& WXUNUSED(dc) ) {}; public: //////////////////////////////////////////////////////////////////////// //// IMPLEMENTATION - + // For implementation purposes - sometimes decorations make the client area // smaller virtual wxPoint GetClientAreaOrigin() const; @@ -564,7 +626,10 @@ public: virtual void MSWOnMouseEnter(int x, int y, WXUINT flags); virtual void MSWOnMouseLeave(int x, int y, WXUINT flags); - virtual void MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE); + // These return TRUE if an event handler was found, FALSE otherwise (not processed) + virtual bool MSWOnChar(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE); + virtual bool MSWOnKeyDown(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE); + virtual bool MSWOnKeyUp(WXWORD wParam, WXLPARAM lParam, bool isASCII = FALSE); virtual bool MSWOnActivate(int flag, bool minimized, WXHWND activate); virtual long MSWOnMDIActivate(long flag, WXHWND activate, WXHWND deactivate); @@ -590,13 +655,13 @@ public: // Detach "Window" menu from menu bar so it doesn't get deleted void MSWDetachWindowMenu(); - + inline WXFARPROC MSWGetOldWndProc() const; inline void MSWSetOldWndProc(WXFARPROC proc); // Define for each class of dialog and control virtual WXHBRUSH OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, - WXUINT message, WXWPARAM wParam, WXLPARAM lParam); + WXUINT message, WXWPARAM wParam, WXLPARAM lParam); inline void SetShowing(bool show); inline bool IsUserEnabled() const; @@ -618,8 +683,8 @@ public: protected: wxAcceleratorTable m_acceleratorTable; int m_windowId; - long m_windowStyle; // Store the window's style - wxEvtHandler * m_windowEventHandler; // Usually is 'this' + long m_windowStyle; // Store the window's style + wxEvtHandler * m_windowEventHandler; // Usually is 'this' wxLayoutConstraints * m_constraints; // Constraints for this window wxList * m_constraintsInvolvedIn; // List of constraints we're involved in wxSizer * m_windowSizer; // Window's top-level sizer (if any) @@ -631,7 +696,7 @@ protected: WXFARPROC m_oldWndProc; bool m_useCtl3D; // Using CTL3D for this control - bool m_inOnSize; // Protection against OnSize reentry + bool m_inOnSize; // Protection against OnSize reentry #ifndef _WX_WIN32__ // Pointer to global memory, for EDIT controls that need // special treatment to reduce USER area consumption. @@ -679,7 +744,7 @@ protected: #endif //USE_DRAG_AND_DROP public: - WXHWND m_hWnd; // MS Windows window handle + WXHWND m_hWnd; // MS Windows window handle WXUINT m_lastMsg; WXWPARAM m_lastWParam; WXLPARAM m_lastLParam; @@ -703,6 +768,11 @@ private: // common part of all ctors void Init(); + // the associated tooltip (may be NULL if none) +#if wxUSE_TOOLTIPS + wxToolTip *m_tooltip; +#endif // tooltips + DECLARE_EVENT_TABLE() }; @@ -714,7 +784,7 @@ inline int wxWindow::GetId() const { return m_windowId; } inline void wxWindow::SetId(int id) { m_windowId = id; } inline wxWindow *wxWindow::GetParent() const { return m_windowParent; } inline void wxWindow::SetParent(wxWindow *p) { m_windowParent = p; } -inline wxWindow *wxWindow::GetGrandParent() const { return (m_windowParent ? m_windowParent->m_windowParent : NULL); } +inline wxWindow *wxWindow::GetGrandParent() const { return (m_windowParent ? m_windowParent->m_windowParent : (wxWindow*) NULL); } inline wxList& wxWindow::GetChildren() const { return (wxList&) *m_children; } inline wxFont& wxWindow::GetFont() const { return (wxFont&) m_windowFont; } inline wxString wxWindow::GetName() const { return m_windowName; }