⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newbmpbtn.cpp

📁 wxGTK 是 wxWidgets 的 linux GTK+ (>2.2.3)版本。wxWidgets 是一个跨平台的 GUI 框架
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        else        if ( mTextAlignment == NB_ALIGN_TEXT_BOTTOM )        {            destDim.x =                wxMax( srcBmp->GetWidth(), txtWidth );            destDim.y = srcBmp->GetHeight() + mTextToLabelGap + txtHeight;            txtPos.x = (destDim.x - txtWidth)/2;            txtPos.y = srcBmp->GetHeight() + mTextToLabelGap;            imgPos.x = (destDim.x - srcBmp->GetWidth())/2;            imgPos.y = 0;        }        else        {            wxFAIL_MSG(wxT("Unsupported FL alignment type detected in wxNewBitmapButton::RenderLabelImage()"));        }    }    else    {        imgPos.x = 0;        imgPos.y = 0;        destDim.x = srcBmp->GetWidth();        destDim.y = srcBmp->GetHeight();    }    destBmp = new wxBitmap( int(destDim.x), int(destDim.y) );    wxMemoryDC destDc;    destDc.SelectObject( *destBmp );    wxBrush grayBrush( wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE), wxSOLID );    destDc.SetBrush( grayBrush );    destDc.SetPen( *wxTRANSPARENT_PEN );    destDc.DrawRectangle( 0,0, destDim.x+1, destDim.y+1 );    if ( isPressed )    {        ++imgPos.x; ++imgPos.y;        ++txtPos.x; ++txtPos.y;    }    if ( hasImage )    {        destDc.Blit( imgPos.x, imgPos.y,                 srcBmp->GetWidth(),                 srcBmp->GetHeight(),                 &srcDc, 0,0, wxCOPY,true );    }    if ( hasText )    {        wxWindow* pTopWnd = this;        do        {            wxWindow* pParent = pTopWnd->GetParent();            if ( pParent == 0 )                break;            pTopWnd = pParent;        } while (1);        destDc.SetFont( wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT) );        if ( isEnabled )        {            destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNTEXT) );        }        else        {            destDc.SetTextForeground( wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW) );        }        destDc.SetTextBackground( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE) );        destDc.DrawText( mLabelText, txtPos.x, txtPos.y );    }    if ( !isEnabled ){#ifdef __WXMSW__ // This is currently MSW specific        gray_out_image_on_dc( destDc, destDim.x, destDim.y );#else        wxBitmap bmp( (const char*)_gDisableImage,8,8);        wxBrush checkerBrush(bmp);        checkerBrush.SetColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );        destDc.SetBrush( checkerBrush );        destDc.DrawRectangle( imgPos.x, imgPos.y, srcBmp->GetWidth()+1, srcBmp->GetHeight()+1);#endif    }    // adjust button size to fit the new dimensions of the label    if ( !mSizeIsSet && 0 )    {        mSizeIsSet = true;        SetSize( wxDefaultCoord, wxDefaultCoord,                 destBmp->GetWidth()  + mMarginX*2,                 destBmp->GetHeight() + mMarginY*2, 0            );    }    destDc.SelectObject( wxNullBitmap );#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)    // Map to system colours    (void) wxToolBar::MapBitmap(destBmp->GetHBITMAP(), destBmp->GetWidth(), destBmp->GetHeight());#endif}void wxNewBitmapButton::RenderAllLabelImages(){    if ( !mIsCreated )        return;    RenderLabelImage( mpDisabledImg, &mDepressedBmp, false );    RenderLabelImage( mpPressedImg,   &mDepressedBmp, true, true );    RenderLabelImage( mpDepressedImg, &mDepressedBmp, true, false );    if ( mHasFocusedBmp )    {        RenderLabelImage( mpFocusedImg, &mFocusedBmp, true, false );    }}void wxNewBitmapButton::RenderLabelImages(){    if ( !mIsCreated )        return;    if ( !IsEnabled() )    {        RenderLabelImage( mpDisabledImg, &mDepressedBmp, false );    }    else    if ( mIsPressed )        RenderLabelImage( mpPressedImg,   &mDepressedBmp, true, true );    else    {        if ( mIsInFocus )        {            if ( mHasFocusedBmp )                RenderLabelImage( mpFocusedImg, &mFocusedBmp, true, false );            else                RenderLabelImage( mpDepressedImg, &mDepressedBmp, true, false );        }        else            RenderLabelImage( mpDepressedImg, &mDepressedBmp, true, false );    }}bool wxNewBitmapButton::Toggle(bool enable){    if ( mIsToggled == enable )    {        return false;    }    mIsToggled = enable;    Refresh();    return true;}bool wxNewBitmapButton::Enable(bool enable){    if ( enable != m_isEnabled )    {        if ( mIsInFocus )        {            mIsInFocus = false;        }        if ( mIsPressed )        {            mIsPressed = false;        }        Refresh();    }    return wxPanel::Enable( enable );}void wxNewBitmapButton::DrawDecorations( wxDC& dc ){    if ( mIsFlat )    {        DrawShade( 1, dc, mGrayPen,  mGrayPen  );        if ( mIsToggled )        {            DrawShade( 0, dc, mDarkPen,  mLightPen  );        }        else if ( mIsInFocus )        {            if ( mIsPressed )                DrawShade( 0, dc, mDarkPen,  mLightPen  );            else                DrawShade( 0, dc, mLightPen,  mDarkPen  );        }        else            DrawShade( 0, dc, mGrayPen,  mGrayPen  );    }    else    {        if ( mIsPressed || mIsToggled )        {            DrawShade( 0, dc, mDarkPen,  mGrayPen  );            DrawShade( 1, dc, mBlackPen, mLightPen );        }        else        {            DrawShade( 0, dc, mGrayPen,  mDarkPen  );            DrawShade( 1, dc, mLightPen, mBlackPen );        }    }}void wxNewBitmapButton::SetLabel(const wxBitmap& labelBitmap,                                 const wxString& labelText ){    DestroyLabels();    mLabelText    = labelText;    mDepressedBmp = labelBitmap;    //RenderLabelImages();    RenderAllLabelImages();}void wxNewBitmapButton::SetAlignments( int alignText,                                       int marginX,                                       int marginY,                                       int textToLabelGap){    DestroyLabels();    mMarginX        = marginX;    mMarginY        = marginY;    mTextAlignment  = alignText;    mTextToLabelGap = textToLabelGap;    //RenderLabelImages();    RenderAllLabelImages();}// event handlersvoid wxNewBitmapButton::OnLButtonDown( wxMouseEvent& WXUNUSED(event) ){    mDragStarted      = true;    mIsPressed        = true;    Refresh();}void wxNewBitmapButton::OnLButtonUp( wxMouseEvent& event ){    if ( !mDragStarted )        return;    mDragStarted = false;    mIsPressed   = false;    Refresh();    if ( IsInWindow( event.m_x, event.m_y ) )    {        // fire event, if mouse was released        // within the bounds of button        wxCommandEvent cmd( mFiredEventType, GetId() );        GetParent()->ProcessEvent( cmd );    }}bool wxNewBitmapButton::IsInWindow( int x, int y ){    int width, height;    GetSize( &width, &height );    return ( x >= 0 && y >= 0 &&             x < width &&             y < height );}void wxNewBitmapButton::OnMouseEnter( wxMouseEvent& WXUNUSED(event) ){    bool prevIsInFocus = mIsInFocus;    if ( !mIsInFocus )    {        mIsInFocus = true;    }    if ( prevIsInFocus != mIsInFocus )    {        Refresh();    }}void wxNewBitmapButton::OnMouseLeave( wxMouseEvent& WXUNUSED(event) ){    bool prevIsInFocus = mIsInFocus;    bool prevIsPressed = mIsPressed;    if ( mIsInFocus )    {        mIsInFocus = false;        mIsPressed = false;    }    if ( prevIsInFocus != mIsInFocus || prevIsPressed != mIsPressed )    {        Refresh();    }}void wxNewBitmapButton::OnSize( wxSizeEvent& WXUNUSED(event) ){        //Reshape();}void wxNewBitmapButton::Reshape( ){    bool wasCreated = mIsCreated;    mIsCreated = true;    if ( !wasCreated )    {        // in the case of loading button from stream, check if we        // have non-empty image-file name, load if possible        if (!mImageFileName.empty())        {            mDepressedBmp.LoadFile( mImageFileName, mImageFileType );            //wxMessageBox("Image Loaded!!!");        }        //RenderLabelImages();        RenderAllLabelImages();        wxBitmap* pCurImg = GetStateLabel();        int w = pCurImg->GetWidth(),            h = pCurImg->GetHeight();        SetSize( 0,0, w + mMarginX*2, h + mMarginY*2 , 0 );    }}void wxNewBitmapButton::DrawLabel( wxDC& dc ){    wxBitmap* pCurBmp = GetStateLabel();    if ( pCurBmp == NULL )    {        wxSizeEvent evt;        OnSize( evt ); // fake it up!        //RenderLabelImages();        pCurBmp = GetStateLabel();    }    wxMemoryDC mdc;    mdc.SelectObject( *pCurBmp );    dc.Blit( mMarginX, mMarginY,             pCurBmp->GetWidth(),             pCurBmp->GetHeight(),             &mdc, 0,0, wxCOPY           );    mdc.SelectObject( wxNullBitmap );}void wxNewBitmapButton::OnPaint( wxPaintEvent& WXUNUSED(event) ){    wxPaintDC dc(this);    // first, make sure images for current state are prepared    //RenderLabelImages();    DrawLabel( dc );    DrawDecorations( dc );}void wxNewBitmapButton::OnEraseBackground( wxEraseEvent& WXUNUSED(event) ){    // do nothing}void wxNewBitmapButton::OnKillFocus( wxFocusEvent& WXUNUSED(event) ){    // useless    wxMessageBox(wxT("kill-focus for button!"));}// ----------------------------------------------------------------------------// UI updates// ----------------------------------------------------------------------------void wxNewBitmapButton::OnIdle(wxIdleEvent& event){    DoButtonUpdate();    event.Skip();}// Do the toolbar button updates (check for EVT_UPDATE_UI handlers)void wxNewBitmapButton::DoButtonUpdate(){    wxUpdateUIEvent event(GetId());    event.SetEventObject(this);    if ( GetParent()->ProcessEvent(event) )    {        if ( event.GetSetEnabled() )        {            bool enabled = event.GetEnabled();            if ( enabled != IsEnabled() )                Enable( enabled );        }        if ( event.GetSetChecked() )            Toggle( event.GetChecked() );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -