Сообщений 29 Оценка 895 [+1/-0] Оценить |
Приведенный ниже список составлен «по мотивам» ссылок, которыми я чаще всего отвечал на вопросы о готовых реализациях тех или иных возможностей в MFC-приложениях. Подавляющее большинство этих ссылок ведет на сайт http://www.codeproject.com/, который я настоятельно рекомендую посещать не реже одного раза в день – ИМХО, там публикуется достаточно много интересных и «аккуратных» решений самых разных проблем :). Курсивом даны мои комментарии и/или переводы авторских «вступлений».
Элемент управления ALXGrid предназначен для отображения и изменения данных, которые могут быть представлены в виде таблицы. Он реализован в виде статически подключаемой к приложению библиотеки на основе MFC классов. В библиотеку входят классы: CALXGridView – для поддержки технологии "документ-представление", и CALXGridCtrl – для использования в диалоговых окнах.
«Очень простой», со слов автора, грид, порожденный от класса CWnd. Заголовок является отдельным логическим объектом; «нефиксированная» часть таблицы, предназначенная для отображения собственно данных, может работать только в так называемом «виртуальном режиме» — задача хранения данных целиком возлагается на приложение. Выглядит довольно симпатично:
Судя по количеству оценок (657) — самый популярный грид сайта. Для него существует множество дополнений и расширений как от самого автора, так и от «третьих лиц»:
Не совсем грид, но достаточно изощренный потомок CListCtrl из MFC. Умеет довольно много:
Признаюсь честно — мой фаворит, давно и надолго. :) Использование, на первый взгляд, представляется несколько неочевидным, но автор посвятил своему детищу достаточно подробную статью с картинками. Время, потраченное на внимательное изучение этой статьи, окупается сторицей.
Альтернативы (понравились меньше или не понравились вовсе):
«Стандартное» диалоговое окно выбора иконки, основанное на использовании функции PickIconDlg(), которая не была документирована до версии 5.0 DLL-библиотеки shell32.dll (под Windows 95/98/Me/NT4 функция импортируется по порядковому номеру #62).
Существует также «альтернативная реализация» от PJ Naughter
Стандартный диалог выбора папки, являющийся оберткой функции SHBrowseForFolder():
Статья по адресу http://www.codeproject.com/dialog/DavidKotchanFileDialog.asp описывает стандартные диалоговые окна выбора имени файла, не позволяющие копировать, перемещать и удалять файлы, а также создавать новые папки. Она интересна, в первую очередь, описанием подробностей «архитектуры» и внутреннего устройства данных диалоговых окон.
Написанный на "чистом" C/WinAPI редактор с подсветкой синтаксиса, поддержкой многоуровневого Undo/Redo, закладками, настраиваемой клавиатурой и «умными отступами»:
Автор описывает его как «расширяемый фреймворк для создания редактора с подсветкой синтаксиса».
ИМХО в данной весовой категории однозначно побеждает библиотека ZipArchive, представляющая собой ОО-надстройку над zlib. В качестве альтернативы можно привести:
Если вы хотите повторить интерфейс Visual Studio или WinCvs – нет ничего лучше, чем CSizingControlBar:
Данный класс предназначен для записи и чтения файлов в различных кодировках – поддерживаются ASCII (различные кодовые страницы), UTF-8, Unicode 16 little/big endian.
Замечу, что исходный код не привязан жестко к библиотеке MFC, для использования с которой он изначально был создан – в зависимости от значения соответствующей директивы препроцессора, файловые операции выполняются посредством либо стандартного fstream, либо функций Win32 API, либо методов MFC-шного класса CFile.
Данный класс порожден от CStdioFile и предназначен, по словам автора, «для прозрачного чтения и записи как юникодных, так и мультибайтовых текстовых файлов».
Элемент управления, являющийся потомком CWnd, и позволяющий «просматривать файлы любого размера»:
Поддерживается выделение текста, копирование его в буфер обмена, автоматическая перезагрузка изменившегося файла, а также настройка используемых при отображении шрифта и цветов.
Данный элемент управления предназначен для просмотра и редактирования файлов в шестнадцатеричном, десятичном, двоичном, восьмеричном виде (также поддерживается и ASCII):
Набор MFC-классов, инкапсулирующих протокол SMTP. Поддерживаются MIME и MHTML (HTML e-mail), вложения, различные методы идентификации; по утверждению автора, классы имеют «простой и чистый интерфейс». Заметим, что используется собственная реализация сокетов, не зависящая от MFC.
Набор MFC-классов, инкапсулирующих протокол POP3, от того же автора. Как и в предыдущем случае, классы имеют «простой и чистый интерфейс» и используют авторскую реализацию сокетов, не зависящую от MFC.
Три замечательных элемента управления от Johan Rosengren:
«Итак, вы хотите добавить к вашему приложению редактор форм? Редактор диалогов? Нечто, позволяющее рисовать HTML-ные <div>-ы? Тогда вашему вниманию предлагается обладающий широкими возможностями каркас, с которого вы можете начать. CDiagramEditor представляет собой базовый визуальный редактор, предназначенный для объектов векторной графики. Он порожден от CWnd и использует отдельный класс для обработки данных, что позволяет применять его как в диалоговых окнах, так и в приложениях, базирующихся на архитектуре документ/представление.»
Данный элемент управления является потомком CDiagramEditor и дополняет его функциональность возможностью связывания векторных объектов:
Данное приложение также базируется на CDiagramEditor и позволяет редактировать статические UML-диаграммы, с возможностью генерации на их основе C++-кода или HTML-страниц:
Активно развиваемый автором «список заданий», с возможностью назначения исполнителей и приоритетов, создания подзадач, экспорта в XML, etc:
Позволяет просмотреть иерархию включения файлов в исходных текстах на C++:
К приятным возможностям стоит отнести поиск по маске в пределах «рабочего пространства», разбор макросов препроцессора и возможность экспорта получившегося дерева включений в XML.
«Организатор и упорядочиватель» идентификаторов ресурсов, выполненный как Add-in для Visual C++ 5.0/6.0/.NET (доступен также и вариант в виде независимого приложения):
Позволяет находить и устранять конфликты значений идентификаторов ресурсов.
Предназначен для выполнения запросов к базе VSS, позволяющих увидеть файлы, изменившиеся после заданной даты, а также авторов этих изменений:
Безусловно, данный список и на одну десятую не охватывает доступных в сети исходных текстов, которые могут представлять интерес для C++/Windows-программиста («за бортом» остались, например, парсеры математических формул и регулярных выражений) – но наш журнал называется все-таки «RSDN Magazine», а не «The very best of Code Project». Надеюсь, что после публикации электронной версии данной статьи на RSDN, мы будем совместными усилиями пополнять эту коллекцию ссылок. Ну и конечно – не пропускайте в форумах сообщений, тема которых начинается с «[ANN]»… :)
Сообщений 29 Оценка 895 [+1/-0] Оценить |