
- •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. Заголовочный файл ресурсов
130. Научная графика с использованием ресурсов: меню, окна диалога и мультимедийного звука. Заголовочный файл win32mfcfour.H. Заголовочный файл ресурсов
Ниже приведен заголовочный файл WIN32MFCFOURR.H.
#define IDM_FOUR 100
В следующем файле находятся описания классов для этой программы. Этот файл называется WIN32MFCFOUR.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 CNTApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CFourierDataDialog : public CModalDialog
{
public:
CFourierDataDialog(CWnd* pParentWnd= NULL)
: CModalDialog("FourierData", pParentWnd)
{ }
virtual void OnOK();
};
Описания окна диалога программы приведены в файле WIN32MFCFOUR.DLG.
DLGINCLUDE RCDATA DISCARDABLE
{
"WIN32MFCFOURR.H\0"
}
AboutBox DIALOG 14,22,200,75
STYLE WS_BORDER|WS_CAPTION|WS_DLGFRAME|WS_POPUP
CAPTION "About Box"
FONT 8,"MS Sans Serif"
{
CTEXT "A MFC Fourier Series With",-1,30,5,144,8
PUSHBUTTON "Okay",IDOK,84,55,32,14
}
FourierData DIALOG 74,21,142,70
STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|
WS_CAPTION|WS_SYSMENU
CAPTION "Forier Series Information"
FONT 8,"MS Sans Serif"
{
LTEXT "Title: ",-1,6,5,28,8
}
В файле описания ресурсов WIN32MFCFOUR.RC находится описание меню приложения.
#include <windows.h>
#include "WIN32MFCFOURR.H"
FourierMenu MENU
BEGIN
POPUP "Fourier Data"
BEGIN
MENUITEM "Fourier About...",IDM_ABOUT
MENUITEM "Forier Data...", IDM_FOUR
MENUITEM "Exit", IDM_EXIT
END
END
rcinclude WIN32MFCFOUR.dlg
///////////////////////////////////////////////////
CNTApp theApp;
CMainWnd::CMainWnd()
{
Create((AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
LoadCursor(NULL,IDC_CROSS),
(HBRUSH) GetStockObject(LTGRAY_BRUSH),NULL)),
"A 32-bit MFC Fourier Series Under Windows 95 and NT",
WS_OVERLAPPEDWINDOW,rectDefault,NULL,"FourierMenu");
}
void CMainWnd::OnSize(UINT,int x,int y)
{
m_cxClient=x;
m_cyClient=y;
}
void CMainWnd::OnPaint()
{
CPaintDC dc(this);
// создание поля для рисования
dc.SetMapMode(MM_ISOTROPIC);
dc.SetWindowExt(500,500);
dc.SetViewportExt(m_cxClient,-m_cyClient);
dc.SetViewportOrg(m_cxClient/20,m_cyClient/2);
// оси координат
dc.MoveTo(0,240);
dc.LineTo(0,-240);
dc.MoveTo(0,0);
dc.LineTo(400,0);
dc.MoveTo(0,0);
// рисуем
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++;
}
// готовим ресурс для мультимедийного звука
// проигриваем звук после завершения рисования
sndPlaySound(szWave, SND_SYNC);
//oldfont= dc.SelectObject(&newfont);
// удалям шрифт
dc.SelectObject(oldfont);
newfont.DeleteObject();
}
void CFourierDataDialog::OnOK()
{
GetDlgItemText(IDD_TITLE,mytitle,80);
nterms= GetDlgItemInt(IDD_TERMS,NULL,0);
CModalDialog::OnOK();
}
void CMainWnd::OnFourierData()
{
CFourierDataDialog dlgFourierData(this);
if(dlgFourierData.DoModal()== IDOK)
{
InvalidateRect(NULL,TRUE);
UpdateWindow();
}
};
void CMainWnd::OnExit()
{
sndPlaySound(NULL,0);
DestroyWindow();
}
BOOL CNTApp::InitInstance()
{
m_pMainWnd=new CMainWnd();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
Заголовочный файл WIN32MFCFOUR.H.
Теперь класс CMainWnd() содержит таблицу сообщений и несколько объявлений функций. Как видно из следующего листинга, это функции OnPaint(), OnSize(), OnCreate(), OnAbout(), OnFoarierData() и OnExit(). Вместо ключевого слова virtual используется afx_insg. OnPaint() — функция-член класса CWnd, которая переопределена в классе CMainWnd. Это позволяет изменять содержимое рабочей области.
Библиотечные классы CDialog и CModalDialog поддерживают обычные и модальные окна диалога. Класс CFourierDataDialog порожден от библиотечного класса CModalDialog.
Работа с модальным окном диалога должна быть завершена, и только после этого пользователь может производить другие действия над приложением.
Заголовочный файл ресурсов WIN32MFCFOURR.H, файл описания ресурсов WIN32MFCFOUR.RC и файл описания окна диалога WIN32MFCFOUR.DLG.
В файле 24FOURR.H определены пять констант. IDM_FOUR, IDM_ABOUT и IDM_EXIT используются для обозначения пунктов меню, a IDD_TERMS и IDD_TITLE необходимы для окна диалога ввода данных.
файл WIN32MFCFOUR.DLG содержит описания окна диалога "О Программе" и окна диалога для ввода данных.
131. Научная графика с использованием ресурсов: меню, окна диалога и мультимедийного звука. Создание нового класса CMainWnd. Определение размера рабочей области окна. Рисование графика. Окно диалога "О Программе". Окно диалога для ввода данных. Обработка функции OnExit().
Приложение рисует в окне сумму ряда Фурье. Этот пример продемонстрирует, как с использованием Microsoft Foundation Classes для Windows 95 и Windows NT применить три ресурса: меню, окно диалога и мультимедийный звук. Чтобы воспроизвести звук, компьютер должен быть снабжен соответствующими средствами мультимедиа.
Для построения программы требуется несколько файлов. Звуковой двоичный файл WIN32MFCFOUR.WAV вам придется создать самостоятельно.
Ниже приведен заголовочный файл WIN32MFCFOURR.H.
#define IDM_FOUR 100
В следующем файле находятся описания классов для этой программы. Этот файл называется WIN32MFCFOUR.H.
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
afx_msg void OnPaint();
afx_msg void OnSize(UINT,int,int);
};
class CNTApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
Описания окна диалога программы приведены в файле WIN32MFCFOUR.DLG.
DLGINCLUDE RCDATA DISCARDABLE
{
"WIN32MFCFOURR.H\0"
}
AboutBox DIALOG 14,22,200,75
LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL
STYLE WS_BORDER|WS_CAPTION|WS_DLGFRAME|WS_POPUP
CAPTION "About Box"
FONT 8,"MS Sans Serif"
{
CTEXT "A MFC Fourier Series With",-1,30,5,144,8
}
FourierData DIALOG 74,21,142,70
LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL
STYLE DS_MODALFRAME|WS_POPUP|WS_VISIBLE|
WS_CAPTION|WS_SYSMENU
CAPTION "Forier Series Information"
FONT 8,"MS Sans Serif"
{
LTEXT "Title: ",-1,6,5,28,8
}
В файле описания ресурсов WIN32MFCFOUR.RC находится описание меню приложения.
#include <windows.h>
#include "WIN32MFCFOURR.H"
FourierMenu MENU
BEGIN
POPUP "Fourier Data"
BEGIN
MENUITEM "Fourier About...",IDM_ABOUT
END
END
rcinclude WIN32MFCFOUR.dlg
CNTApp theApp;
CMainWnd::CMainWnd()
{
Create((AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
LoadCursor(NULL,IDC_CROSS),
(HBRUSH) GetStockObject(LTGRAY_BRUSH),NULL)),
"A 32-bit MFC Fourier Series Under Windows 95 and NT",
WS_OVERLAPPEDWINDOW,rectDefault,NULL,"FourierMenu");
}
void CMainWnd::OnPaint()
{
CPaintDC dc(this);
DWORD dwBColor= RGB(0,0,0); // черный
int i,j,ltitle,ang;
double y,yp;
CFont newfont;
CFont* oldfont;
// создание поля для рисования
dc.SetMapMode(MM_ISOTROPIC);
dc.SetWindowExt(500,500);
dc.SetViewportExt(m_cxClient,-m_cyClient);
dc.SetViewportOrg(m_cxClient/20,m_cyClient/2);
ang= 0;
yp= 0.0;
// оси координат
dc.MoveTo(0,240);
dc.LineTo(0,-240);
dc.MoveTo(0,0);
dc.LineTo(400,0);
dc.MoveTo(0,0);
// рисуем
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++;
}
// готовим ресурс для мультимедийного звука
// проигриваем звук после завершения рисования
sndPlaySound(szWave, SND_SYNC);
//oldfont= dc.SelectObject(&newfont);
// удалям шрифт
dc.SelectObject(oldfont);
newfont.DeleteObject();
}
Создание нового класса CMainWnd.
Можно задать параметры объекта CMainWnd путем создания регистрационного класса при помощи AlxRegisterWndClass(). Регистрационный класс имеет много полей, четыре из которых легко изменить: стиль, курсор, фон и значок свернутого окна.
Определение размера рабочей области окна.
Метод OnSize() определяет размер рабочей области данного окна, поскольку при изменении размеров окна оно получает сообщение WM_SIZE.
Рисование графика.
Чтобы избежать проблем масштабирования, которые имели место в предыдущем примере, для рисования создается масштабируемое поле. Вызовом функции SetMapMode() заданный по умолчанию режим отображения заменяется на MM_ISOTROPIC. Этот режим использует произвольные единицы для задания координат.
dc.SetMapMode(MM_ISOTROPIC);
Протяженность координатных осей по х и у задается равной 500 единицам.
dc.SetWindowExt(500,500);
Это просто означает, что длина осей х и у будет составлять 500 единиц, независимо от размеров окна. Физические границы изображения устанавливаются по текущим размерам окна, то есть по значениям переменных cxClient и cyClient.
dc.SetViewportExt(m_cxClient,-m_cyClient);
В этом случае все 500 единиц на координатных осях попадут в окно. (Заметим, что использование отрицательного числа при задании вертикального размера приведет к тому, что координата у будет возрастать по направлению снизу вверх.) Физическое начало отсчета устанавливается на середине оси у и на небольшом расстоянии (одной двадцатой ширины окна) от левого края по оси х. Вот как выполняется установка начала отсчета:
dc.SetViewportOrg(m_cxClient/20,m_cyClient/2);
В следующем фрагменте текста функции MoveTo() и LineTo() используются для изображения осей координат. Сопоставьте приведенный здесь текст и изображения на экране, представленные далее на рисунках.
Звуковые ресурсы так же просто использовать в программе, как курсоры, значки и растровые изображения. Здесь применена мультимедийная функция sndPlaySound().
sndPlaySound(szWave, SND_SYNC);
При вызове функции предполагается, что звуковой ресурс существует и доступен для использования. Если это так, все, что необходимо для воспроизведения звука, — простое обращение к sndPlaySound().
Заканчивая работу, OnPaint() удаляет ранее созданный шрифт.
Окно диалога "О Программе".
Такого рода окна диалога очень легко создавать и программировать. Окно диалога "О Программе" используется для выдачи на экран сведений о программе, ее разработчиках, дате регистрации авторских прав и так далее.
Когда пользователь выбирает пункт меню Fourier About..., создается модальное окно диалога. Функция обработки OnAbout() занимает лишь несколько строк текста:
void CMainWnd::OnAbout()
{
CModalDialog about("AboutBox",this);
about.DoModal();
}
Конструктору класса CModalDialog в качестве окна-родителя передается указатель на текущее окно. Для этого используется указатель this, который обозначает используемый в данный момент объект. Функция DoModal() обеспечивает отображение окна диалога на экране. При нажатии на кнопку ОК окно диалога исчезает с экрана.
Окно диалога для ввода данных.
void CMainWnd::OnFourierData()
{
CFourierDataDialog dlgFourierData(this);
if(dlgFourierData.DoModal()== IDOK)
{
InvalidateRect(NULL,TRUE);
UpdateWindow();
}
};
Класс CFourierDataDialog порожден от CModalDialog в заголовочном файле WIN32MFCFOUR.H, как уже говорилось. Обратите внимание, что именно здесь приложение получает данные. Эти данные были введены пользователем в окно диалога.
void CFourierDataDialog::OnOK()
{
GetDlgItemText(IDD_TITLE,mytitle,80);
nterms= GetDlgItemInt(IDD_TERMS,NULL,0);
CModalDialog::OnOK();
}
Обработка функции OnExit().
Третий пункт в меню приложения — Exit (выход). При выполнении этой команды удаляется звуковой ресурс, а окно уничтожается вызовом DestroyWindow():
void CMainWnd::OnExit()
{
sndPlaySound(NULL,0);
DestroyWindow();
}
Этот пункт меню дает пользователю возможность завершить программу, не прибегая к оконному меню.