л нового діалогу в cpp-файлі основного діалогу. Потім внести оголошення класу у вигляді запису class CSetting в заголовний файл класу CXMLConverterDlg. Для виклику вікна представленого на малюнку 4.11 при клацанні мишкою по кнопці в головному діалозі, необхідно внести в обробник відповідної події код поданий нижче.
* pSitting=new CSitting (); gt; DoModal (); [] pSitting;
Для того, щоб зчитувати і зберігати значення вносяться до елемент Edit Controll необхідно додати змінну. Для цього в редакторі форм необхідно клацнути правою кнопкою миші по потрібному об'єкту, вибрати в меню Add Variable raquo ;. У вікні вказати категорію, ім'я та тип змінної. Можливо так само ввести мінімальне і максимальне її значення. Приклад представлений на малюнку 4.12.
Малюнок 4.12 - Вибір об'єкта Add Variable
У результаті виконання робіт описаних в поточній чолі, був розроблений користувальницький інтерфейс додатка XMLConverter.
4.1.2 Розробка функцій реалізують алгоритм перетворення вихідного XML в новий XML
Під час виконання справжньою кваліфікаційної роботи був розроблений алгоритм перетворення xml-документа в проміжний xml-документ. При його розгляді приймемо до уваги, що всі розрахунки кількості додаються рядків ведуться з урахуванням заданих величин відступів зверху і знизу для розділів в специфікації. Відступи представлені у вигляді порожніх рядків. Введемо в алгоритм лічильник загальної кількості рядків i. Він потрібен для контролю позиції поточного елемента, а також, щоб обчислити кількість порожніх рядків, які потрібно додати кінець xml-документа. Перед запуском алгоритму i дорівнює 0. Під елементами будемо розуміти, теги lt; line/ gt; і lt; section/ gt ;. Перетворення розглядається на рівні цих об'єктів. Розглядаючи їх, будемо мати на увазі, що вони несуть з собою дані, збережені в атрибутах. Кожен з цих елементів ( lt; line/ gt; і lt; section/ gt;) утворює рядок таблиці специфікації. Тобто, говорячи про рядку pdf-документа, будемо мати на увазі, що це lt; line/ gt; або lt; section/ gt; xml-документа і навпаки.
Алгоритм складається з наступних кроків.
етап. Збільшуємо лічильник на одиницю. Розглядаємо i-й рядок xml-документа. Якщо це lt; section/ gt ;, переходимо до етапу 2. Інакше переходь до етапу 5.
2 етап. Перевіряємо, чи не потрапить розділ на другий рядок сторінки специфікації, при додаванні порожніх рядків (по одній, починаючи з нуля) зверху, в межах заданого відступу. Якщо так, вносимо необхідне число порожніх елементів lt; line/ gt; і збільшуємо лічильник на кількість доданих рядків. Переходимо до етапу 7. Інакше, збільшуємо лічильник на величину заданого відступу. Переходимо до етапу 3.
етап. Перевіряємо, чи не виходить розрив між розділом і першою не порожній рядком, після нього, у вигляді перенесення останньої на інший аркуш специфікації, при додаванні порожніх рядків (по одній, починаючи з нуля) знизу, в межах заданого відступу. Якщо так, додаємо перед lt; section/ gt; необхідне число lt; line/ gt ;, зрушуючи, таким чином, розділ на другий рядок наступного листа. Збільшуємо лічильник на число доданих рядків. Переходимо до етапу 7. В іншому випадку переходимо до етапу 4.
етап. Перевіряємо, чи не потрапить розділ на перший рядок сторінки специфікації. Якщо так, додаємо перед lt; section/ gt; один порожній lt; line/ gt; і збільшуємо лічильник на одиницю. Переходимо до етапу 7.
етап. Перевіряємо, чи не потрапить lt; line/ gt; на останній рядок сторінки специфікації. Якщо так, додаємо перед ним дві порожні рядки і збільшуємо лічильник на два. Переходимо до наступного етапу.
етап. Перевіряємо, чи не потрапить lt; line/ gt; на перший рядок сторінки специфікації. Якщо так, додаємо перед ним один порожній lt; line/ gt; і збільшуємо лічильник на одиницю. Переходимо до етапу 8.
етап. Збільшуємо лічильник на величину заданого відступу знизу розділу. Переходимо до наступного етапу.
етап. Перевіряємо, якщо, досягнутий кінець xml-документа, обчислюємо кількість, порожніх рядків, які потребують додати, щоб останній лист специфікації pdf, був заповнений повністю. В іншому випадку переходимо до етапу 1.
Перейдемо до програмної реалізації представленого алгоритму. Читання даних з xml-файла проводиться за допомогою функції ReadFile (). Але, для початку, необхідно відкрити файл за допомогою функції CreateFile () [10]. Розглянемо наступний фрагмент коду.
hFile=CreateFile (sDir, GENERIC_READ, 0,0, OPEN_EXISTING, 0,0); fileSize=GetFileSize (hFile, 0); * fileBuffer=new char [fileSi...