2014-10-20 5 views
0

Мне нужно создать C++, VSPackage, который содержит TreeView. Я добавил один из диалогового окна по умолчанию ресурса сценария проекта (* .rc) из окна панели инструментов. Проблема в том, что я не знаю, как добавлять к нему элементы.Как заполнить TreeView в сценарии ресурсов

Я просмотрел многие веб-сайты, но у них есть код для C# или других проектов.

Я нашел проект, сделанный Song Ho Ahn, а также исходный код, который находится в нижней части этого сайта TreeView.

Я попытался перейти в окно свойств TreeView, чтобы узнать, есть ли что-то, чтобы я мог добавлять к нему элементы, а затем найти способ их замены, но ничего. Я попытался использовать написанный мной код, чтобы помочь мне найти решение моей проблемы, но я не смог его найти. Может быть, это «обработчик» и «родитель», который я не знаю, как использовать.

void set(HWND parent, int id, bool visible=true) 
    { 
     this->parent = parent; 
     handle = GetDlgItem(parent, id); 
     if(!visible) disable(); 
    } 

Я хочу отметить, что я новичок в VSPackage и что я не сделал проект такой большой прежде.

Если кто-нибудь может объяснить мне, что делать, отправить меня на путь или даже сказать, что я глуп, и решение является простым, я буду очень этому благодарен.

ответ

0

В отсканированном фрагменте вы используете собственный API WIN32. Таким образом, вы можете ознакомиться с документацией TVM_INSERTITEM.

Вот небольшой фрагмент кода, чтобы добавить одну запись к элементу управления TreeView (независимо от того, создается с помощью сценария ресурса или вызова CreateWindow (..)):

TVITEM tvi; 
TVINSERTSTRUCT tvins; 
HTREEITEM hItem; 

/* setup new item */ 
tvi.mask = TVIF_TEXT; // just text 
tvi.pszText = "Hello TreeView!"; 
tvi.cchTextMax = 0; // ignored if creating the item 

/* setup insertion structure of item */ 
tvins.hParent = TVI_ROOT; // insert item at root level 
tvins.item = tvi;   // item description setup above 
tvins.hInsertAfter = NULL; // instert on top of the tree view 
hItem = (HTREEITEM)SendMessage(GetDlgItem(hWnd, IDC_TREEVIEW), // update parameters of GetDlgItem(..) according to your code 
           TVM_INSERTITEM, 
           0, 
           (LPARAM)(LPTVINSERTSTRUCT)&tvins); 
if (hItem == NULL) 
{ 
    /* something went wrong */ 
} 
+0

Спасибо за ответ. У меня есть 2 проблемы, и мне удалось решить только 1. Проблема, которую я решил, заключается в том, что я не мог использовать образец кода, который вы предоставили в «MyToolWindow.h», и должен был создать для него новый файл заголовка (простое решение). Вторая проблема заключается в том, что я попытался присвоить «GerDlgItem» другой переменной, например «HWND hItemWnd = GetDlgItem (hWndCtl, IDC_RESULTS_TREE); ». Проблема заключается в том, что «hItemWnd» не изменяется (наблюдается при отладке). Разве это не другой способ, который не использует «GetDlgItem»? Спасибо и хорошего дня. – Flavius

+0

Функция GetDlgItem (..) возвращает дескриптор дочернего окна с данным идентификатором. Поэтому HWND должен быть таким, как в окне, содержащем TreeView. Если GetDlgItem (..) возвращает NULL, произошла ошибка (обычно неправильные входные данные, особенно неправильные HWND). Можете ли вы предоставить еще какой-нибудь код? Это немного сложно «представить» вашу проблему ... ;-) –

+0

Проблема в том, что это большой VSPackage, поэтому я могу только дать вам код для окна инструментов и код, который я использую из mr. Песня Хо Ан. Вы можете скачать файлы здесь: [link] (https://www.dropbox.com/sh/crx3xjck1886ys0/AABQXHGi9_L0XmjbmQleCZqpa?dl=0). Если вы хотите, я могу предоставить вам доступ для чтения на BitBucket. – Flavius

 Смежные вопросы

  • Нет связанных вопросов^_^