wxWidgets学习笔记:列表框wxListBox使用详解

头文件

#include 

方法

创建列表框

wxListBox* m_FootprintFilterListBox;
m_FootprintFilterListBox = new wxListBox( m_PanelFootprintFilter, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
bFpFilterLeftBoxSizer->Add( m_FootprintFilterListBox, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );

这个wxListBox控件的构造函数有以下参数:

  • m_PanelFootprintFilter:wxPanel类型的父窗口,表示将wxListBox添加到该窗口中。
    wxID_ANY:wxWidgets自动生成的唯一标识符,用于在事件处理程序中引用该控件。
    wxDefaultPosition:wxPoint类型的控件初始位置,表示该控件在父窗口中的初始位置。
    wxDefaultSize:wxSize类型的控件初始大小,表示该控件在父窗口中的初始大小。
    0:整数类型的控件标志,用于指定wxListBox控件的特性(例如多选、排序等),这里使用默认值0。
    NULL:指向wxArrayString类型的指针,表示初始化wxListBox时要添加到列表框中的字符串数组,这里使用默认值NULL。
    0:整数类型的控件ID,用于在事件处理程序中引用该控件,这里使用默认值0。

Append()

m_FootprintFilterListBox->Append( filterLine );
    m_FootprintFilterListBox->SetSelection( (int) m_FootprintFilterListBox->GetCount() - 1 );

GetCount()

GetSelection()

 int idx = m_FootprintFilterListBox->GetSelection();

GetStringSelection()

wxString filter = m_FootprintFilterListBox->GetStringSelection();

事件

wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件

wxEVT_COMMAND_LISTBOX_DOUBLECLICKED是一个事件类型,表示wxListBox控件的双击事件。当用户在一个wxListBox控件上双击鼠标左键时,该控件会生成一个wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件,并将其发送给事件处理程序进行处理。

在wxWidgets中,可以使用Bind()方法或Connect()方法将事件处理函数与wxEVT_COMMAND_LISTBOX_DOUBLECLICKED事件关联起来。例如:

m_FootprintFilterListBox->Connect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );

m_FootprintFilterListBox->Disconnect( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, wxCommandEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnEditFootprintFilter ), NULL, this );

在基类中定义虚函数:

virtual void OnEditFootprintFilter( wxCommandEvent& event ) { event.Skip(); }

在子类重写父类中的虚函数:

void OnEditFootprintFilter( wxCommandEvent& event ) override;
void DIALOG_LIB_SYMBOL_PROPERTIES::OnEditFootprintFilter( wxCommandEvent& event )
{
    int idx = m_FootprintFilterListBox->GetSelection();

    if( idx >= 0 )
    {
        wxString filter = m_FootprintFilterListBox->GetStringSelection();

        WX_TEXT_ENTRY_DIALOG dlg( this, _( "Filter:" ), _( "Edit Footprint Filter" ), filter );

        if( dlg.ShowModal() == wxID_OK && !dlg.GetValue().IsEmpty() )
        {
            m_FootprintFilterListBox->SetString( (unsigned) idx, dlg.GetValue() );
            OnModify();
        }
    }
}

wxEVT_LEFT_DCLICK事件

wxEVT_LEFT_DCLICK是一个事件类型,表示鼠标左键双击事件。当用户在一个wxWidgets控件上双击鼠标左键时,该控件会生成一个wxEVT_LEFT_DCLICK事件,并将其发送给事件处理程序进行处理。

在wxWidgets中,可以使用Bind()方法或Connect()方法将事件处理函数与wxEVT_LEFT_DCLICK事件关联起来。例如

m_FootprintFilterListBox->Connect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFilterDClick ), NULL, this );

m_FootprintFilterListBox->Disconnect( wxEVT_LEFT_DCLICK, wxMouseEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES_BASE::OnFilterDClick ), NULL, this );

在基类头文件中定义虚函数:

virtual void OnFilterDClick( wxMouseEvent& event ) { event.Skip(); }

在子类中声明和实现虚函数

void OnFilterDClick( wxMouseEvent& event ) override;
void DIALOG_LIB_SYMBOL_PROPERTIES::OnFilterDClick( wxMouseEvent& event )
{
    int idx = m_FootprintFilterListBox->HitTest( event.GetPosition() );
    wxCommandEvent dummy;

    if( idx >= 0 )
        OnEditFootprintFilter( dummy );
    else
        OnAddFootprintFilter( dummy );
}

案例

wxListBox每一行显示四列:name,value,display,description

要在wxListBox中每一行显示四列,你可以使用wxListBox的wxItemContainer类的Append()方法,将每一行作为一个字符串添加到wxListBox中。在每一行字符串中,你可以使用制表符(\t)或空格来分隔四列数据。

以下是一个示例代码:

Copy
// 创建一个wxListBox控件
wxListBox* listBox = new wxListBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize);

// 添加多行数据
listBox->Append("Name1\tValue1\tDisplay1\tDescription1");
listBox->Append("Name2\tValue2\tDisplay2\tDescription2");
listBox->Append("Name3\tValue3\tDisplay3\tDescription3");

在上面的示例中,我们将每一行数据作为一个字符串添加到wxListBox中,并使用制表符\t分隔四列数据。当用户选择某一行时,你可以使用GetString()方法获取该行的字符串,并使用字符串分割函数(如wxString::Split()或C++标准库中的std::string::find()和std::string::substr()等)来提取每一列的数据。

你可能感兴趣的:(wxWidgets,C++,gui,wxWidgets,跨平台,列表框)