Как избавится от скролбаров?

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Как избавится от скролбаров?

Post by martynov77 » Tue Jun 08, 2010 1:19 pm

Здравствуйте!
Есть виджет, наследник wxScrolledWindow (wxGrid), помещен в sizer. При изменении размеров периодически выскакивают скролбары, когда они не нужны - и без них бы все помещалось, но зачем-то появляется вертикальный скролбар, после чего появляется горизонтальный (или наоборот).

UPD. Посмотрел по внимательнее - сделал так, чтобы по вертикали гарантированно не скролилось - почему-то grid иногда добавляет горизонтальный скролбар, хотя все ячейки целиком видны, и за самой правой на пару пикселей еще есть место. Как избавится от этого?

UPD2. В гриде одна колонка (+слева заголовки строк). Хочу сделать так, чтобы колонка автоматически изменяла размер в соответствии с размерами грида:

Code: Select all

void CCardCoveragesInfoGrid::OnSize(wxSizeEvent & event)
   {
    int gridWidth = 0, gridHeight = 0;
    GetClientSize( &gridWidth, &gridHeight );
    int rowLabelWidth = GetRowLabelSize();
    if ((gridWidth-8)<=rowLabelWidth)
       {
        SetColSize( 0, 10 );
       }
    else
       {
        SetColSize( 0, gridWidth - rowLabelWidth - 6);
       }
    //EnableScrolling(false, false);
    //event.Skip();
   }
Может подскажете, что я не так делаю?

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 Jun 09, 2010 7:50 am

А как ты ScrolledWindow создаешь? там в style нет wxHSCROLL|wxVSCROLL? Там этот стиль по умолчанию. Вот такая штука еще есть
wxScrolledWindow::SetScrollbars

void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int noUnitsX, int noUnitsY, int xPos = 0, int yPos = 0, bool noRefresh = false)

Sets up vertical and/or horizontal scrollbars.

Parameters

pixelsPerUnitX

Pixels per scroll unit in the horizontal direction.

pixelsPerUnitY

Pixels per scroll unit in the vertical direction.

noUnitsX

Number of units in the horizontal direction.

noUnitsY

Number of units in the vertical direction.

xPos

Position to initialize the scrollbars in the horizontal direction, in scroll units.

yPos

Position to initialize the scrollbars in the vertical direction, in scroll units.

noRefresh

Will not refresh window if true.

Remarks

The first pair of parameters give the number of pixels per 'scroll step', i.e. amount moved when the up or down scroll arrows are pressed. The second pair gives the length of scrollbar in scroll steps, which sets the size of the virtual window.

xPos and yPos optionally specify a position to scroll to immediately.

For example, the following gives a window horizontal and vertical scrollbars with 20 pixels per scroll step, and a size of 50 steps (1000 pixels) in each direction.
---------------------------------------------------
wxScrolledWindow::GetScrollPixelsPerUnit

void GetScrollPixelsPerUnit(int* xUnit, int* yUnit) const

Get the number of pixels per scroll unit (line), in each direction, as set by wxScrolledWindow::SetScrollbars. A value of zero indicates no scrolling in that direction.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Post by martynov77 » Wed Jun 09, 2010 9:59 am

wxGrid я создаю со стилями wxTAB_TRAVERSAL | wxWANTS_CHARS | wxBORDER_STATIC, а уж как он там сам вызывает wxScrolledWindow, не знаю.
Метод SetScrollbars можно подергать, но хочется понять, как wxGrid заставить не приделывать скролбары без особой необходимости.

martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Post by martynov77 » Wed Jun 09, 2010 1:49 pm

Проверил под Linux'ом - там обнаружилась еще одна проблема - если под виндой скролбар просто иногда появлялся, то под линуксом отображение скролбара зацикливается - он начинает мерцать - то появляется, то исчезает, и программа не реагирует больше ни на что.

Post Reply