DrawLine и DrawColLabel wxGrid'a и последняя ко Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

DrawLine и DrawColLabel wxGrid'a и последняя ко

Post by borr_1 » Wed Aug 20, 2008 12:34 pm

Пытаюсь перерисовать Label wxGrid - переопределил DrawColLabel

Code: Select all

void MyGrid::DrawColLabel( wxDC& dc, int col )
{
        int colLeft = GetColLeft(col);
        int colCur = GetGridCursorCol();

        wxColour cl1;
        wxRect tRect( colLeft, 0, GetColWidth(col),  m_colLabelHeight);

#ifdef __WXMSW__
        cl1 = wxSystemSettings::GetColour(wxSYS_COLOUR_3DHIGHLIGHT);
#else
        cl1 = *wxWHITE;
#endif

        wxColour cl2 = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
        dc.GradientFillLinear( tRect, cl1/*wxColour( 250, 249, 245 )*/, cl2/*wxColour( 192, 192, 168 )*/, wxSOUTH );


#ifdef __WXMSW__
        wxFont tFont = *wxNORMAL_FONT;
#else
        wxFont tFont = *wxSMALL_FONT;
#endif

        dc.SetFont( tFont );
        if(m_Icon.IsOk() && ShowCol == col)
            {
                int colLeft_1 = GetColLeft(col);
                wxRect tRect_1( 5, 5, 16,  16);
                dc.DrawLabel(GetColLabelValue( col ), m_Icon, tRect_1, /*wxALIGN_CENTER_HORIZONTAL*/wxALIGN_LEFT
                            | wxALIGN_CENTER_VERTICAL );
            }
            else
            {
               wxRect tRect_t( colLeft, 0, GetColWidth(col),  m_colLabelHeight - 15);
                dc.DrawLabel( GetColLabelValue( col ), tRect_t, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL );
            }

        tRect.Offset( -1, 0 );
        tRect.SetWidth( tRect.GetWidth() + 1 );
        wxColour cl3 = GetGridLineColour();
        dc.SetPen( cl3 );
        dc.SetBrush( *wxTRANSPARENT_BRUSH );
        dc.DrawRectangle( tRect );
        dc.DrawLine(colLeft, m_colLabelHeight - 15, GetColWidth(col),  m_colLabelHeight - 15);//здесь непонятно
        wxCoord x = colLeft, y = m_colLabelHeight - 15;//. = wxCoord(colLeft, GetColWidth(col));
        dc.DrawText(wxString("Тест"), x,  y);
}
Такое впечатление что GetColWidth() для последней колонки wxGrid работает неправильно и берет какую то не ту ширину. линия есть но для последней колонки она не доходит до конца при чем в зависимости от ширины колонки отставания от правого края линии меняется.

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Wed Aug 20, 2008 1:24 pm

Ну дык внимательнее быть надо :)

Code: Select all

dc.DrawLine(colLeft, m_colLabelHeight - 15, colLeft + GetColWidth(col),  m_colLabelHeight - 15);
// все понятно, ширину надо к левой позиции добавлять :)
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Wed Aug 20, 2008 1:33 pm

tan wrote:Ну дык внимательнее быть надо :)

Code: Select all

dc.DrawLine(colLeft, m_colLabelHeight - 15, colLeft + GetColWidth(col),  m_colLabelHeight - 15);
// все понятно, ширину надо к левой позиции добавлять :)
40 градусная жара дает о себе знать только хотел отписать

Code: Select all

dc.DrawLine(tRect.x, tRect.y + 15, tRect.x + tRect.width, tRect.y + 15);
Спасибо я что-то не справился о ложением :oops:

Post Reply