なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

wxTreeCtrl

ツリー構造でファイル名などを配置したいと思った。

	wxPanel *panel = new wxPanel(this, -1);

	wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);

    // 親要素
	wxArrayString array;
	array.Add(wxT("親要素1"));
	array.Add(wxT("親要素2"));
	array.Add(wxT("親要素3"));
	array.Add(wxT("親要素4"));
	array.Add(wxT("親要素5"));
	array.Add(wxT("親要素6"));

    // 子要素
	wxArrayString chArray;
	chArray.Add(wxT("子要素1"));
	chArray.Add(wxT("子要素2"));
	chArray.Add(wxT("子要素3"));
	chArray.Add(wxT("子要素4"));
	chArray.Add(wxT("子要素5"));

    // 区切りをつけて見やすく
	vbox->Add(-1, 10);

	wxBoxSizer *hbox3 = new wxBoxSizer(wxHORIZONTAL);
	// たぶんprivateとかで宣言しているんでしょうね
	wxTreeCtrl *m_tree_ctrl = new wxTreeCtrl(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS|wxTR_DEFAULT_STYLE|wxSUNKEN_BORDER);

    // ArtProviderを使うと、アイコンを読みこまなくても基本的なアイコンは使えるようになる
      wxImageList *treeImage = new wxImageList(16,16);
      wxArtProvider *listIcon = new wxArtProvider();
      wxBitmap idx1 = wxArtProvider::GetBitmap(wxART_FOLDER,wxART_OTHER );
      wxBitmap idx2 = wxArtProvider::GetBitmap(wxART_NEW,wxART_OTHER);
      treeImage->Add(idx1);
      treeImage->Add(idx2);
      m_tree_ctrl->AssignImageList(treeImage);

      wxTreeItemData *m_treeData = new wxTreeItemData();
      wxTreeItemId m_rootId = m_tree_ctrl->AddRoot(wxT("ルートフォルダ"), 0, 0, m_treeData);

	for(int i=0;i < array.size();i++) {
		wxTreeItemId test = m_tree_ctrl->AppendItem(m_rootId,array[i], 0, 0, m_treeData);
		for (int j=0; j < chArray.size();j++) {
			m_tree_ctrl->AppendItem(test, chArray[j], 1, 1, m_treeData);
		}
	}


わりとめんどくさいですねえ。子要素の配列を番号順に作るしかないのかな。

完成図