wxWidgets教程(15)——wxListCtrl用法
阿新 • • 發佈:2019-02-20
wxListCtrl
1、建構函式
// 建構函式宣告
wxListCtrl(wxWindow *parent, // 父視窗
wxWindowID id = wxID_ANY,// 控制元件ID
const wxPoint& pos = wxDefaultPosition, // 控制元件左上角座標
const wxSize& size = wxDefaultSize,// 控制元件寬高尺寸
long style = wxLC_ICON, // 控制元件型別
const wxValidator& validator = wxDefaultValidator,// 驗證
const wxString& name = wxListCtrlNameStr // 控制元件視窗名稱
);
// report型別的控制元件示例
wxListCtrl * m_list = new wxListCtrl( m_panel1,wxID_LIST,wxDefaultPosition,
wxDefaultSize,wxLC_HRULES|wxLC_REPORT|wxLC_VRULES );
2、控制元件型別
必須設定的型別:wxLC_LIST和wxLC_REPORT,前者如資料夾中的檔案列表,後者如html的table控制元件。
通常還需要設定:wxLC_HRULES和wxLC_VRULES,分別是水平與垂直分割線,一般report需要設定。
可編輯:wxLC_EDIT_LABELS
無表頭:wxLC_NO_HEADER
單行選擇:wxLC_SINGLE_SEL,預設是可選多行的
圖示相關:wxLC_ICON、wxLC_SMALL_ICON、wxLC_ALIGN_TOP和wxLC_ALIGN_LEFT
3、REPORT型別控制元件使用
新增表頭
// 新增第一列的表頭
wxListItem col0;
col0.SetId(0); // id必須設定,代表第0列
col0.SetText(wxT("#"));
col0.SetWidth(50); // 設定列寬
col0.SetAlign(wxLIST_FORMAT_CENTER); // 此列的文字居中顯示
m_listname->InsertColumn(0, col0); // 插入列
// 新增第二列的表頭
wxListItem col1;
col1.SetId(1);
col1.SetText (wxT("Name"));
m_listname->InsertColumn(1, col1);
// 新增第三列的表頭
wxListItem col2;
col2.SetId(2);
col2.SetText(wxT("Age"));
m_listname->InsertColumn(2, col2);
多列控制元件中新增元素
int total = m_listname->GetItemCount(); // 獲取當前元素數量
long indexItem = m_listname->InsertItem(total,wxString::FromDouble(total + 1));
m_listname->SetItem(indexItem, 1, wxT("name1"));
m_listname->SetItem(indexItem, 2, wxT("age1"));
// 設定一些其他的屬性,如顏色,字型...等等
m_listname->SetItemBackgroundColour(indexItem,wxColour(255, 255, 0));
m_listname->SetItemTextColour(indexItem, wxColour(0,255,255));
// 你還可以通過id獲取指定行的item物件,單獨設定,然後重新設定回去,如下:
wxListItem item;
item.SetId(1); // 獲取id為1的那一行的元素
m_listname->GetItem(item);
item.SetBackgroundColour(wxColour(100, 100, 255));
item.SetState(wxLIST_STATE_SELECTED); // 此行item被選中
m_listname->SetItem(item); // 重新設定回去
// 獲取指定行indexItem列為1的文字資料
m_listname->GetItemText(indexItem, 1);
獲取所有選中的行
long indexItem = -1;
while ((indexItem = m_listname->GetNextItem(indexItem,wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != wxNOT_FOUND) {
wxLogDebug(m_listname->GetItemText(indexItem));
}
設定item的圖示
wxImageList *m_pImageList = new wxImageList(16, 16);
wxIcon icon0,icon1;
icon0.LoadFile(wxT("res/main.ico"), wxBITMAP_TYPE_ICO);
icon1.LoadFile(wxT("res/MG.ico"), wxBITMAP_TYPE_ICO);
m_pImageList->Add(icon0);
m_pImageList->Add(icon1);
m_listname->SetImageList(m_pImageList, wxIMAGE_LIST_SMALL);
m_listname->SetItemImage(indexItem, 0); // 給indexItem設定icon0
刪除選中的item
long indexItem = -1;
wxArrayInt indexItems;
while ((indexItem = m_listname->GetNextItem(indexItem, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != wxNOT_FOUND) {
indexItems.Add(indexItem);
}
// 記住,要從下向上刪除
for (int i = indexItems.GetCount() - 1; i >= 0;--i)
{
m_listname->DeleteItem(i);
}
indexItems.Clear();