Сообщений 29    Оценка 895 [+1/-0]         Оценить  
Система Orphus

Where in the world is Carmen Sandiego?

Куда идти, когда нужны сорцы

Автор: Илья Зарецкий
Spb Software House

Источник: RSDN Magazine #6-2004
Опубликовано: 14.03.2005
Исправлено: 10.12.2016
Версия текста: 1.0
Объяснительная
Grid controls (элементы управления типа «таблица»)
Layout management (управление размером и положением контролов при изменении размеров окна-родителя)
Common dialogs (стандартные диалоговые окна)
Syntax coloring edit controls (редакторы с подсветкой синтаксиса)
Сжатие данных
Docking windows (стыкующиеся окна)
Файловый ввод/вывод
Электропочта
Редакторы векторной графики
Полезные утилиты
Заключение

Объяснительная

Приведенный ниже список составлен «по мотивам» ссылок, которыми я чаще всего отвечал на вопросы о готовых реализациях тех или иных возможностей в MFC-приложениях. Подавляющее большинство этих ссылок ведет на сайт http://www.codeproject.com/, который я настоятельно рекомендую посещать не реже одного раза в день – ИМХО, там публикуется достаточно много интересных и «аккуратных» решений самых разных проблем :). Курсивом даны мои комментарии и/или переводы авторских «вступлений».

Grid controls (элементы управления типа «таблица»)

Элемент управления ALXGrid предназначен для отображения и изменения данных, которые могут быть представлены в виде таблицы. Он реализован в виде статически подключаемой к приложению библиотеки на основе MFC классов. В библиотеку входят классы: CALXGridView – для поддержки технологии "документ-представление", и CALXGridCtrl – для использования в диалоговых окнах.

«Очень простой», со слов автора, грид, порожденный от класса CWnd. Заголовок является отдельным логическим объектом; «нефиксированная» часть таблицы, предназначенная для отображения собственно данных, может работать только в так называемом «виртуальном режиме» — задача хранения данных целиком возлагается на приложение. Выглядит довольно симпатично:


Судя по количеству оценок (657) — самый популярный грид сайта. Для него существует множество дополнений и расширений как от самого автора, так и от «третьих лиц»:

Не совсем грид, но достаточно изощренный потомок CListCtrl из MFC. Умеет довольно много:


Layout management (управление размером и положением контролов при изменении размеров окна-родителя)

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

Альтернативы (понравились меньше или не понравились вовсе):

Common dialogs (стандартные диалоговые окна)

«Стандартное» диалоговое окно выбора иконки, основанное на использовании функции PickIconDlg(), которая не была документирована до версии 5.0 DLL-библиотеки shell32.dll (под Windows 95/98/Me/NT4 функция импортируется по порядковому номеру #62).


Существует также «альтернативная реализация» от PJ Naughter

Стандартный диалог выбора папки, являющийся оберткой функции SHBrowseForFolder():


Статья по адресу http://www.codeproject.com/dialog/DavidKotchanFileDialog.asp описывает стандартные диалоговые окна выбора имени файла, не позволяющие копировать, перемещать и удалять файлы, а также создавать новые папки. Она интересна, в первую очередь, описанием подробностей «архитектуры» и внутреннего устройства данных диалоговых окон.

Syntax coloring edit controls (редакторы с подсветкой синтаксиса)

Написанный на "чистом" C/WinAPI редактор с подсветкой синтаксиса, поддержкой многоуровневого Undo/Redo, закладками, настраиваемой клавиатурой и «умными отступами»:


Автор описывает его как «расширяемый фреймворк для создания редактора с подсветкой синтаксиса».


Сжатие данных

ИМХО в данной весовой категории однозначно побеждает библиотека ZipArchive, представляющая собой ОО-надстройку над zlib. В качестве альтернативы можно привести:

Docking windows (стыкующиеся окна)

Если вы хотите повторить интерфейс 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]»… :)


Эта статья опубликована в журнале RSDN Magazine #6-2004. Информацию о журнале можно найти здесь
    Сообщений 29    Оценка 895 [+1/-0]         Оценить