add wxGet/Set/HasWindowExStyle() helpers and use them

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54937 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2008-08-02 22:30:05 +00:00
parent 65751a0ee7
commit d66d050088
2 changed files with 38 additions and 23 deletions

View File

@ -23,6 +23,10 @@
#include "wx/log.h"
#if wxUSE_GUI
#include "wx/window.h"
#endif // wxUSE_GUI
class WXDLLIMPEXP_FWD_CORE wxFont;
class WXDLLIMPEXP_FWD_CORE wxWindow;
class WXDLLIMPEXP_FWD_CORE wxWindowBase;
@ -900,6 +904,21 @@ inline bool wxStyleHasBorder(long style)
wxSUNKEN_BORDER | wxDOUBLE_BORDER)) != 0;
}
inline long wxGetWindowExStyle(const wxWindow *win)
{
return ::GetWindowLong(GetHwndOf(win), GWL_EXSTYLE);
}
inline bool wxHasWindowExStyle(const wxWindow *win, long style)
{
return (wxGetWindowExStyle(win) & style) != 0;
}
inline long wxSetWindowExStyle(const wxWindow *win, long style)
{
return ::SetWindowLong(GetHwndOf(win), GWL_EXSTYLE, style);
}
// ----------------------------------------------------------------------------
// functions mapping HWND to wxWindow
// ----------------------------------------------------------------------------

View File

@ -281,12 +281,11 @@ static void EnsureParentHasControlParentStyle(wxWindow *parent)
*/
while ( parent && !parent->IsTopLevel() )
{
LONG exStyle = ::GetWindowLong(GetHwndOf(parent), GWL_EXSTYLE);
LONG exStyle = wxGetWindowExStyle(parent);
if ( !(exStyle & WS_EX_CONTROLPARENT) )
{
// force the parent to have this style
::SetWindowLong(GetHwndOf(parent), GWL_EXSTYLE,
exStyle | WS_EX_CONTROLPARENT);
wxSetWindowExStyle(parent, exStyle | WS_EX_CONTROLPARENT);
}
parent = parent->GetParent();
@ -1142,10 +1141,10 @@ void wxWindowMSW::SetLayoutDirection(wxLayoutDirection dir)
#ifdef __WXWINCE__
wxUnusedVar(dir);
#else
const HWND hwnd = GetHwnd();
wxCHECK_RET( hwnd, _T("layout direction must be set after window creation") );
wxCHECK_RET( GetHwnd(),
_T("layout direction must be set after window creation") );
LONG styleOld = ::GetWindowLong(hwnd, GWL_EXSTYLE);
LONG styleOld = wxGetWindowExStyle(this);
LONG styleNew = styleOld;
switch ( dir )
@ -1165,7 +1164,7 @@ void wxWindowMSW::SetLayoutDirection(wxLayoutDirection dir)
if ( styleNew != styleOld )
{
::SetWindowLong(hwnd, GWL_EXSTYLE, styleNew);
wxSetWindowExStyle(this, styleNew);
}
#endif
}
@ -1175,12 +1174,10 @@ wxLayoutDirection wxWindowMSW::GetLayoutDirection() const
#ifdef __WXWINCE__
return wxLayout_Default;
#else
const HWND hwnd = GetHwnd();
wxCHECK_MSG( hwnd, wxLayout_Default, _T("invalid window") );
wxCHECK_MSG( GetHwnd(), wxLayout_Default, _T("invalid window") );
return ::GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_LAYOUTRTL
? wxLayout_RightToLeft
: wxLayout_LeftToRight;
return wxHasWindowExStyle(this, WS_EX_LAYOUTRTL) ? wxLayout_RightToLeft
: wxLayout_LeftToRight;
#endif
}
@ -1391,14 +1388,14 @@ void wxWindowMSW::MSWUpdateStyle(long flagsOld, long exflagsOld)
}
// and the extended style
long exstyleReal = ::GetWindowLong(GetHwnd(), GWL_EXSTYLE);
long exstyleReal = wxGetWindowExStyle(this);
if ( exstyle != exstyleOld )
{
exstyleReal &= ~exstyleOld;
exstyleReal |= exstyle;
::SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyleReal);
wxSetWindowExStyle(this, exstyleReal);
// ex style changes don't take effect without calling SetWindowPos
callSWP = true;
@ -1606,7 +1603,7 @@ bool wxWindowMSW::Reparent(wxWindowBase *parent)
::SetParent(hWndChild, hWndParent);
#ifndef __WXWINCE__
if ( ::GetWindowLong(hWndChild, GWL_EXSTYLE) & WS_EX_CONTROLPARENT )
if ( wxHasWindowExStyle(this, WS_EX_CONTROLPARENT) )
{
EnsureParentHasControlParentStyle(GetParent());
}
@ -2550,8 +2547,7 @@ bool wxWindowMSW::MSWShouldPreProcessMessage(WXMSG* msg)
{
wxWindow * const win = node->GetData();
if ( win->CanAcceptFocus() &&
!(::GetWindowLong(GetHwndOf(win), GWL_EXSTYLE) &
WS_EX_CONTROLPARENT) )
!wxHasWindowExStyle(win, WS_EX_CONTROLPARENT) )
{
// it shouldn't hang...
canSafelyCallIsDlgMsg = true;
@ -4267,20 +4263,20 @@ bool wxWindowMSW::HandlePower(WXWPARAM WXUNUSED_IN_WINCE(wParam),
bool wxWindowMSW::IsDoubleBuffered() const
{
const wxWindowMSW *wnd = this;
do {
long style = ::GetWindowLong(GetHwndOf(wnd), GWL_EXSTYLE);
if ( (style & WS_EX_COMPOSITED) != 0 )
do
{
if ( wxHasWindowExStyle(wnd, WS_EX_COMPOSITED) )
return true;
wnd = wnd->GetParent();
} while ( wnd && !wnd->IsTopLevel() );
return false;
}
void wxWindowMSW::SetDoubleBuffered(bool on)
{
// Get the current extended style bits
long exstyle = ::GetWindowLong(GetHwnd(), GWL_EXSTYLE);
long exstyle = wxGetWindowExStyle(this);
// Twiddle the bit as needed
if ( on )
@ -4289,7 +4285,7 @@ void wxWindowMSW::SetDoubleBuffered(bool on)
exstyle &= ~WS_EX_COMPOSITED;
// put it back
::SetWindowLong(GetHwnd(), GWL_EXSTYLE, exstyle);
wxSetWindowExStyle(this, exstyle);
}
// ---------------------------------------------------------------------------