X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/78c91815008ef5888231c6c7f3678872e9e35ff6..b2eabfe86603fe932b61c513577a8e1b7d0fb815:/include/wx/msw/window.h diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index d9c3e215ad..ededcaeca7 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -17,20 +17,11 @@ // constants // --------------------------------------------------------------------------- -#if WXWIN_COMPATIBILITY_2_4 -// they're unused by wxWidgets... -enum -{ - wxKEY_SHIFT = 1, - wxKEY_CTRL = 2 -}; -#endif - // --------------------------------------------------------------------------- // wxWindow declaration for MSW // --------------------------------------------------------------------------- -class WXDLLEXPORT wxWindowMSW : public wxWindowBase +class WXDLLIMPEXP_CORE wxWindowMSW : public wxWindowBase { friend class wxSpinCtrl; friend class wxSlider; @@ -68,8 +59,17 @@ public: virtual void Raise(); virtual void Lower(); - virtual bool Show( bool show = true ); - virtual bool Enable( bool enable = true ); + virtual bool Show(bool show = true); + virtual bool ShowWithEffect(wxShowEffect effect, + unsigned timeout = 0) + { + return MSWShowWithEffect(true, effect, timeout); + } + virtual bool HideWithEffect(wxShowEffect effect, + unsigned timeout = 0) + { + return MSWShowWithEffect(false, effect, timeout); + } virtual void SetFocus(); virtual void SetFocusFromKbd(); @@ -81,10 +81,9 @@ public: virtual void Refresh( bool eraseBackground = true, const wxRect *rect = (const wxRect *) NULL ); virtual void Update(); - virtual void Freeze(); - virtual void Thaw(); - virtual void SetWindowStyleFlag( long style ); + virtual void SetWindowStyleFlag(long style); + virtual void SetExtraStyle(long exStyle); virtual bool SetCursor( const wxCursor &cursor ); virtual bool SetFont( const wxFont &font ); @@ -109,6 +108,12 @@ public: virtual bool ScrollLines(int lines); virtual bool ScrollPages(int pages); + virtual void SetLayoutDirection(wxLayoutDirection dir); + virtual wxLayoutDirection GetLayoutDirection() const; + virtual wxCoord AdjustForLayoutDirection(wxCoord x, + wxCoord width, + wxCoord widthTotal) const; + #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); #endif // wxUSE_DRAG_AND_DROP @@ -116,12 +121,6 @@ public: // Accept files for dragging virtual void DragAcceptFiles(bool accept); -#if WXWIN_COMPATIBILITY_2_4 - wxDEPRECATED( bool GetUseCtl3D() const ); - wxDEPRECATED( bool GetTransparentBackground() const ); - wxDEPRECATED( void SetTransparent(bool t = true) ); -#endif // WXWIN_COMPATIBILITY_2_4 - #ifndef __WXUNIVERSAL__ // Native resource loading (implemented in src/msw/nativdlg.cpp) // FIXME: should they really be all virtual? @@ -155,6 +154,29 @@ public: // does this window have deferred position and/or size? bool IsSizeDeferred() const; + // these functions allow to register a global handler for the given Windows + // message: it will be called from MSWWindowProc() of any window which gets + // this event if it's not processed before (i.e. unlike a hook procedure it + // does not override the normal processing) + // + // notice that if you want to process a message for a given window only you + // should override its MSWWindowProc() instead + + // type of the handler: it is called with the message parameters (except + // that the window object is passed instead of window handle) and should + // return true if it handled the message or false if it should be passed to + // DefWindowProc() + typedef bool (*MSWMessageHandler)(wxWindowMSW *win, + WXUINT nMsg, + WXWPARAM wParam, + WXLPARAM lParam); + + // install a handler, shouldn't be called more than one for the same message + static bool MSWRegisterMessageHandler(int msg, MSWMessageHandler handler); + + // unregister a previously registered handler + static void MSWUnregisterMessageHandler(int msg, MSWMessageHandler handler); + // implementation from now on // ========================== @@ -185,7 +207,7 @@ public: wxWindow *FindItemByHWND(WXHWND hWnd, bool controlOnly = false) const; // MSW only: true if this control is part of the main control - virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return false; }; + virtual bool ContainsHWND(WXHWND WXUNUSED(hWnd)) const { return false; } #if wxUSE_TOOLTIPS // MSW only: true if this window or any of its children have a tooltip @@ -206,6 +228,11 @@ public: WXDWORD MSWGetCreateWindowFlags(WXDWORD *exflags = NULL) const { return MSWGetStyle(GetWindowStyle(), exflags); } + // update the real underlying window style flags to correspond to the + // current wxWindow object style (safe to call even if window isn't fully + // created yet) + void MSWUpdateStyle(long flagsOld, long exflagsOld); + // translate wxWidgets coords into Windows ones suitable to be passed to // ::CreateWindow() // @@ -218,6 +245,9 @@ public: // get the HWND to be used as parent of this window with CreateWindow() virtual WXHWND MSWGetParent() const; + // get the Win32 window class name used by all wxWindow objects by default + static const wxChar *MSWGetRegisteredClassName(); + // creates the window of specified Windows class with given style, extended // style, title and geometry (default values // @@ -296,6 +326,8 @@ public: bool HandleSize(int x, int y, WXUINT flag); bool HandleSizing(wxRect& rect); bool HandleGetMinMaxInfo(void *mmInfo); + bool HandleEnterSizeMove(); + bool HandleExitSizeMove(); bool HandleShow(bool show, int status); bool HandleActivate(int flag, bool minimized, WXHWND activate); @@ -339,6 +371,9 @@ public: bool HandleSetCursor(WXHWND hWnd, short nHitTest, int mouseMsg); + bool HandlePower(WXWPARAM wParam, WXLPARAM lParam, bool *vetoed); + + // Window procedure virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); @@ -394,6 +429,10 @@ public: return true; } + // common part of Show/HideWithEffect() + bool MSWShowWithEffect(bool show, + wxShowEffect effect, + unsigned timeout); // Responds to colour changes: passes event on to children. void OnSysColourChanged(wxSysColourChangedEvent& event); @@ -404,6 +443,11 @@ public: // check if mouse is in the window bool IsMouseInWindow() const; + // check if a native double-buffering applies for this window + virtual bool IsDoubleBuffered() const; + + void SetDoubleBuffered(bool on); + // synthesize a wxEVT_LEAVE_WINDOW event and set m_mouseInWindow to false void GenerateMouseLeave(); @@ -412,6 +456,17 @@ public: virtual void OnInternalIdle(); protected: + // this allows you to implement standard control borders without + // repeating the code in different classes that are not derived from + // wxControl + virtual wxBorder GetDefaultBorderForControl() const; + + // choose the default border for this window + virtual wxBorder GetDefaultBorder() const; + + // Translate wxBORDER_THEME (and other border styles if necessary to the value + // that makes most sense for this Windows environment + virtual wxBorder TranslateBorder(wxBorder border) const; #if wxUSE_MENUS_NATIVE virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); @@ -445,8 +500,10 @@ protected: virtual void DoCaptureMouse(); virtual void DoReleaseMouse(); - // has the window been frozen by Freeze()? - bool IsFrozen() const { return m_frozenness > 0; } + virtual void DoEnable(bool enable); + + virtual void DoFreeze(); + virtual void DoThaw(); // this simply moves/resizes the given HWND which is supposed to be our // sibling (this is useful for controls which are composite at MSW level @@ -499,21 +556,18 @@ private: bool HandleJoystickEvent(WXUINT msg, int x, int y, WXUINT flags); bool HandleNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result); - // list of disabled children before last call to our Disable() - wxWindowList *m_childrenDisabled; - - // number of calls to Freeze() minus number of calls to Thaw() - unsigned int m_frozenness; // current defer window position operation handle (may be NULL) WXHANDLE m_hDWP; +protected: // When deferred positioning is done these hold the pending changes, and // are used for the default values if another size/pos changes is done on // this window before the group of deferred changes is completed. wxPoint m_pendingPosition; wxSize m_pendingSize; +private: #ifdef __POCKETPC__ bool m_contextMenuEnabled; #endif @@ -527,21 +581,13 @@ private: // inline functions // ---------------------------------------------------------------------------- -#if WXWIN_COMPATIBILITY_2_4 - -inline bool wxWindowMSW::GetUseCtl3D() const { return false; } -inline bool wxWindowMSW::GetTransparentBackground() const { return false; } -inline void wxWindowMSW::SetTransparent(bool WXUNUSED(t)) { } - -#endif // WXWIN_COMPATIBILITY_2_4 - // --------------------------------------------------------------------------- // global functions // --------------------------------------------------------------------------- // kbd code translation -WXDLLEXPORT int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam = 0); -WXDLLEXPORT WXWORD wxCharCodeWXToMSW(int id, bool *IsVirtual); +WXDLLIMPEXP_CORE int wxCharCodeMSWToWX(int keySym, WXLPARAM lParam = 0); +WXDLLIMPEXP_CORE WXWORD wxCharCodeWXToMSW(int id, bool *IsVirtual = NULL); // window creation helper class: before creating a new HWND, instantiate an // object of this class on stack - this allows to process the messages sent to @@ -553,21 +599,4 @@ public: ~wxWindowCreationHook(); }; -// ---------------------------------------------------------------------------- -// 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 -#if WXWIN_COMPATIBILITY_2_4 -WX_DECLARE_HASH(wxWindow, wxWindowList, wxWinHashTable); -#else -WX_DECLARE_HASH(wxWindowMSW, wxWindowList, wxWinHashTable); -#endif - -extern wxWinHashTable *wxWinHandleHash; - #endif // _WX_WINDOW_H_