Рис. 12 - Диаграмма классов логики данных
На данном уровне структурной модели АСКК представлена детализация основных методов классов, реализующих их интерфейс и бизнес-логику.
1. Интерфейс АСКК
Логика и средства представления данных автоматизированной сите-мы конвертирования контента основана на классе представления CMyKonvertView, который наследуется от базового класса CView библиотеки MFC.
Метод OnDraw вызывается, когда надо отобразить документ в окне. В качестве параметра pDC методу OnDraw передается указатель на контекст устройства, используя который надо отобразить документ. Вирту-альные методы OnPrepare, OnBeginPrinting и OnEndPrinting вызываются, если пользователь желает распечатать документ, отображенный в данном окне просмотра. На время отладки приложения в состав класса CMyKonvertView включаются переопределения виртуальных методов AssertValid и Dump. При окончательном построении приложения эти методы не переопределяются.
Класс CTreeCtrl предназначен для визуализации и манипулирования контентом иерархической структуры данных. CTreeCtrl отображает иерархический раскрывающийся список заголовков документа. Щелкая пункт, пользователь может расширить и уменьшить связанный список подэлементов. Каждый пункт состоит из этикетки и дополнительного bitmapp-образа.
Для управления главным окном приложения используется класс CMainFrame, определенный в файле MainFrm.h. Класс CMainFrame наследуется от базового класса CMDIFrameWnd. Создание главного окна контролируется при обработке сообщения WM_CREATE методом OnCreate. Метод OnCreate сначала вызывает метод OnCreate базового класса CMDIFrameWnd, а затем создает и отображает внутри главного окна панель управления Toolbar и панель состояния Status Bar. Виртуальный метод PreCreateWindow определен в классе CWnd. Он вызывается непосредственно перед созданием окна, связанного с объектом класса и используется для задания параметров и характеристик окна. В качестве параметра этому методу передается структура типа CREATESTRUCT, определяющая характеристики создаваемого окна. Приложение может изменить данные, записанные в этой структуре, чтобы переопределить стили создаваемого окна и повлиять на внешний вид создаваемого окна. MFC AppWizard переопределяет этот метод, но не вносит в него изменений и просто вызывает метод PreCreateWindow базового класса CMDIChildWnd.
Класс, непосредствено связанный с отображением дочерних окон MDI, называется CChildFrame, и он наследуется от базового класса CMDIChildWnd, определенного в библиотеке MFC. Объекты класса представляют дочерние окна MDI главного окна приложения. Внутри этих окон отображаются окна просмотра документов.
2. Элементы управления
Класс CButton содержит методы для работы с кнопками Windows. Данный элемент управления может использоваться самостоятельно или в группах. К какому из данных типов кнопок будет относиться объект класса CButton, определяется ее стилем, задаваемым в функции Create при его создании.
Наиболее часто в качестве макросов обработки сообщений от кнопок используются:
- ON_BN_CLICKED – пользователь нажал кнопку;
- ON_BN_DOUBLECLICKED – пользователь дважды нажал кнопку.
intGetCheck() const – возвращает собственное состояние флажка или переключателя. Возвращаемое значение может принимать одно из значений: 0 – кнопка не выбрана; 1 – кнопка выбрана; 2 – кнопка в неопределенном состоянии. Если кнопка не является ни переключателем, ни флажком, возвращается 0.
void SetCheck(int nCheck) – устанавливает собственное состояние флажка или переключателя. Значения задаются из набора: 0 – невыбранное; 1 – выбранное; 2 – неопределенное.
Класс CScrollBar является оболочкой для полос прокрутки. Полосы прокрутки аналогичны тем, которые добавляются в главное окно приложения при использовании оконных стилей WS_VSCROLL и WS_HSCROLL. Полоса прокрутки создается вызовом CScrollBar::Create.
Объекты класса CToolBar представляют собой панели управления, содержащие ряд кнопок, на которых помещены битовые образы, между которыми могут находиться разделители. Кнопки панели инструментов могут действовать как обычные кнопки, переключатели или флажки. По умолчанию кнопки панели инструментов имитируют простые кнопки. Однако они могут имитировать также и переключатели, и флажки. Флажки имеют три состояния: установлен, сброшен и неопределенное. Переключатели имеют только два состояния: установлен и сброшен. Для установки стиля отдельной кнопки или разделителя без обращения к массиву сначала необходимо вызвать функцию GetButtonStyle, чтобы получить ее текущее состояние, а затем вызвать функцию SetButtonStyle вместо вызова функции SetButtons. Функцию SetButtonStyle целесообразно использовать при изменении стиля кнопки в процессе работы с приложением. Если необходимо, чтобы в кнопке появился текст, вызовите функцию GetButtonText, чтобы получить текст, который должен быть выведен в кнопке, а затем вызовите функцию SetButtonText для установки текста.
3. Диалоги
Объекты класса CFileDialog представляют диалоговые панели Open или Save As в зависимости от параметра bOpenFileDialog. Если параметр bOpenFileDialog содержит значение TRUE, то создается объект, управляющий диалоговой панелью Open, а если FALSE – диалоговой панелью Save As.
Параметр bOpenFileDialog является единственным обязательным параметром, который необходимо указать. Остальные параметры конструктора класса CFileDialog задают различные режимы работы панели и могут не указываться.
Чтобы создать объект класса CFileDialog, представляющий диалоговую панель для открытия файлов (mFileOpen), и объект, представляющий диалоговую панель для сохранения файлов (mFileSaveAs), можно воспользоваться следующими вызовами конструктора класса:
- CFileDialog mFileOpen(TRUE) – для панели открытия файлов;
- CFileDialog mFileSaveAs(FA LSE) – для панели сохранения файла.
Создание объекта класса CFileDialog еще не вызывает отображения соответствующей диалоговой панели. При вызове метода DoModal для ранее созданного объекта класса CFileDialog на экране открывается соответствующая диалоговая панель. После того как пользователь завершает работу с диалоговой панелью, метод DoModal вернет значение IDOK или IDCANCEL в случае успешного завершения и нуль – в случае возникновения ошибок:
CFileDialog dlgOpen(TRUE);
int iResult=dlgOpen.DoModal().
После того как пользователь закроет диалоговую панель и метод DoModal вернет управление, можно воспользоваться другими методами класса CFileDialog, чтобы определить имена выбранных файлов:
- GetPathName – определяет полный путь файла;
- GetFileName – определяет имя выбранного файла;
- GetFileExt – определяет расширение имени выбранного файла;
- GetFileTitle – позволяет определить заголовок выбранного файла;
- GetNextPathName – если диалоговая панель позволяет выбрать сразу несколько файлов, то этот метод можно использовать для определения полного пути, следующего из выбранных файлов;
- GetReadOnlyPref – позволяет узнать состояние атрибута «только для чтения» (read-only) выбранного файла;
- GetStartPosition – возвращает положение первого элемента из списка имен файлов.
Кроме основных классов создается также класс CAboutDlg, наследованный от базового CDialog. Он отвечает за диалоговую панель «О программе».
4. Логика данных АСКК
Логика данных системы представлена классами-обертками интерфейсов СОМ-объектов модели Microsoft Word. Поэтому класс CMyKonvertDoc использует пространство имен исполняющей среды Microsoft.NET:
Microsoft.Office.Tools.Word.
Объект Microsoft.Office.Interop.Word::Document является основой для программирования в Word. Он представляет документ и все его содержимое. При открытии документа или создании нового документа создается новый объект Microsoft.Office.Interop.Word::Document, который добавляется в коллекцию Documents объекта Application. Документ, в котором находится фокус, называется активным документом. Он представляется свойством ActiveDocument объекта Application. Список коллекций, входящих в состав объекта Document: Bookmarks, Characters (Range), CommandBars, Comments, DocumentProperties, Endnotes, Fields, Footnotes, FormFields, Frames, Hyperlinks, Indexes, InlineShapes, HorizontalLineFormat, ListParagraphs, Lists, ListParagraphs, Range, ListTemplates, ListLevels, Font, Paragraphs, ProofreadingErrors (Range), Revisions, ReadabilityStatistics, Scripts, Sections, Sentences (Range), Shapes, StoryRanges (Range), Styles, Subdocuments, Tables, Variables, Versions, Windows, Words (Range).
Объект CaptionLabel – член коллекции CaptionLabels. CaptionLabels(index) используется, чтобы возвратить номер уровня заголовка – единственный объект CaptionLabel. Число индекса представляет положение заголовка в коллекции CaptionLabels.
Класс CBitmap (пространство имен: System.Drawing) инкапсулирует точечный рисунок GDI+, состоящий из данных точек графического изображения и атрибутов рисунка. Объект Bitmap используется для работы с изображениями, определяемыми данными точек. Можно создать изображения из файлов, потоков и других источников, используя один из конструкторов Bitmap, и сохранить их в поток или файловую систему с помощью метода Save. Изображения обрисовываются на экране или в памяти с помощью метода DrawImage объекта Graphics.
Свойство Paragraphs возвращает ссылку на коллекцию абзацев в данном документе. Класс CParagraph отвечает за хранение и использование таких параметров, как текст, его цвет, шрифт и стиль выравнивания для каждого абзаца текста.
Свойство Tables представляет коллекцию таблиц документа CTables в пространстве имен System.Web.UI.WebControls. TableCell – элемент содержимого потока, который определяет ячейку содержимого в рамках Table. Пространство имен: System.Windows.Documents. Элемент TableCell является единственным элементом таблицы, непосредственно размещающим содержимое. Прочие элементы таблицы (Table, TableColumn, TableRowGroup и TableRow) существуют для определения структурных атрибутов таблицы.
Класс CRange (пространство имен Microsoft.Office.Tools.Word) инкапсулирует интерфейс объекта Range, который играет ведущую роль в процессе структурного анализа документа. Документы, поддокументы, разделы, все вышеупомянутые коллекции от Characters до Words имеют метод или свойство Range, возвращающие в качестве результата объект Range. Так, если некоторый объект вызвал метод Range, то возвращаемый объект Range будет содержать область определения объекта, вызвавшего метод. Каждый объекта Range задает область определения некоторого объекта, включая текст и все объекты, связанные с этим текстом – комментарии, ссылки и прочее. Метод Copy, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод Cut, действуя аналогично, копирует объект в буфер, заодно удаляя его. Метод Paste позволяет приклеить объект, помещенный в буфер.