#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_FootprintFilterListBox->Append( filterLine );
m_FootprintFilterListBox->SetSelection( (int) m_FootprintFilterListBox->GetCount() - 1 );
int idx = m_FootprintFilterListBox->GetSelection();
wxString filter = m_FootprintFilterListBox->GetStringSelection();
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是一个事件类型,表示鼠标左键双击事件。当用户在一个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中每一行显示四列,你可以使用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()等)来提取每一列的数据。