📄 statpict.cpp
字号:
/////////////////////////////////////////////////////////////////////////////// Name: statpict.cpp// Purpose: wxStaticPicture// Author: Wade Brainerd (wadeb@wadeb.com)// Modified by:// Created: 2003-05-01// RCS-ID:// Copyright: (c) Wade Brainerd// Licence: wxWindows licence/////////////////////////////////////////////////////////////////////////////#include "wx/wxprec.h"#include "wx/defs.h"#include "wx/gizmos/statpict.h"#include "wx/dcclient.h"IMPLEMENT_DYNAMIC_CLASS(wxStaticPicture, wxControl)WXDLLIMPEXP_GIZMOS const wxChar * wxStaticPictureNameStr = wxT("staticPicture"); /* * wxStaticPicture */BEGIN_EVENT_TABLE(wxStaticPicture, wxControl) EVT_PAINT(wxStaticPicture::OnPaint)END_EVENT_TABLE()bool wxStaticPicture::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos, const wxSize& s, long style, const wxString& name){ SetName(name); wxSize size = s ; if ( bitmap.Ok() ) { if ( size.x == wxDefaultCoord ) size.x = bitmap.GetWidth() ; if ( size.y == wxDefaultCoord ) size.y = bitmap.GetHeight() ; } m_backgroundColour = parent->GetBackgroundColour() ; m_foregroundColour = parent->GetForegroundColour() ; Bitmap = bitmap; Align = 0; Scale = 0; ScaleX = ScaleY = 1;#ifndef __WXMSW__ LastScaleX = LastScaleY = -1; if ( Bitmap.Ok() ) OriginalImage = Bitmap.ConvertToImage();#endif if ( id == wxID_ANY ) m_windowId = (int)NewControlId(); else m_windowId = id; m_windowStyle = style; bool ret = wxControl::Create( parent, id, pos, size, style, wxDefaultValidator, name ); SetInitialSize( size ) ; return ret;}void wxStaticPicture::SetBitmap( const wxBitmap& bmp ){ Bitmap = bmp;#ifndef __WXMSW__ if ( Bitmap.Ok() ) OriginalImage = Bitmap.ConvertToImage(); LastScaleX = LastScaleY = -1;#endif}void wxStaticPicture::OnPaint(wxPaintEvent& WXUNUSED(event)){ if ( !Bitmap.Ok() ) return; wxPaintDC dc( this ); PrepareDC( dc ); wxSize sz = GetSize(); wxSize bmpsz( Bitmap.GetWidth(), Bitmap.GetHeight() ); float sx = 1.0f, sy = 1.0f; if ( Scale & wxSCALE_UNIFORM ) { float _sx = (float)sz.GetWidth() / (float)bmpsz.GetWidth(); float _sy = (float)sz.GetHeight() / (float)bmpsz.GetHeight(); sx = sy = _sx < _sy ? _sx : _sy; } else if ( Scale & wxSCALE_CUSTOM ) { sx = ScaleX; sy = ScaleY; } else { if ( Scale & wxSCALE_HORIZONTAL ) sx = (float)sz.x/(float)bmpsz.x; if ( Scale & wxSCALE_VERTICAL ) sy = (float)sz.y/(float)bmpsz.y; } bmpsz = wxSize( (int)(bmpsz.x*sx), (int)(bmpsz.y*sy) ); wxPoint pos( 0, 0 ); if ( Align & wxALIGN_CENTER_HORIZONTAL ) pos.x = (sz.x-bmpsz.x)/2; else if ( Align & wxALIGN_RIGHT ) pos.x = sz.x-bmpsz.x; if ( Align & wxALIGN_CENTER_VERTICAL ) pos.y = (sz.y-bmpsz.y)/2; else if ( Align & wxALIGN_BOTTOM ) pos.y = sz.y-bmpsz.y; if ( Scale ) {#ifdef __WXMSW__ double ux, uy; dc.GetUserScale( &ux, &uy ); dc.SetUserScale( ux*sx, uy*sy ); dc.DrawBitmap( Bitmap, (int)((float)pos.x/sx), (int)((float)pos.y/sy) ); dc.SetUserScale( ux, uy );#else if ( LastScaleX != sx || LastScaleY != sy ) { LastScaleX = sx; LastScaleY = sy; ScaledBitmap = wxBitmap( OriginalImage.Scale( bmpsz.x, bmpsz.y ) ); } dc.DrawBitmap( ScaledBitmap, pos.x, pos.y );#endif } else dc.DrawBitmap( Bitmap, pos.x, pos.y );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -