use SS_CENTERIMAGE to prevent wxStaticBitmap from stretching its bitmap; also a face lift for control creation code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-12-21 14:35:18 +00:00
parent 168954a1d1
commit 46a5e01e86
3 changed files with 59 additions and 63 deletions

View File

@ -19,6 +19,10 @@ wxGTK:
- fixed wxMenu::Remove (John Skiff and Benjamin Williams)
wxMSW:
- wxStaticBitmap doesn't stretch its bitmap any longer (like other ports)
All:
- Implemented GetEditControl for wxGenericTreeCtrl (Peter

View File

@ -36,6 +36,8 @@ public:
long style = 0,
const wxString& name = wxStaticBitmapNameStr)
{
Init();
Create(parent, id, label, pos, size, style, name);
}
@ -55,11 +57,23 @@ public:
// assert failure is provoked by an attempt to get an icon from bitmap or
// vice versa
wxIcon GetIcon() const
{ wxASSERT( m_isIcon ); return *(wxIcon *)m_image; }
wxBitmap GetBitmap() const
{ wxASSERT( !m_isIcon ); return *(wxBitmap *)m_image; }
{
wxASSERT_MSG( m_isIcon, _T("no icon in this wxStaticBitmap") );
// IMPLEMENTATION
return *(wxIcon *)m_image;
}
wxBitmap GetBitmap() const
{
wxASSERT_MSG( !m_isIcon, _T("no bitmap in this wxStaticBitmap") );
return *(wxBitmap *)m_image;
}
// implementation only from now on
// -------------------------------
// implement base class virtuals
#ifdef __WIN16__
virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
#endif // __WIN16__
@ -67,7 +81,9 @@ public:
protected:
virtual wxSize DoGetBestSize() const;
virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
// ctor/dtor helpers
void Init() { m_isIcon = TRUE; m_image = NULL; }
void Free();

View File

@ -90,33 +90,16 @@ static wxGDIImage* ConvertImage( const wxGDIImage& bitmap )
#endif
bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
bool wxStaticBitmap::Create(wxWindow *parent,
wxWindowID id,
const wxGDIImage& bitmap,
const wxPoint& pos,
const wxSize& size,
long style,
const wxString& name)
{
Init();
SetName(name);
if (parent)
parent->AddChild(this);
m_backgroundColour = parent->GetBackgroundColour() ;
m_foregroundColour = parent->GetForegroundColour() ;
if ( id == -1 )
m_windowId = (int)NewControlId();
else
m_windowId = id;
int x = pos.x;
int y = pos.y;
int width = size.x;
int height = size.y;
m_windowStyle = style;
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
return FALSE;
// we may have either bitmap or icon: if a bitmap with mask is passed, we
// will transform it to an icon ourselves because otherwise the mask will
@ -127,55 +110,48 @@ bool wxStaticBitmap::Create(wxWindow *parent, wxWindowID id,
#ifdef __WIN16__
wxASSERT_MSG( !m_isIcon, "Icons are not supported in wxStaticBitmap under WIN16." );
image = &bitmap;
#endif
#ifndef __WIN16__
#else // Win32
image = ConvertImage( bitmap );
m_isIcon = image->IsKindOf( CLASSINFO(wxIcon) );
#endif
#endif // Win16/32
// create the native control
if ( !MSWCreateControl(
#ifdef __WIN32__
// create a static control with either SS_BITMAP or SS_ICON style depending
// on what we have here
const wxChar *classname = wxT("STATIC");
int winstyle = m_isIcon ? SS_ICON : SS_BITMAP;
_T("STATIC"),
#else // Win16
const wxChar *classname = wxT("BUTTON");
int winstyle = BS_OWNERDRAW;
#endif // Win32
if ( m_windowStyle & wxCLIP_SIBLINGS )
winstyle |= WS_CLIPSIBLINGS;
m_hWnd = (WXHWND)::CreateWindow
(
classname,
wxT(""),
// NOT DISABLED!!! We want to move it in Dialog Editor.
winstyle | WS_CHILD | WS_VISIBLE /* | WS_CLIPSIBLINGS */ , // | WS_DISABLED,
0, 0, 0, 0,
(HWND)parent->GetHWND(),
(HMENU)m_windowId,
wxGetInstance(),
NULL
);
wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
_T("BUTTON"),
#endif // Win32/16
_T(""), pos, size, style) )
{
// control creation failed
return FALSE;
}
// no need to delete the new image
SetImageNoCopy( image );
// Subclass again for purposes of dialog editing mode
SubclassWin(m_hWnd);
SetFont(GetParent()->GetFont());
SetSize(x, y, width, height);
SetImageNoCopy(image);
return TRUE;
}
WXDWORD wxStaticBitmap::MSWGetStyle(long style, WXDWORD *exstyle) const
{
WXDWORD msStyle = wxControl::MSWGetStyle(style, exstyle);
#ifdef __WIN32__
// what kind of control are we?
msStyle |= m_isIcon ? SS_ICON : SS_BITMAP;
// we use SS_CENTERIMAGE to prevent the control from resizing the bitmap to
// fit to its size -- this is unexpected and doesn't happen in other ports
msStyle |= SS_CENTERIMAGE;
#else // Win16
msStyle |= BS_OWNERDRAW;
#endif // Win32/16
return msStyle;
}
bool wxStaticBitmap::ImageIsOk() const
{
return m_image && m_image->Ok();