Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Интерфейс типа "проводник"  (Прочитано 13798 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Postum
Гость
« : 11-01-2005 18:56 » 

Интересуют принципы создания средствами VC++ 6.0 интерфейса наподобие интерфеса майкрософтовского проводника: дерево слева, окно отображения информации справа и т.д.
Хотелось бы почитать описание по созданию таких приложений или посмотреть исходники.
Спасибо.
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #1 : 11-01-2005 20:38 » 

По идее все делается просто. Сождаешь проект со сплиттером. В левое окно назначаешь потомка от CTreeView, а в правое потомка от CListView. В MSDN есть пример как работать с CSplitterWnd
Записан

Megabyte be with you!
Postum
Гость
« Ответ #2 : 12-01-2005 09:13 » 

Разобрался. Проект в стиле Explorer создается средствами стартового визарда MFCApp.
В итоге имеем два класса: СListView (наследник от СTreeView) и СProjectView (наследник задается в настройках, по умолчанию CListView).
Для CTreeView имеется функция GetTreeCtrl(), предоставляющая доступ самому дереву.
Намприемер, с помощью GetTreeCtrl().InsertItem() добавляются узлы к дереву.

Непонятно как настроить свойства дерева (линии, кнопки в родительских узлах и т.д.)
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 12-01-2005 10:24 » 

Все что ты спрашиваешь есть в примерах MSDN но выходит зарамки возможностей форума - для этого придется много строк кода копировать...

Подсказываю куда рыть:
1. Для назначения узлов  - как только ты внесешь в контроль дерева, сами данные дерева с назначением им уровней ты получишь нужные квадратики...

Можешь назначать им картинки (т.е. + и - ) ты должен их нарисовать в битмапках и дать контролю установки их использовать.

Далее - все папки и т.д. как в ксплорере с картинками типа Мой компутер - то же надо нарисовать и ручками добавлять в нужные места.


2. Вторая часть - отображение справа того, что кликнул слева - посылай WM сообщения от себя себе, от окна к окну и получишь реакцию на событие - например при нажатии отметке слева ты получаешь в контроле дерева событие типа WM_CHECKED - точно название не помню, типа нотификации...
В его обработчике пиши SendMessage(WM_USER + 1, ....) направляя его в окно контроля листинга файлов.
Там в обработчике посланного WM_USER+1 пиши необходимый код для получения списка файлов. При передаче параметров можешь передавать и номер или имя отмеченной папки. wParam & lParam...



Записан

А птичку нашу прошу не обижать!!!
Postum
Гость
« Ответ #4 : 12-01-2005 11:20 » 

1. Для назначения узлов - как только ты внесешь в контроль дерева, сами данные дерева с назначением им уровней ты получишь нужные квадратики...

Можешь назначать им картинки (т.е. + и - ) ты должен их нарисовать в битмапках и дать контролю установки их использовать.

Неужели "+" и "-" надо рисовать и обрабатывать? Хотя, ладно... )

MSDN читаю. Вот, например:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_ctreectrl.asp

Цитата
The following styles can be applied to a tree view control:

TVS_HASLINES   The tree view control has lines linking child items to their corresponding parent items.
TVS_LINESATROOT   The tree view control has lines linking child items to the root of the hierarchy.
TVS_HASBUTTONS   The tree view control adds a button to the left of each parent item.
TVS_EDITLABELS   The tree view control allows the user to edit the labels of tree view items.
TVS_SHOWSELALWAYS   Causes a selected item to remain selected when the tree-view control loses focus.
TVS_DISABLEDRAGDROP   The tree-view control is prevented from  sending TVN_BEGINDRAG notification messages.
TVS_NOTOOLTIPS   The tree view control uses no tooltips.
TVS_SINGLEEXPAND   When this style is enabled, changing the selection in the tree view will automatically cause the item being selected to expand and the item being unselected to collapse. If the mouse is used to single-click the selected item and that item is closed, it will be expanded. If the selected item is single-clicked when it is open, it will be collapsed.

В примере данные свойства задаются при создании контрола. У меняя TreeView и не совсем понятно как задать эти свойства через GetTreeCtrl().


Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #5 : 12-01-2005 12:13 » 

Postum 
Ты можешь из задать через GetWindowLong/SetWindowLong с индексом GWL_STYLE.
Т.е. получаешь стили, модифицируешь как тебе надо и ставишь обратно
Записан

Megabyte be with you!
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #6 : 12-01-2005 14:30 » 

Насколько я помню - в код не лазал, я делая такую же вещь, только не для файлов - писал такой контроль и удивлялся - что + - надо рисовать...

А обрабатывать не надо - просто две картинки открыт и закрыт.
Записан

А птичку нашу прошу не обижать!!!
Postum
Гость
« Ответ #7 : 12-01-2005 18:05 » 

Нет, все-таки рисовать "+" и "-" в дереве не обязательно (если, кончено, нет необходимости в нестандартном дизайне этих кнопочек). Для этого достаточно установить свойство контрола: TVS_HASBUTTONS
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 14-01-2005 11:25 » 

Посмотри в MSDN CTreeCtrl его адрес возвращает тебе ф-я GetTreeCtrl
Все ф-ции класса можно вызывать через него. Например

GetTreeCtrl().ModifyStyle(0,TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);

и тд
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Postum
Гость
« Ответ #9 : 14-01-2005 13:01 » 

GetTreeCtrl().ModifyStyle(0,TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT);
Да, спасибо, так тоже работает. Есть и другой способ, предложенный Lex:

Код:
	LONG TreeStyle=GetWindowLong(GetTreeCtrl().GetSafeHwnd(),GWL_STYLE);
TreeStyle|=TVS_HASLINES|TVS_LINESATROOT | TVS_HASBUTTONS;
SetWindowLong(GetTreeCtrl().GetSafeHwnd(),GWL_STYLE,TreeStyle);
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines