
- •6. Использование указателя this. Встраиваемые (inline-) функции. Статические члены класса.
- •8. Перегрузка функций (методов класса). Почему следует использовать перегрузку. Перегрузка функций. Перегрузка конструкторов.
- •10.Перегрузка операций (операторов). Понятие перегрузки операторов. Синтаксис перегрузки операции. Перегрузка бинарных операторов.
- •11. Перегрузка операций (операторов). Перегрузка операторов отношения и логических операторов. Перегрузка оператора присваивания. Перегрузка унарных операторов.
- •12. Перегрузка операций (операторов). Перегрузка операторов инкремента и декремента. Перегрузка оператора индексирования. Перегрузка оператора вызова функции.
- •13.Перегрузка операций (операторов). Перегрузка операторов доступа к членам класса. Перегрузка операторов new и delete. Функции преобразования типа.
- •14. Наследование. Производные классы. Синтаксис производного класса. Простое наследование. Множественное наследование. Виртуальные базовые классы. Создание производных классов.
- •15. Полиморфизм и виртуальные функции. Раннее и позднее связывание. Динамический полиморфизм. Виртуальные функции. Виртуальные и невиртуальные функции.
- •16. Полиморфизм и виртуальные функции. Применение динамического полиморфизма. Виртуальные деструкторы. Абстрактные классы и чисто виртуальные функции.
- •Void *memset(void *dest, int cchar, size_t count);
- •25. Стандартный класс string. Конструкторы строк. Изменение величины строки и ее емкости. Присваивание, добавление и обмен строк. Доступ к символам строки.
- •26. Стандартный класс string. Копирование строк и подстроки. Сравнение строк. Операции поиска.
- •27. Стандартный класс string. Вставка символов в строку. Замена и удаление символов из строки. Операции ввода-вывода строк.
- •Int main ()
- •28. Шаблоны. Шаблоны функций. Перегрузка шаблонов функций. Специализация шаблонов функций. Шаблоны функций сортировки.
- •29. Шаблоны классов. Конкретизация шаблона класса. Специализация шаблонов классов. Статические члены шаблонного класса.
- •30.Ключевое слово typename. Недостатки шаблонов.
- •Символьные функции (ctype.H)
- •Проверка, является ли символ цифрой, буквой или символом ascii
- •Проверка на управляющий символ, разделительный символ (пробел, табуляция, перевод строки) и знак препинания
- •Преобразования в код ascii, к верхнему и нижнему регистрам
- •41. Строковые функции (string.H). Работа с функциями манипуляции памятью. Нахождение символа в строке. Сравнение символов в строках. Заполнение буфера при помощи memset().
- •Работа с функциями манипуляции памятью
- •Нахождение символа в строке
- •Сравнение символов в строках
- •Заполнение буфера при помощи memset()
- •Сравнение содержимого двух строк
- •Приведение символов к верхнему регистру
- •43. Математические функции (math.H). Построение таблицы значений тригонометрических функций.
- •Построение таблицы значений тригонометрических функций
- •Структуры для представления даты/времени и параметры функций
- •Работа с функциями localtime() и asctlme()
- •Работа с функциями gmtime() и asctime()
- •Работа с функцией ctime()
- •45. Общие принципы и средства программирования для Windows. Язык Windows. Краткий обзор среды Windows. Преимущества использования Windows.
- •46. Общие принципы и средства программирования для Windows. Графический интерфейс пользователя. Многозадачная среда. Преимущества ввода посредством очереди.
- •48. Программирование для Windows: принципы и понятия. Окно Windows. Элементы интерфейса Windows.
- •49. Программирование для Windows: принципы и понятия. Рамка окна. Заголовок окна. Кнопка оконного меню. Оконное меню. Кнопка свертывания окна. Кнопка развертывания окна.
- •50.Программирование для Windows: принципы и понятия. Вертикальная полоса прокрутки. Горизонтальная полоса прокрутки. Панель меню. Рабочая область окна.
- •52. Программирование для Windows: принципы и понятия. Окна сообщений Windows. Окна диалога Windows. Шрифты Windows. Растровые изображения Windows. Перья Windows. Кисти Windows.
- •61.Новое поколение Windows. Передача информации с помощью сообщений. Независимость от драйверов аппаратуры. Plug-and-play. Библиотеки динамической компоновки. 16 бит против 32 бит.
- •62. Новое поколение Windows. Различные аппаратные платформы. Различные программные платформы. Многопроцессорные системы. Гибкость.
- •63.Новое поколение Windows. Распределенные вычисления. Сертифицированная правительством система обеспечения безопасности. Открытая архитектура систем Windows. Сбои системы. Виртуальная память.
- •64.Требования к программному и аппаратному обеспечению Windows приложений. Требования к программному обеспечению. Требования к аппаратуре.
- •65. Понятия и терминология Windows. Окно Windows. Визуальные компоненты интерфейса. Рамка. Заголовок окна. Кнопка управления или кнопка завершения.
- •66. Понятия и терминология Windows. Системное меню. Кнопка минимизации. Кнопка максимизации. Кнопка завершения.
- •67. Понятия и терминология Windows. Вертикальная полоса прокрутки. Горизонтальная полоса прокрутки. Полоса меню. Клиентская область.
- •68. Классы окон. Объектно-ориентированное программирование. Пиктограммы. Курсоры. Текстовые курсоры. Окна сообщений.
- •71. Ресурсы Windows. Функции Windows. Windows.H и связанные файлы заголовков. Нотация и правила подготовки программ Windows.
- •73. Доступ к оболочке Windows. Система координат. Основные режимы отображения. Координаты устройства.
- •77. Виртуальные клавиши. Системные таймеры. Срабатывание таймера. Эффективное использование механизма таймеров.
- •78. Память. Распределение памяти с помощью операционной системы. Уменьшение количества объектов. Уменьшение размера объекта. Использование перемещаемых объектов.
- •79. Простое приложение Windows. Оболочка для всех приложений. Эффективное использование описателей. Компоненты приложения Windows. Функция WinMain(). Регистрация класса окна.
- •80. Простое приложение Windows. Style. LpfnWndProc. CbClsExtra. CbWndExtra. Hinstance. HIсоn. HCursor. HbrBackground. IpszMenuName. IpszClassName.
- •81. Простое приложение Windows. Создание окна. Отображение и перерисовка окна. Цикл обработки сообщений. Функция GetMessage(). Функция TranslateMessage(). Функция DispatchMessage().
- •82. Простое приложение Windows. Функция окна. Сообщение wm_paint. Сообщение wm_destroy. Функция DefWindowProc(). Написание файла определения модуля.
- •83. Простое приложение и шаблон. Рисование эллипса. Рисование сегмента. Рисование сектора. Рисование прямоугольника.
- •84. Шаблоны приложения. Использование шаблона для создания программы, изображающей синусоиду. Файлы заголовков Windows. Файлы ресурсов. Создание программы для вывода круговых диаграмм.
- •85. Управление окном Windows. Понимание полос прокрутки. Терминология полос прокрутки. Константы полос прокрутки. Диапазон полосы прокрутки. Положение полосы прокрутки. Типы полос прокрутки.
- •96 Работа с ресурсами шрифта. Терминология шрифтов Windows. Константы шрифта. Структура textmetric. Структура logfonta. Ячейка символа шрифта.
- •97 Основные характеристики шрифта. Ширина шрифта. Автоматические кернинг и установка межстрочного интервала. Множества символов oem и ansi.
- •98 Основные характеристики шрифта. Логические и физические шрифты. Векторные, растровые шрифты и шрифты TrueType. Схема отображения шрифтов.
- •99 Выбор семейств шрифтов. Стандартные шрифты. Принтерные шрифты.
- •100 Приложения, управляющие шрифтами. Функция CreateFont(). Функция CreateFontlndirect().
- •102. Средства и методы gdi. Перья. Кисти. Изменение цветов фона. Изменение цветов текста.
- •104 Работа с битовыми образами. Функции BitBlt() и PlgBlt(). Загрузка и вывод на экран битовых образов. Обработка битовых образов при помощи функции Windows nt MaskBlt().
- •105. Вращение графических образов. Вращение прямоугольника.
- •108. Разработка приложений Win32. Важные изменения для переносимости программ в Windows 95 или Windows nt. Типы и структуры данных для Win32. Описатели в Win32.
- •Важные изменения для переносимости программ в Windows 95 или Windows nt.
- •Описатели в Win32.
- •109 Разработка приложений Win32. Менеджер палитр. Использование логической палитры.
- •110 Разработка приложений Win32. Шаблон приложения win32swp. Особенности поддержки Win32 в win32swp.C. Функция WinMain(). Регистрация класса окна. Создание окна.
- •111. Разработка приложений Win32. Отображение и перерисовка окна. Цикл обработки
- •112 Разработка приложений Win32. Функция окна. Обработка сообщений wm_paint. Обработка сообщения wm_destroy. Функция DefWIndowProc().
- •113 Подключение ресурсов. Приложение Win32 win32bar. Круговая диаграмма. Приложение pie.Cpp.
- •116. Библиотека Microsoft Foundation Classes. Необходимость библиотеки mfc. Принципы построения библиотеки mfc. Основные возможности библиотеки mfc.
- •117. Библиотека Microsoft Foundation Classes. Все начинается с cObject. Важнейшие классы библиотеки. Создание приложения mfc Windows. Выбор количества окон, которые будут поддерживаться приложением.
- •118. Библиотека Microsoft Foundation Classes. Базы данных. Поддержка составных документов. Внешний вид приложения и другие опции. Другие опции.
- •119. Библиотека Microsoft Foundation Classes. Имена файлов и классов. Создание приложения. Поработайте самостоятельно.
- •120. Упрощенное приложение. Вывод окна в приложении 23simple.Cpp. Использование afxwin.H. Создание класса, производного от cWinApp. CFrameWnd.
- •121. Упрощенное приложение. Реализация метода Inltlnstance(). Конструктор. Запуск 23simple.Cpp. Упрощение структуры облегчает сопровождение.
- •124. Диалоговые окна и элементы управления. Формирование ресурсов диалогового окна. Задание идентификаторов диалогового окна и элементов управления. Создание диалогового окна Sample Dialog.
- •128. Линейчатая диаграмма с использованием меню и окон диалога.
- •Заголовочный файл 24bar.H.
- •Заголовочный файл ресурсов 24barr.H, файл описания ресурсов 24bar.Rc и файл описания окна диалога 24bar.Dlg.
- •Исходный текст программы 24bar.Cpp.
- •Особенности Microsoft Foundation Classes, относящиеся к Windows 95 и nt.
- •Изучаем win32mfctmp.Cpp.
- •130. Научная графика с использованием ресурсов: меню, окна диалога и мультимедийного звука. Заголовочный файл win32mfcfour.H. Заголовочный файл ресурсов
124. Диалоговые окна и элементы управления. Формирование ресурсов диалогового окна. Задание идентификаторов диалогового окна и элементов управления. Создание диалогового окна Sample Dialog.
Окна диалога позволяют пользователям отмечать элементы в списке, устанавливать флажки опций, вводить строки и числа непосредственно с клавиатуры и косвенным образом вводить вещественные числа (с плавающей точкой). Начиная с Windows 3.0, в окно диалога также может входить поле со списком. Поле со списком (combo box) — это сочетание однострочного поля редактирования с окном-списком. Окно диалога для программиста является ключевым элементом при организации в программе Windows ввода нетривиальных данных. Диалог также облегчает жизнь программиста, поскольку Windows берет на себя часть необходимых забот о нем.
Окна диалога вызываются при выборе команды из меню и появляются в виде раскрывающихся окон. Команда, которая вызывает появление окна диалога, обычно помечается многоточием после названия. Команды About Box... и Data Entry... в предыдущем разделе вызывают появление окна диалога
Каждый ресурс диалогового блока имеет идентификатор, который позволяет объекту диалогового блока задать, какой ресурс диалогового блока будет использоваться. Идентификатор может быть строкой или целым числом. Вы можете передать этот идентификатор конструктору диалогового блока.
Для построения объекта диалогового блока создайте его, используя указатель на родительское окно и идентификатор ресурса. Родительское окно почти всегда задается как this. Можно также использовать основное окно приложения (это единственное окно, всегда присутствующее в приложении ObjectWindows). Исключением является ситуация, когда вы задаете объект диалогового блока как клиентное окно в конструкторе TFrameWindow. Конструктор передает объект диалогового блока функции TFrameWindow::Init, которая автоматически устанавливает родительский объект диалогового блока.
Ресурс диалогового окна используется для вывода окна на экран самого окна и элементов управления, которые находиться на нем. Класс диалогового окна необходим для программной реализации управления окном и его элементами. Ресурсы диалогового окна создаются редактором ресурсов. Класс окна создает ClassWizard на основе ресурсов диалогового окна. Обычно все эти классы это дети от класса CDialog. Каждый элемент управления обычно имеет переменную в классе диалогового окна. При генерации приложения AppWizard'ом у Вас автоматически генерируется окно о программе.
125. Создание класса диалогового окна. Использование класса диалогового окна. Организация вывода диалогового окна на экран. За кулисами. Использование элемента управления типа список. Использование элементов управления типа переключатель.
Класс CDialog - базовый класс, используемый для отображения диалоговых окон на экране. Диалоговые окна имеют два типа: модальный и немодальный. Модальное диалоговое окно должно быть закрыто пользователем прежде, чем прикладная программа продолжается. Немодальное диалоговое окно позволяет пользователю отображать диалоговое окно и возвращаться к другой задаче без того, чтобы отменить или удалять диалоговое окно.
Объект CDialog - комбинация шаблона диалога и класса наследника CDialog. Используйте редактора диалога, чтобы создать шаблон диалога и сохранять его в ресурсе, затем используйте ClassWizard, чтобы создать класс, полученный из CDialog.
Диалоговое окно, подобно любому другому окну, получает сообщения от Windows. В диалоговом окне, Вы особенно заинтересованы в уведомительных сообщениях обработки из средств элементов управления блока диалога, именно так пользователь взаимодействует с Вашим диалоговым окном. ClassWizard просматривает потенциальные сообщения, сгенерированные каждым элементом управлением в Вашем диалоговом окне, и Вы можете выбирать, которые сообщения Вы желаете обработать. ClassWizard затем добавляет соответствующие входы карты сообщения и функции членства драйвера сообщения к новому классу для Вас. Вы только должны записать специфический для приложения код в функциях членства драйвера.
Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла
(при этом можно указать стартовую папку для поиска файла, и тип\расширение выбираемого файла)
Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.
Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.
Диалоговые окна Переключатели используются для предоставления во время установки до четырех взаимоисключающих вариантов выбора и возврата выбранного значения. Доступно три диалоговых окна Переключатели: Переключатели (2 варианта выбора), Переключатели (3 варианта выбора) и Переключатели (4 варианта выбора). Эти три диалоговых окна идентичны и различаются только количеством переключателей; каждое из них может быть добавлено к проекту развертывания лишь один раз.
Эти диалоговые окна содержат соответственно два, три и четыре переключателя с подписями и дополнительными метками для предоставления сведений пользователю. Тексты этих меток задаются во время разработки в окне Свойства. Каждый переключатель имеет дополнительные свойства для указания значения по умолчанию и варианта, выбираемого по умолчанию.
На следующем рисунке показано типичное диалоговое окно Переключатели (2 варианта выбора), отображаемое во время установки.
Во многих диалоговых окнах присутствует еще один компонент - блок списка. Этот список позволяет вам просматривать и выбирать запись из списка переменной длины, не выходя из диалогового окна.
Если в списке появляется мерцающий курсор и вы хотите что-то най ти, можно ввести слово (или его первые буквы), после чего IDE выполнит его поиск.
Активизировать блок списка можно щелкнув на нем кнопкой "мыши" или выбрав подсвеченную букву заголовка списка (либо нажать клавишу Tab или клавиши управления курсором, пока он не будет подсвечен). После вывода списка для его просмотра можно использовать полосу прокрутки или клавиши стрелок (вверх и вниз) на клавиатуре.
126. Научная графика: графическое представление функции с использованием меню и окон диалога. Заголовочный файл 24FOUR.H. Заголовочный файл ресурсов 24FOURR.H, файл описания ресурсов 24FOUR.RC и файл описания окна диалога 24FOUR.DLG.
Следующий пример 24FOUR изобразит в рабочей области окна график суммы ряда Фурье. Это приложение использует два ресурса Windows: меню и окна диалога.
С ростом сложности приложений увеличивается и количество файлов, не обходимых для их построения. Для этой программы требуется файл определения модуля (только при создании приложения Windows З.х) 24FOUR.DEF, заголовочный файл 24FOUR.H, заголовочный файл для ресурсов 24FOURR.H (с дополнительным "R" в имени), файл описания ресурсов 24FOUR.RC, файл с описанием окна диалога 24FOUR.DLG и файл с исходным текстом программы 24FOUR.CPP.
Ниже приведен листинг файла определения модуля 24FOUR.DEF:
NAME 24FOUR
DESCRIPTION 'Drawing A Fourier Series Waveform'
; Изображение суммы ряда Фурье
EXETYPE WINDOWS
STUB 'WINSTUB.EXE'
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE MULTIPLE
HEAPSIZE 4096
Заголовочный файл 24FOUR.H, листинг которого приведен ниже, содержит определения классов.
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
afx_msg void OnPaint();
afx_msg void OnSize(UINT,int,int);
afx_msg int OnCreate(LPCREATESTRUCT cs);
afx_msg void OnAbout();
afx_msg void OnFourierData();
afx_msg void OnExit();
DECLARE_MESSAGE_MAP();
};
class CTheApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CFourierDataDialog : public CModalDialog
{
public:
CFourierDataDialog(CWnd* pParentWnd= NULL)
: CModalDialog("FourierData", pParentWnd)
{ }
virtual void OnOK();
};
Функция OnPaint() вызывается автоматически, когда объекту класса CMainWnd от приложения или от Windows поступает сообщение WM_PAINT. OnSize() вызывается, когда приходит сообщение WM_SIZE, вызванное изменением размеров окна. Эта информация пригодится при масштабировании графика по размерам окна. OnCreate() указывает на структуру, несущую информацию о создаваемом окне. Там содержатся размер, стиль и другие параметры окна. OnAboat(), OnFourierData() и OnExit() — функции, которые реагируют на сообщения WM_COMMAND. Эти сообщения возникают, когда пользователь выбирает команду меню или окна диалога.
Следующий заголовочный файл содержит уже привычные идентификационные номера для меню и окон диалога. Этот файл называется 24FOURR.H.
#define IDM_FOUR 100
#define IDM_ABOUT 110
#define IDM_EXIT 120
#define IDD_TERMS 200
#define IDD_TITLE 201
IDM_FOUR, IDM_ABOUT и IDM_EXIT используются для обозначения пунктов меню, a IDD_TERMS и IDD_TITLE необходимы для окна диалога ввода данных.
Файл описания ресурсов 24FOUR.RC содержит описание меню и значка. Описание окна диалога помещено в отдельный файл.
#include <windows.h>
#include <afxres.h>
#include "24FOURR.h"
FourierMenu MENU
BEGIN
POPUP "Fourier Data"
BEGIN
MENUITEM "Fourier Data...", IDM_FOUR
MENUITEM "Fourier About...", IDM_ABOUT
MENUITEM "Exit", IDM_EXIT
END
END
rcinclude 24FOUR.dlg
В файл 24FOUR.RC включена ссылка на значок, созданный с помощью Icon Editor. Этот значок будет использован для обозначения приложения.
В файле 24FOUR.DLG содержатся описания двух окон диалога: простого окна "О Программе" (About) и окна для ввода данных.
Заголовочный файл ресурсов 24FOURR.H, файл описания ресурсов 24FOUR.RC и файл описания окна диалога 24FOUR.DLG используются компилятором ресурсов для создания единственного файла с готовыми ресурсами Windows.
127. Файл исходного текста 24FOUR.СРР. Создание нового класса CMainWnd. Определение размера рабочей области окна. Рисование графика. Окно диалога "О Программе". Окно диалога для ввода данных. Обработка команды OnExit().
1,2. Можно задать параметры объекта CMainWnd путем создания класса окна при помощи AfxRegisterWndClass. Класс окна имеет много полей, четыре из которых легко изменить: стиль, курсор, фон и значок свернутого окна.
Небольшой фрагмент текста, приведенный здесь, демонстрирует синтаксис для изменения курсора на стандартный курсор в виде крестика (IDC_CROSS) и задания кисти, которая закрасит фон белым (WHITE_BRUSH).
CMainWnd::CMainWnd()
{ Create((AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
LoadCursor(NULL,IDC_CROSS),
(HBRUSH) (GetStockObject(WHITE_BRUSH)),NULL)),
"Fourier Series Foundation Class Application",
WS_OVERLAPPEDWINDOW,rectDefault,NULL,"FourierMenu");}
Функции Create() передается имя меню для окна.
3. Метод OnSize()определяет размер рабочей области данного окна. Когда размер окна изменяется, оно получает сообщение WM_SIZE. Как показано ниже, размер окна запоминается в двух переменных, m_cxClient и т_су Client.
void CMainWnd::OnSize(UINT,int x,int y)
{ m_cxClient=x; m_cyClient=y; }
4. Чтобы избежать проблем масштабирования, для рисования создается масштабируемое поле.
Как показано в приведенном фрагменте кода, вызовом функции SetMapMode() режим отображения заменяется на MM_ISOTROPIC. Этот режим использует произвольные единицы для задания координат. dc.SetMapMode (MM_ISOTROPIC) ;
Следующая строка задает протяженность координатных осей по х и у в 500 единиц.
dc.SetWindowExt(500,500);
Это просто означает, что длина осей х и у будет составлять 500 единиц, независимо от размеров окна. Физические границы изображения устанавливаются по текущим размерам окна:
dc.SetViewportExt (m_cxClient, -m_cyClient) ;
В этом случае все 500 единиц на координатных осях попадут в окно.
Как показано далее, физическое начало отсчета устанавливается на середине оси у и на небольшом расстоянии (одной двадцатой ширины окна) от левого края по оси х.
dc.SetViewportOrg(m_cxClient/20,m_cyClient/2) ;
Затем в окне изображаются координатные оси х и у.
Метод рисования графика суммы ряда Фурье использует два цикла for. Переменная i управляет значением угла для функции синуса, а переменная j соответствует текущему номеру гармоники. Каждая точка на графике представляет собой сумму всех гармоник для данного значения угла. Таким образом, если потребовать от приложения изобразить ряд из 1000 гармоник, программе придется проделать 400 000 вычислений.
// рисуем; выводим график суммы ряда Фурье
for(i= 0; i<= 400; i++)
{ for(j= 1; j<= nterms; j++)
{ y= (150.0/((j*2.0)-1.0))*sin(((j*2.0)-1.0)*0.015708*ang); yp= yp+ y; }
dc.LineTo(i,(int) yp); yp-= yp; ang++;}
При помощи функции LineTo() точки графика соединяются последовательно, благодаря чему график изображается сплошной линией. Внутренняя область графика будет заполнена серым цветом. Для этого вызывается функция ExtFloodFill(), которой в качестве аргументов передаются координаты точек внутри заполняемого пространства и цвет границы. Параметр FLOODFILLBORDER указывает, что требуется заполнить все пространство до границы заданного цвета.
// Готовимся к закрашиванию графика
// кистью newbrush. newbrush.CreateSolidBrush(dwColor[7]) ;
newbrush.CreateSolidBrush(dwColor[7]);
oldbrush= dc.SelectObject(&newbrush);
dc.ExtFloodFill(150,10,dwColor[0],FLOODFILLBORDER);
dc.ExtFloodFill(300,-10,dwColor[0],FLOODFILLBORDER);
В конце работы выводится заголовок графика, а затем удаляется созданная ранее кисть.
// заголовок графика
ltitle= strlen(mytitle); dc.TextOut(200-(ltitle*8/2),185,mytitle,ltitle);
// удаляем кисть
dc.SelectObject(oldbrush); newbrush.DeleteObject();
Все объекты, выводимые в рабочую область, масштабируются по размерам окна.
5. Окно диалога "О Программе" используется, чтобы сообщить сведения о программе, ее разработчиках, дате регистрации авторских прав и так далее.
Когда пользователь выбирает пункт меню Fourier About..., создается модальное окно диалога. Процедура обработки OnAbout() занимает лишь несколько строк текста:
void CMainWnd::OnAbout()
{ CModalDialog about("AboutBox",this); about.DoModal();}
Конструктору класса CModalDialog в качестве окна-родителя передается указатель на текущее окно. Для этого используется указатель this, который обозначает используемый в данный момент объект. Функция DoModal() обеспечивает отображение окна диалога на экране. При нажатии на кнопку ОК окно диалога исчезает с экрана.
6. Окно диалога, воспринимающее ввод пользователя можно вызвать, выбрав в меню пункт Fourier Data...Пользователь может ввести заголовок графика и целое число, задающее количество гармоник ряда Фурье. Если пользователь нажал кнопку ОК, окно диалога закрывается, а рабочая область окна перерисовывается.
Как уже говорилось, класс CFourierDataDialog порожден от CModalDialog в заголовочном файле 24FOUR.H. Обратите внимание, что именно здесь приложение получает данные. Эти данные были введены пользователем в окно диалога. Вот текст, извлекающий эту информацию после нажатия кнопки ОК:
void CFourierDataDialog::OnOK()
{ GetDlgItemText(IDD_TITLE,mytitle,80);
nterms= GetDlgItemInt(IDD_TERMS,NULL,0); CModalDialog::OnOK();}
Функция GetDlgItemText() заносит информацию о заголовке в виде строки в переменную mytitle. Положение этой информации в окне диалога задается константой IDD_TITLE. Целое число вводится аналогично функцией GetDlgItemInt(). Его идентифицирует константа IDD_TERMS, а значение запоминается в nterms. Второй параметр GetDlgItemText() используется для сообщения об ошибках перевода текста в число, но в данном примере не используется. Если третий параметр GetDlgItemInt() не ноль, функция будет воспринимать числа со знаком. В данном случае возможны только положительные числа.
7. Последний пункт в меню приложения — Exit (выход). При выполнении этой команды окно уничтожается вызовом DestroyWindow():
void CMainWnd::OnExit()
{ DestroyWindow();}
Меню приложения дает пользователю возможность завершить программу, не прибегая к оконному меню.