/////////////////////////////////////////////////////////////////////////////
-// Name: stattext.cpp
+// Name: src/msw/stattext.cpp
// Purpose: wxStaticText
// Author: Julian Smart
// Modified by:
#pragma hdrstop
#endif
+#if wxUSE_STATTEXT
+
#ifndef WX_PRECOMP
#include "wx/event.h"
#include "wx/app.h"
#include "wx/msw/private.h"
#include <stdio.h>
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxStaticText, wxControl)
-#endif
bool wxStaticText::Create(wxWindow *parent, wxWindowID id,
const wxString& label,
m_windowStyle = style;
- long msStyle = WS_CHILD|WS_VISIBLE;
+ long msStyle = WS_CHILD | WS_VISIBLE;
+
+ if ( m_windowStyle & wxCLIP_SIBLINGS )
+ msStyle |= WS_CLIPSIBLINGS;
if (m_windowStyle & wxALIGN_CENTRE)
msStyle |= SS_CENTER;
else if (m_windowStyle & wxALIGN_RIGHT)
wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static ctrl") );
-#if wxUSE_CTL3D
-/*
- if (!(GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS))
- Ctl3dSubclassCtl(static_item);
-*/
-#endif
-
SubclassWin(m_hWnd);
- SetFont(parent->GetFont());
+ wxControl::SetFont(parent->GetFont());
SetSize(x, y, width, height);
return TRUE;
}
-wxSize wxStaticText::DoGetBestSize()
+wxSize wxStaticText::DoGetBestSize() const
{
wxString text(wxGetWindowText(GetHWND()));
return wxSize(widthTextMax, heightTextTotal);
}
+void wxStaticText::DoSetSize(int x, int y, int w, int h, int sizeFlags)
+{
+ // we need to refresh the window after changing its size as the standard
+ // control doesn't always update itself properly
+ wxStaticTextBase::DoSetSize(x, y, w, h, sizeFlags);
+
+ Refresh();
+}
+
void wxStaticText::SetLabel(const wxString& label)
{
- SetWindowText(GetHwnd(), label);
+ wxStaticTextBase::SetLabel(label);
// adjust the size of the window to fit to the label unless autoresizing is
// disabled
}
}
-WXHBRUSH wxStaticText::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor,
- WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
-{
-/*
-#if wxUSE_CTL3D
- if ( m_useCtl3D )
- {
- HBRUSH hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
-
- if (hbrush != (HBRUSH) 0)
- return hbrush;
- else
- return (HBRUSH)MSWDefWindowProc(message, wParam, lParam);
- }
-#endif
-*/
-
- if (GetParent()->GetTransparentBackground())
- SetBkMode((HDC) pDC, TRANSPARENT);
- else
- SetBkMode((HDC) pDC, OPAQUE);
- ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue()));
- ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue()));
+bool wxStaticText::SetFont(const wxFont& font)
+{
+ bool ret = wxControl::SetFont(font);
- wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID);
+ // adjust the size of the window to fit to the label unless autoresizing is
+ // disabled
+ if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
+ {
+ DoSetSize(-1, -1, -1, -1, wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT);
+ }
- // Note that this will be cleaned up in wxApp::OnIdle, if backgroundBrush
- // has a zero usage count.
-// backgroundBrush->RealizeResource();
- return (WXHBRUSH) backgroundBrush->GetResourceHandle();
+ return ret;
}
long wxStaticText::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
{
- // Ensure that static items get messages. Some controls don't like this
- // message to be intercepted (e.g. RichEdit), hence the tests.
- if (nMsg == WM_NCHITTEST)
- return (long)HTCLIENT;
-
- return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
+ // Ensure that static items get messages. Some controls don't like this
+ // message to be intercepted (e.g. RichEdit), hence the tests.
+ // Messes up display with Windows XP, apparently, so have to
+ // do explicit hit-testing in wxWindowMSW.
+#if 0
+ if (nMsg == WM_NCHITTEST)
+ return (long)HTCLIENT;
+#endif
+ return wxWindow::MSWWindowProc(nMsg, wParam, lParam);
}
-
-
+#endif // wxUSE_STATTEXT