![]() |
|
|
![]()
|
|
| rudolfninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Приветствую всех.
Задание такое: необходимо разработать простейший двухпанельный файловый менеджер по аналогии со стандартным проводником Windows. Файловый менеджер представляет собой UI – приложение с двухпанельным интерфейсом. На левой панели размещается дерево со списком объектов файловой системы (начиная с корневых каталогов дисков либо с виртуальных системных папок). На правой панели размещается список файлов в каталоге, выбранном в дереве на левой панели. С MFC особо не работал, поэтому и возникли проблемы. Надо создать на базе SDI приложения. Я разбил задачу навигации по файловой системе на несколько задач: 1) Получение содержимого файловой системы и заполнение дерева. 2) Распознование выделенного в дереве каталого или папки и отображение его содержимого на правой панели. Как получить объекты файловой системы я примерно представляю (GetLogicalDrivers, FindFirstFile, FindNextFile). Непонятно как отобразить дерево в левой части менеджера и как отображать содержимое выделенного элемента в правой части. Пока что это основные вопросы, которые меня волнуют. Если кто знает как решить проблему или может посоветовать литературу, в которой есть решение подобной задачи - подскажите пожалуйста. Спасибо. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Слева - дерево (CTreeCtrl), слева - список (CListCtrl). MSDN тебе в помощь.
-------------------- ... |
|||
|
||||
| rudolfninja |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 341 Регистрация: 19.2.2013 Где: г. Минск Репутация: нет Всего: 6 |
Я создаю MFC приложение. Application type выбираю Single document и оставляю включенной опцию Document\View architecture support. В Project Style выбираю Windows Explorer. Это сразу дает разделенное окно. В User Interface Features, я так понимаю, уже не надо жать Split Window, т.к. сам стиль Windows Explorer уже создаст разделенное окно. Следующие настройки оставляю без изменений. В итоге создается проект, с классами CLeftView : public CTreeView и CMainFrame : public CFrameWndEx.
Как я понимаю, первый класс будет отображать мое дерево. Заменить все CTreeView на CMFCShellTreeCtrl не выходит, т.к. у них нет некоторых методов, которые вызывает CTreeView. Например,
Ну и у этого класса, вроде как, нет члена m_pDocument. Втрой класс, вроде будет для отображения списка папок. С ним позже разобраться надо, т.к. еще с первым не разобрался. Потом я в класс CLeftView добавляю переменную типа CMFCShellTreeCtrl m_TreeCtrl и добавляю функцию:
В итоге не выходит запустить приложение. Вылетает эксепшн "Не удалось создать пустой документ". Я, вероятнее всего, что-то не так делаю, только пока не понимаю что. Подскажите, что не так. |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
CTreeView и CTreeCtrl в принципе одно и тоже. Так что раз у тебя вью, то и используй вью (CTreeView), меньше мороки.
Добавлять туда дополнительный член m_TreeCtrl не надо (и вообще нехорошо), т.к. TreeView имеет функцию, которая возвращает ссылку на контрол. А если ты посмотришь внутрь, то увидишь, что там тупо преобразование типа. Не знаю, что это за зверь такой CMFCShellTreeCtrl, может в новых MFC добавили. Раньше был просто CTreeCtrl. Если это наследник CTreeCtrl с нужной тебе функциональностью, то варианта 2: - если он не содержит доп. членов данных, то используй простое преобразование для доступа к функциональности (т.е. напиши свой вариант ф-и GetTreeCtrl()) - если доп. члены данных есть (нестатические), то номер с преобразование не пройдет, придется сабклассить. При этом просто тупо сабклассить вью на контрол нельзя, ибо окно не может сабкласситься дважды, а вью тебе нужно. Можно, конечно, как ты сделал, вид и контрол сделать разными окнами одно в другом, но это ненужная кривота. Не говоря уже о том, что тебе придется прописывать все реакции на мувы ручками (чтобы контрол вместе с вью ресайзился). Проблема правильного сабклассинга точно решаема, но надо порыться в коде. Кстати, в связи с этим вопрос: а на кой тебе SDI и виды? И какой-такой документ будет? Просто пустышка, чтобы не морочиться? Альтернатива - обычное диалоговое приложение. Тогда, правда, самому нужно парится с разделяемыми панелями. Где больше геморроя - сказать сразу сложно. Добавлено через 2 минуты и 32 секунды А вот твой вылет как раз и говорит о том, что документа-то у тебя нет (ибо нафик он тебе нужен). Впрочем, все это затыкабельно. Я плохо помню сейчас код MFC, а копаться времени нет, но ты посмотри сам, откуда вылетает исключение и чего ему там надо. И сделай. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |