代码之家  ›  专栏  ›  技术社区  ›  ravenspoint

wxWidget多行笔记本-看不到第二行

  •  1
  • ravenspoint  · 技术社区  · 17 年前

    这段代码工作得很好

    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_多行样式无法正常工作:第二行选项卡模糊且不可读

    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 回复  |  直到 17 年前
        1
  •  1
  •   ravenspoint    17 年前

    经过实验后,我发现:

    在所有AddPage()调用之后添加一行

        myNotebook->Layout();
    
        2
  •  1
  •   ravenspoint    16 年前

    问题似乎在于,保存笔记本页面的面板覆盖了第二行选项卡。

    我可以通过操纵操纵操纵杆迫使控制板移动到一边 EVT_NOTEBOOK_PAGE_CHANGED 事件并添加此行代码

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

        3
  •  0
  •   ravenspoint    16 年前

    最后,找到了一个优雅的解决方案。我需要在调整大小后强制刷新。

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