Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И снова CTreeCtrl, как узнать радительскою ветвь? 
V
    Опции темы
rokky05
  Дата 5.4.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



У меня есть ТреКонтрол с чек боксами, есть 6 родительских ветвей котории имеют в себе дочернии, если юзер поставил ЧЕК на доченой ветви как мне узнать имя родителя и имя потомка???...
пишу так:
Код

for (int i = 0; i <iCoutOfTree; i++)
    {
        if(mTreeCopyTo.GetCheck(hDlgs[i]) == true)
        {
            CString str = mTreeCopyTo.GetItemText(hDlgs[i]);
            wchar_t wcSelectFiles[512];
            wstring sSelectedFile;

            _tcscpy(wcSelectFiles,str);
            sSelectedFile = wcSelectFiles;
 
            vCountSelDelFiles.push_back(sSelectedFile);
        } 
    }

Но вилетает когда hDlgs[i] доходит до двух, если кликнуть пару раз игнор то всьоже берьот имя потомка....

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Treecntr.rar 4,33 Kb
PM MAIL   Вверх
rokky05
Дата 6.4.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2008

Репутация: нет
Всего: нет



Хоршо переформолирую вопрос, У меня есть 2 Родительских ветви котории имеют дочерние:
Код

HTREEITEM htiParent1 = m_checktree.InsertItem("Parent 1", NULL, NULL);
HTREEITEM htiParent2 = m_checktree.InsertItem("Parent 2", NULL, NULL);
m_checktree.InsertItem("Child 1", NULL, NULL, htiParent1);
m_checktree.InsertItem("Child 2", NULL, NULL, htiParent2);
m_checktree.InsertItem("Child 3", NULL, NULL, htiParent2);

Если юзер поставил чек на Child 3, как мне узнать имя етой ветви (тоесть "Child 3")????
PM MAIL   Вверх
korian
Дата 6.4.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



если я правильно понял, вам надо получить сообщение, когда юзер меняет состояние checked/unchecked.
стандартных средств для этого нету (если конечно вы не собираетесь писать только под Vista, там такое есть).
решить можно так:
Код

//объявляем структуру
struct ITEMDATA
{
    ITEMDATA(LPCTSTR txt, bool chk) : text(txt), checked(chk) {};
    LPCTSTR text;
    bool checked;
};

//добавление итемов нужно будет осуществлять таким способом:
    TVINSERTSTRUCT tvi;
    tvi.hParent = TVI_ROOT;
    tvi.hInsertAfter = NULL;
    tvi.item.mask = TVIF_TEXT | TVIF_PARAM;
    tvi.item.pszText = LPSTR_TEXTCALLBACK;
    
    tvi.item.lParam = reinterpret_cast<LPARAM>(new ITEMDATA(_T("123"), false));
    tree.InsertItem(&tvi);
    tvi.item.lParam = reinterpret_cast<LPARAM>(new ITEMDATA(_T("345"), false));
    tree.InsertItem(&tvi);
    tvi.item.lParam = reinterpret_cast<LPARAM>(new ITEMDATA(_T("567"), false));
    tree.InsertItem(&tvi);

//ловим сообщение TVN_GETDISPINFO от CTreeCtrl
    ON_NOTIFY(TVN_GETDISPINFO, IDC_TREE1, &CtestDlg::OnTvnGetdispinfoTree1)

void CtestDlg::OnTvnGetdispinfoTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTVDISPINFO pTVDispInfo = reinterpret_cast<LPNMTVDISPINFO>(pNMHDR);
    if (pTVDispInfo->item.mask & TVIF_TEXT)
    {
        ITEMDATA* data = reinterpret_cast<ITEMDATA*>(tree.GetItemData(pTVDispInfo->item.hItem));
        bool check = !!tree.GetCheck(pTVDispInfo->item.hItem);
        pTVDispInfo->item.pszText = const_cast<LPTSTR>(data->text);
        if (check != data->checked)
        {
            data->checked = check;
            //вот тут можно вставлять свой код, который должен реагировать на изменение состояние checked/unchecked
        }
    }
    // TODO: Add your control notification handler code here
    *pResult = 0;
}

//ловим сообщение TVN_DELETEITEM, чтобы почистить за собой
    ON_NOTIFY(TVN_DELETEITEM, IDC_TREE1, &CtestDlg::OnTvnDeleteitemTree1)
void CtestDlg::OnTvnDeleteitemTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    ITEMDATA* data = reinterpret_cast<ITEMDATA*>(tree.GetItemData(pNMTreeView->itemOld.hItem));
    delete data;
    *pResult = 0;
}


Это сообщение отредактировал(а) korian - 6.4.2008, 15:16
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.