⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytreectrl.cpp

📁 是自己开发的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    // Make an image list containing small icons    wxImageList *images = new wxImageList(size, size, true);    // should correspond to TreeCtrlIcon_xxx enum    wxBusyCursor wait;    wxIcon icons[5];    icons[0] = wxIcon(icon1_xpm);    icons[1] = wxIcon(icon2_xpm);    icons[2] = wxIcon(icon3_xpm);    icons[3] = wxIcon(icon4_xpm);    icons[4] = wxIcon(icon5_xpm);    int sizeOrig = icons[0].GetWidth();    for ( size_t i = 0; i < WXSIZEOF(icons); i++ )    {        if ( size == sizeOrig )        {            images->Add(icons[i]);        }        else        {            images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));        }    }    AssignImageList(images);}#if USE_GENERIC_TREECTRL || !defined(__WXMSW__)void MyTreeCtrl::CreateButtonsImageList(int size){    if ( size == -1 )    {        SetButtonsImageList(NULL);        return;    }    // Make an image list containing small icons    wxImageList *images = new wxImageList(size, size, true);    // should correspond to TreeCtrlIcon_xxx enum    wxBusyCursor wait;    wxIcon icons[4];    icons[0] = wxIcon(icon3_xpm);   // closed    icons[1] = wxIcon(icon3_xpm);   // closed, selected    icons[2] = wxIcon(icon5_xpm);   // open    icons[3] = wxIcon(icon5_xpm);   // open, selected    for ( size_t i = 0; i < WXSIZEOF(icons); i++ )    {        int sizeOrig = icons[i].GetWidth();        if ( size == sizeOrig )        {            images->Add(icons[i]);        }        else        {            images->Add(wxBitmap(wxBitmap(icons[i]).ConvertToImage().Rescale(size, size)));        }    }    AssignButtonsImageList(images);#elsevoid MyTreeCtrl::CreateButtonsImageList(int WXUNUSED(size)){#endif}int MyTreeCtrl::OnCompareItems(const wxTreeItemId& item1,                               const wxTreeItemId& item2){    if ( m_reverseSort )    {        // just exchange 1st and 2nd items        return wxTreeCtrl::OnCompareItems(item2, item1);    }    else    {        return wxTreeCtrl::OnCompareItems(item1, item2);    }}void MyTreeCtrl::AddItemsRecursively(const wxTreeItemId& idParent,                                     size_t numChildren,                                     size_t depth,                                     size_t folder){    if ( depth > 0 )    {        bool hasChildren = depth > 1;        wxString str;        for ( size_t n = 0; n < numChildren; n++ )        {            // at depth 1 elements won't have any more children            if ( hasChildren )                str.Printf(wxT("%s child %u"), wxT("Folder"), unsigned(n + 1));            else                str.Printf(wxT("%s child %u.%u"), wxT("File"), unsigned(folder), unsigned(n + 1));            // here we pass to AppendItem() normal and selected item images (we            // suppose that selected image follows the normal one in the enum)            int image, imageSel;            if ( m_showImages )            {                image = depth == 1 ? TreeCtrlIcon_File : TreeCtrlIcon_Folder;                imageSel = image + 1;            }            else            {                image = imageSel = -1;            }            wxTreeItemId id = AppendItem(idParent, str, image, imageSel,                                         new MyTreeItemData(str));            // and now we also set the expanded one (only for the folders)            if ( hasChildren && m_showImages )            {                SetItemImage(id, TreeCtrlIcon_FolderOpened,                             wxTreeItemIcon_Expanded);            }            // remember the last child for OnEnsureVisible()            if ( !hasChildren && n == numChildren - 1 )            {                m_lastItem = id;            }            AddItemsRecursively(id, numChildren, depth - 1, n + 1);        }    }    //else: done!}void MyTreeCtrl::AddTestItemsToTree(size_t numChildren,                                    size_t depth){    int image = m_showImages ? MyTreeCtrl::TreeCtrlIcon_Folder : -1;    wxTreeItemId rootId = AddRoot(wxT("Root"),                                  image, image,                                  new MyTreeItemData(wxT("Root item")));    if ( image != -1 )    {        SetItemImage(rootId, TreeCtrlIcon_FolderOpened, wxTreeItemIcon_Expanded);    }    AddItemsRecursively(rootId, numChildren, depth, 0);    // set some colours/fonts for testing    SetItemFont(rootId, *wxITALIC_FONT);    wxTreeItemIdValue cookie;    wxTreeItemId id = GetFirstChild(rootId, cookie);    SetItemTextColour(id, *wxBLUE);    id = GetNextChild(rootId, cookie);    id = GetNextChild(rootId, cookie);    SetItemTextColour(id, *wxRED);    SetItemBackgroundColour(id, *wxLIGHT_GREY);}void MyTreeCtrl::GetItemsRecursively(const wxTreeItemId& idParent,                                     wxTreeItemIdValue cookie){    wxTreeItemId id;    if ( !cookie )        id = GetFirstChild(idParent, cookie);    else        id = GetNextChild(idParent, cookie);    if ( !id.IsOk() )        return;    //wxString text = GetItemText(id);    //wxLogMessage(text);    if (ItemHasChildren(id))        GetItemsRecursively(id);    GetItemsRecursively(idParent, cookie);}void MyTreeCtrl::DoToggleIcon(const wxTreeItemId& item){    int image = (GetItemImage(item) == TreeCtrlIcon_Folder)                    ? TreeCtrlIcon_File                    : TreeCtrlIcon_Folder;    SetItemImage(item, image, wxTreeItemIcon_Normal);    image = (GetItemImage(item) == TreeCtrlIcon_FolderSelected)                    ? TreeCtrlIcon_FileSelected                    : TreeCtrlIcon_FolderSelected;    SetItemImage(item, image, wxTreeItemIcon_Selected);}void MyTreeCtrl::LogEvent(const wxChar *name, const wxTreeEvent& event){    /*wxTreeItemId item = event.GetItem();    wxString text;    if ( item.IsOk() )        text << _T('"') << GetItemText(item).c_str() << _T('"');    else        text = _T("invalid item");    wxLogMessage(wxT("%s(%s)"), name, text.c_str());	*/}// avoid repetition#define TREE_EVENT_HANDLER(name)                                 \void MyTreeCtrl::name(wxTreeEvent& event)                        \{                                                                \    LogEvent(_T(#name), event);                                  \    SetLastItem(wxTreeItemId());                                 \    event.Skip();                                                \}TREE_EVENT_HANDLER(OnBeginRDrag)TREE_EVENT_HANDLER(OnDeleteItem)TREE_EVENT_HANDLER(OnGetInfo)TREE_EVENT_HANDLER(OnSetInfo)TREE_EVENT_HANDLER(OnItemExpanded)TREE_EVENT_HANDLER(OnItemExpanding)TREE_EVENT_HANDLER(OnItemCollapsed)TREE_EVENT_HANDLER(OnSelChanged)TREE_EVENT_HANDLER(OnSelChanging)TREE_EVENT_HANDLER(OnItemActivated)#undef TREE_EVENT_HANDLERvoid LogKeyEvent(const wxChar *name, const wxKeyEvent& event){    wxString key;    long keycode = event.GetKeyCode();    {        switch ( keycode )        {            case WXK_BACK: key = wxT("BACK"); break;            case WXK_TAB: key = wxT("TAB"); break;            case WXK_RETURN: key = wxT("RETURN"); break;            case WXK_ESCAPE: key = wxT("ESCAPE"); break;            case WXK_SPACE: key = wxT("SPACE"); break;            case WXK_DELETE: key = wxT("DELETE"); break;            case WXK_START: key = wxT("START"); break;            case WXK_LBUTTON: key = wxT("LBUTTON"); break;            case WXK_RBUTTON: key = wxT("RBUTTON"); break;            case WXK_CANCEL: key = wxT("CANCEL"); break;            case WXK_MBUTTON: key = wxT("MBUTTON"); break;            case WXK_CLEAR: key = wxT("CLEAR"); break;            case WXK_SHIFT: key = wxT("SHIFT"); break;            case WXK_ALT: key = wxT("ALT"); break;            case WXK_CONTROL: key = wxT("CONTROL"); break;            case WXK_MENU: key = wxT("MENU"); break;            case WXK_PAUSE: key = wxT("PAUSE"); break;            case WXK_CAPITAL: key = wxT("CAPITAL"); break;            case WXK_END: key = wxT("END"); break;            case WXK_HOME: key = wxT("HOME"); break;            case WXK_LEFT: key = wxT("LEFT"); break;            case WXK_UP: key = wxT("UP"); break;            case WXK_RIGHT: key = wxT("RIGHT"); break;            case WXK_DOWN: key = wxT("DOWN"); break;            case WXK_SELECT: key = wxT("SELECT"); break;            case WXK_PRINT: key = wxT("PRINT"); break;            case WXK_EXECUTE: key = wxT("EXECUTE"); break;            case WXK_SNAPSHOT: key = wxT("SNAPSHOT"); break;            case WXK_INSERT: key = wxT("INSERT"); break;            case WXK_HELP: key = wxT("HELP"); break;            case WXK_NUMPAD0: key = wxT("NUMPAD0"); break;            case WXK_NUMPAD1: key = wxT("NUMPAD1"); break;            case WXK_NUMPAD2: key = wxT("NUMPAD2"); break;            case WXK_NUMPAD3: key = wxT("NUMPAD3"); break;            case WXK_NUMPAD4: key = wxT("NUMPAD4"); break;            case WXK_NUMPAD5: key = wxT("NUMPAD5"); break;            case WXK_NUMPAD6: key = wxT("NUMPAD6"); break;            case WXK_NUMPAD7: key = wxT("NUMPAD7"); break;            case WXK_NUMPAD8: key = wxT("NUMPAD8"); break;            case WXK_NUMPAD9: key = wxT("NUMPAD9"); break;            case WXK_MULTIPLY: key = wxT("MULTIPLY"); break;            case WXK_ADD: key = wxT("ADD"); break;            case WXK_SEPARATOR: key = wxT("SEPARATOR"); break;            case WXK_SUBTRACT: key = wxT("SUBTRACT"); break;            case WXK_DECIMAL: key = wxT("DECIMAL"); break;            case WXK_DIVIDE: key = wxT("DIVIDE"); break;            case WXK_F1: key = wxT("F1"); break;            case WXK_F2: key = wxT("F2"); break;            case WXK_F3: key = wxT("F3"); break;            case WXK_F4: key = wxT("F4"); break;            case WXK_F5: key = wxT("F5"); break;            case WXK_F6: key = wxT("F6"); break;            case WXK_F7: key = wxT("F7"); break;            case WXK_F8: key = wxT("F8"); break;            case WXK_F9: key = wxT("F9"); break;            case WXK_F10: key = wxT("F10"); break;            case WXK_F11: key = wxT("F11"); break;            case WXK_F12: key = wxT("F12"); break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -