многострочный блокнот wxWidget - не видит 2-ю строку

StackOverflow https://stackoverflow.com/questions/305307

  •  08-07-2019
  •  | 
  •  

Вопрос

Этот код отлично работает

myNotebook = new wxNotebook( this, IDC_NOTEBOOK, wxDefaultPosition, wxSize(500, 500) );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 1" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 2" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 3" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 4" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 5" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 6" );

Однако названия вкладок настолько длинные и многочисленные, что их необходимо прокручивать по горизонтали.

Использование стиля wxNB_MULTILINE не работает должным образом: вторая строка вкладок скрыта и нечитаема

myNotebook = new wxNotebook( this, IDC_NOTEBOOK, wxDefaultPosition, wxSize(500, 500), wxNB_MULTILINE );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 1" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 2" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 3" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 4" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 5" );
myNotebook->AddPage( new wxNotebookPage( myNotebook, -1 ), L"TEST RECOMMENDATIONS 6" );

Как правильно использовать многострочный стиль?

Это было полезно?

Решение 3

Наконец-то нашли элегантное решение. Мне нужно принудительно обновить после изменения размера.

void MyFrame::OnSize(wxSizeEvent& )
{
    if( myNotebook ) {
        myNotebook->SetSize( GetClientRect() );
        myNotebook->Refresh();
    }
}

Другие советы

После экспериментов я нашел такой способ:

Добавьте одну строку после всех вызовов AddPage ()

    myNotebook->Layout();

Кажется, проблема в том, что панель, содержащая страницу записной книжки, охватывает вторую строку вкладок.

Я могу заставить панель уйти с дороги, обработав событие EVT_NOTEBOOK_PAGE_CHANGED и добавив эту строку кода

myNotebook->GetPage( event.GetSelection() )->Move(0,40);

Ужасно, но это делает работу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top