Упражнение 1. 1

advertisement
Упражнение 4. 1 (Программирование для Windows)
Напишите программу - Win32 application, основное окно которой содержит следующие опции и подопции меню:
Файл - Выход
Функции - Ввод Данных, Рисовать
При выборе пользователем опции "Ввод Данных" программа должна организовать диалог с пользователем, в рамках
которого запросить, что надо нарисовать (прямоугольник или эллипс), размер прямоугольника (для эллипса - в которой он
вписан) в сантиметрах и время таймаута в секундах. Размер прямоугольника должен быть в диапазоне от 2 до 10
сантиметров по каждой из сторон. Программа должна помнить ранее введенные значения и предотвращать ввод данных
вне диапазона. Значения по умолчанию должны быть взяты из ini-файла (возможны дробные значения размеров).
При выборе пользователем опции "Рисовать" программа должна нарисовать запрошенную фигуру указанного размера
в своем основном окне красным цветом. Предыдущая фигура должна быть стерта. Нарисованная фигура должна
сохраняться в окне или до следующей перерисовки, или до истечения определенного времени таймаута, после которого
ранее нарисованная фигура должна быть стерта. Значение времени таймаута должно быть взято из ini-файла.
При выборе пользователем опции "Выход" программа должна запросить пользователя, действительно ли он хочет
выйти, и при утвердительном ответе обновить в ini-файле значения размеров прямоугольника и времени таймаута по
умолчанию на текущие значения, после этого завершить работу.
Советы по программированию:
1. Это упражнение можно выполнить на базе предложенного примера программы для Windows - Win1. Для этого
скопируйте файлы проекта Win1: файл с текстом программы на языке С win1.c, файл ресурсов win1.rc и файл
resource.h в свою директорию. Создайте в среде Visual C++ новый проект типа Win32 Application и включите в него
упомянутые выше файлы. Начните с проверки работоспособности проекта - для этого постройте исполняемый exeмодуль и запустите его на исполнение. Если вы не пользуетесь отладчиком, то предварительно установите Set Active
Configuration в меню Build равным Win32 Release. Убедитесь, что программа работает. Далее двигайтесь по шагам,
проверяя правильность работы программы после каждой группы существенных изменений.
2.
Начните модификацию программы с введения требуемых опций основного меню. Для этого отредактируйте меню
MYMENU в файле ресурсов. (Если в редакторе ресурсов опции меню выглядят не так, как в запущенной программе,
нажмите в окне с шаблоном меню правую кнопку мыши и уберите галку в позиции View as Popup.) Помните, что
ниспадающее вниз меню называется Pop-up меню.
3.
Обработайте в программе сообщения новых опций меню по аналогии с уже имеющимися опциями. (Для проверки при
выборе пользователем новых опций меню ваша программа может выдать какое-нибудь сообщение с помощью вызова
функции MessageBox).
4.
Существенные изменения программы-прототипа начните с программирования модального диалога. В редакторе
ресурсов создайте подходящий шаблон диалога, присвойте диалогу идентификатор (имя). Напишите код диалоговой
функции. В начале работы диалоговой функции (событие WM_INITDIALOG) передайте в диалог исходные значения
параметров (функция SetDlgItemText). По окончанию диалога перед вызовом функции EndDialog сохраните введенные
значения параметров (GetDlgItemText) в переменных программы. В оконной функции активизируйте диалог (в ответ
на выбор пользователем соответствующей опции меню, событие WM_COMMAND) c помощью вызова функции
DialogBox. Убедидесь, что вводимые данные правильно передаются в Вашу программу.
5.
Организуйте считывание исходных данных из ini-файла (функции GetPrivateProfileString и GetPrivateProfileInt).
6.
Собственно рисование фигур (функции Rectangle и Ellipse) может быть выполнено непосредственно в окне (без
промежуточного рисования в памяти). Запоминайте параметры фигуры, чтобы она могла быть перерисована заново в
любой момент в ответ на событие WM_PAINT. Для принудительной инициализации этого события используйте
функции InvalidateRect и UpdateWindow.
7.
Установите таймер (SetTimer) и обработайте событие таймера WM_TIMER в оконной функции.
8.
Обеспечьте сохранение измененных параметров в ini-файле (функция WritePrivateProfileString) при выходе из
программы как реакцию на событие WM_CLOSE. Генерируйте это событие (функция PostMessage) в ответ на
утвердительный ответ пользователя о выходе из программы. Запросить пользователя (да/нет) можно с помощью
функции MessageBox с параметром MB_YESNO.
Упражнение 4. 2 (Программирование для Windows)
Напишите программу - Win32 application, основное окно которой содержит следующие опции и подопции меню:
Файл - Выход
Функции - Ввод Данных, Стереть
Кроме основного окна, программа должна создать дополнительное окно для графического вывода семейства парабол
y = -a*x2.
При выборе пользователем опции "Ввод Данных" программа должна организовать диалог с пользователем, в рамках
которого запросить значение коэффициента a в диапазоне от 0,5 до 1,5. Значение по умолчанию должно быть взято из iniфайла. Программа должна помнить ранее введенное значение и предотвращать ввод данных вне диапазона. При
нормальном завершении диалога программа должна нарисовать указанную параболу в дополнительном окне, не стирая
предыдущие графики. В любой момент времени дополнительное окно должно содержать все нарисованные до этого
параболы. Окно очищается либо при выборе пользователем опции "Стереть", либо при наступлении события таймаута.
Событие таймаута наступает через t секунд после завершения рисования последней параболы. Значение времени таймаута
t должно быть взято из ini-файла.
При выборе пользователем опции "Стереть" программа должна очистить дополнительное окно.
При выборе пользователем опции "Выход" программа должна запросить пользователя, действительно ли он хочет
выйти, и при утвердительном ответе и при утвердительном ответе обновить в ini-файле значение коэффициента a по
умолчанию на текущее значение, после этого завершить работу.
Советы по программированию:
1. Это упражнение можно выполнить на базе предложенного примера программы для Windows - Win1. Для этого
скопируйте файлы проекта Win1: файл с текстом программы на языке С win1.c, файл ресурсов win1.rc и файл
resource.h в свою директорию. Создайте в среде Visual C++ новый проект типа Win32 Application и включите в него
упомянутые выше файлы. Начните с проверки работоспособности проекта - для этого постройте исполняемый exeмодуль и запустите его на исполнение. Если вы не пользуетесь отладчиком, то предварительно установите Set Active
Configuration в меню Build равным Win32 Release. Убедитесь, что программа работает. Далее двигайтесь по шагам,
проверяя правильность работы программы после каждой группы существенных изменений.
2.
Начните модификацию программы с введения требуемых опций основного меню. Для этого отредактируйте меню
MYMENU в файле ресурсов. (Если в редакторе ресурсов опции меню выглядят не так, как в запущенной программе,
нажмите в окне с шаблоном меню правую кнопку мыши и уберите галку в позиции View as Popup.) Помните, что
ниспадающее вниз меню называется Pop-up меню.
3.
Обработайте в программе сообщения новых опций меню по аналогии с уже имеющимися опциями. (Для проверки при
выборе пользователем новых опций меню ваша программа может выдать какое-нибудь сообщение с помощью вызова
функции MessageBox).
4.
Существенные изменения программы-прототипа начните с программирования модального диалога. В редакторе
ресурсов создайте подходящий шаблон диалога, присвойте диалогу идентификатор (имя). Напишите код диалоговой
функции. В начале работы диалоговой функции (событие WM_INITDIALOG) передайте в диалог исходные значения
параметров (функция SetDlgItemText). По окончанию диалога перед вызовом функции EndDialog сохраните введенные
значения параметров (GetDlgItemText) в переменных программы. В оконной функции активизируйте диалог (в ответ
на выбор пользователем соответствующей опции меню, событие WM_COMMAND) c помощью вызова функции
DialogBox. Убедидесь, что вводимые данные правильно передаются в Вашу программу.
5.
Организуйте считывание исходных данных из ini-файла (функции GetPrivateProfileString и GetPrivateProfileInt).
6.
Определить класс для дополнительного окна и создайте его (функция CreateWindow, по аналогии с тем как это
сделано для основного окна). Напишите для этого окна оконную функцию. Не забудьте предусмотреть обработку
события WM_PAINT для этого окна.
7.
Собственно рисование парабол (функции LineTo и MoveToEx) лучше выполнять в отведенной для этого в программе
области памяти и копировать содержимое этой области при наступлении события WM_PAINT (как это сделано в
программе-прототипе). Для принудительной инициализации этого события используйте функции InvalidateRect и
UpdateWindow с нужным идентификатором окна.
8.
Установите таймер (SetTimer) и обработайте событие таймера WM_TIMER в оконной функции.
9.
Обеспечьте сохранение измененных параметров в ini-файле (функция WritePrivateProfileString) при выходе из
программы как реакцию на событие WM_CLOSE. Генерируйте это событие (функция PostMessage) в ответ на
утвердительный ответ пользователя о выходе из программы. Запросить пользователя (да/нет) можно с помощью
функции MessageBox с параметром MB_YESNO.
Упражнение 4. 3 (Программирование для Windows)
Напишите программу - Win32 application, основное окно которой содержит следующие опции и подопции меню:
Файл - Выход
Функции - Ввод Радиуса, Стереть
Кроме основного окна, программа должна создать дополнительное окно для графического вывода семейства окружностей.
Пользователь должен иметь возможность указать центр рисуемой окружности с помощью мыши. Рисование окружности
должно происходить при нажатии пользователем правой кнопки мыши.
При выборе пользователем опции "Ввод Радиуса" программа должна организовать диалог с пользователем, в рамках
которого запросить значение радиуса окружности в сантиметрах в диапазоне от 0.2 до 10. При вводе пользователем числа
вне этого диапазона программа должна побуждать пользователя ввести верное значение. Программа должна помнить
ранее введенное значение. Значение по умолчанию должно быть взято из ini-файла. В любой момент времени
дополнительное окно должно содержать все нарисованные до этого окружности. Окно очищается либо при выборе
пользователем опции "Стереть", либо при наступлении события таймаута. Событие таймаута наступает через t секунд
после завершения рисования последней параболы. Значение времени таймаута t должно быть взято из ini-файла.
При выборе пользователем опции "Стереть" программа должна очистить дополнительное окно.
При выборе пользователем опции "Выход" программа должна запросить пользователя, действительно ли он хочет
выйти, и при утвердительном ответе обновить в ini-файле значение радиуса окружности по умолчанию на текущее
значение, после этого завершить работу.
Советы по программированию:
1. Это упражнение можно выполнить на базе предложенного примера программы для Windows - Win1. Для этого
скопируйте файлы проекта Win1: файл с текстом программы на языке С win1.c, файл ресурсов win1.rc и файл
resource.h в свою директорию. Создайте в среде Visual C++ новый проект типа Win32 Application и включите в него
упомянутые выше файлы. Начните с проверки работоспособности проекта - для этого постройте исполняемый exeмодуль и запустите его на исполнение. Если вы не пользуетесь отладчиком, то предварительно установите Set Active
Configuration в меню Build равным Win32 Release. Убедитесь, что программа работает. Далее двигайтесь по шагам,
проверяя правильность работы программы после каждой группы существенных изменений.
2.
Начните модификацию программы с введения требуемых опций основного меню. Для этого отредактируйте меню
MYMENU в файле ресурсов. (Если в редакторе ресурсов опции меню выглядят не так, как в запущенной программе,
нажмите в окне с шаблоном меню правую кнопку мыши и уберите галку в позиции View as Popup.) Помните, что
ниспадающее вниз меню называется Pop-up меню.
3.
Обработайте в программе сообщения новых опций меню по аналогии с уже имеющимися опциями. (Для проверки при
выборе пользователем новых опций меню ваша программа может выдать какое-нибудь сообщение с помощью вызова
функции MessageBox).
4.
Существенные изменения программы-прототипа начните с программирования модального диалога. В редакторе
ресурсов создайте подходящий шаблон диалога, присвойте диалогу идентификатор (имя). Напишите код диалоговой
функции. В начале работы диалоговой функции (событие WM_INITDIALOG) передайте в диалог исходные значения
параметров (функция SetDlgItemText). По окончанию диалога перед вызовом функции EndDialog сохраните введенные
значения параметров (GetDlgItemText) в переменных программы. В оконной функции активизируйте диалог (в ответ
на выбор пользователем соответствующей опции меню, событие WM_COMMAND) c помощью вызова функции
DialogBox. Убедидесь, что вводимые данные правильно передаются в Вашу программу.
5.
Организуйте считывание исходных данных из ini-файла (функции GetPrivateProfileString и GetPrivateProfileInt).
6.
Определить класс для дополнительного окна и создайте его (функция CreateWindow, по аналогии с тем как это
сделано для основного окна). Напишите для этого окна оконную функцию. Не забудьте предусмотреть обработку
события WM_PAINT для этого окна и события нажатия на кнопку мыши WM_RBUTTONDOWN для определения
центра рисуемой окружности.
7.
Собственно рисование окружностей (Ellipse) лучше выполнять в отведенной для этого в программе области памяти и
копировать содержимое этой области при наступлении события WM_PAINT (как это сделано в программе-прототипе).
Для принудительной инициализации этого события используйте функции InvalidateRect и UpdateWindow с нужным
идентификатором окна.
8.
Установите таймер (SetTimer) и обработайте событие таймера WM_TIMER в оконной функции.
9.
Обеспечьте сохранение измененных параметров в ini-файле (функция WritePrivateProfileString) при выходе из
программы как реакцию на событие WM_CLOSE. Генерируйте это событие (функция PostMessage) в ответ на
утвердительный ответ пользователя о выходе из программы. Запросить пользователя (да/нет) можно с помощью
функции MessageBox с параметром MB_YESNO.
Упражнение 4. 4 (Программирование для Windows)
Напишите программу - Win32 application, основное окно которой содержит следующие опции меню:
Выход
Индикаторы
Назовем "индикатором" небольшой цветной прямоугольник с цифровым номером посередине.
Программа должна отобразить в своем окне N индикаторов одинакового цвета. При нажатии пользователем левой кнопки
мыши, в тот момент когда курсор помещен на один из индикаторов, программа должна "включить" индикатор - изменить
его цвет. Включенный индикатор не должен реагировать на нажатие кнопки мыши. Программа должна автоматически
вернуть цвет индикатора в исходной по истечению времени задержки t. Пользователь может включать любой из
индикаторов в произвольный момент времени.
При выборе пользователем опции "Индикаторы" программа должна организовать диалог с пользователем, в рамках
которого запросить число индикаторов N в диапазоне от 1 до 25. Значение по умолчанию должно быть взято из ini-файла.
Программа должна помнить ранее введенное значение. Кроме этого, пользователь должен иметь возможность изменять
значение времени задержки t в секундах от 1 до 60. Значение по умолчанию должно быть взято из ini-файла. При
изменении числа индикаторов программа должна их перерисовать заново в исходном состоянии. Изменение значения
времени задержки должно влиять только на вновь включаемые индикаторы.
При выборе пользователем опции "Выход" программа должна запросить пользователя, действительно ли он хочет
выйти, и при утвердительном ответе обновить в ini-файле значения N и t по умолчанию на текущие значения, после этого
завершить работу.
Советы по программированию:
1. Это упражнение можно выполнить на базе предложенного примера программы для Windows - Win1. Для этого
скопируйте файлы проекта Win1: файл с текстом программы на языке С win1.c, файл ресурсов win1.rc и файл
resource.h в свою директорию. Создайте в среде Visual C++ новый проект типа Win32 Application и включите в него
упомянутые выше файлы. Начните с проверки работоспособности проекта - для этого постройте исполняемый exeмодуль и запустите его на исполнение. Если вы не пользуетесь отладчиком, то предварительно установите Set Active
Configuration в меню Build равным Win32 Release. Убедитесь, что программа работает. Далее двигайтесь по шагам,
проверяя правильность работы программы после каждой группы существенных изменений.
2.
Начните модификацию программы с введения требуемых опций основного меню. Для этого отредактируйте меню
MYMENU в файле ресурсов. (Если в редакторе ресурсов опции меню выглядят не так, как в запущенной программе,
нажмите в окне с шаблоном меню правую кнопку мыши и уберите галку в позиции View as Popup.) Помните, что
ниспадающее вниз меню называется Pop-up меню.
3.
Обработайте в программе сообщения новых опций меню по аналогии с уже имеющимися опциями. (Для проверки при
выборе пользователем новых опций меню ваша программа может выдать какое-нибудь сообщение с помощью вызова
функции MessageBox).
4.
Существенные изменения программы-прототипа начните с программирования модального диалога. В редакторе
ресурсов создайте подходящий шаблон диалога, присвойте диалогу идентификатор (имя). Напишите код диалоговой
функции. В начале работы диалоговой функции (событие WM_INITDIALOG) передайте в диалог исходные значения
параметров (функция SetDlgItemText). По окончанию диалога перед вызовом функции EndDialog сохраните введенные
значения параметров (GetDlgItemText) в переменных программы. В оконной функции активизируйте диалог (в ответ
на выбор пользователем соответствующей опции меню, событие WM_COMMAND) c помощью вызова функции
DialogBox. Убедитесь, что вводимые данные правильно передаются в Вашу программу.
5.
Организуйте считывание исходных данных из ini-файла (функция GetPrivateProfileInt).
6.
Собственно рисование индикаторов может быть выполнено как вывод текста (номер индикатора) на фоне нужного
цвета (функции SetBkColor, TextOut). Для принудительной инициализации события WM_PAINT используйте функции
InvalidateRect и UpdateWindow.
7.
Перерисуйте индикатор нужным цветом и установите таймер (SetTimer) в ответ на выбор пользователем конкретного
индикатора (событие WM_RBUTTONDOWN) и обработайте событие таймера WM_TIMER в оконной функции.
8.
Обеспечьте сохранение измененных параметров в ini-файле (функция WritePrivateProfileString) при выходе из
программы как реакцию на событие WM_CLOSE. Генерируйте это событие (функция PostMessage) в ответ на
утвердительный ответ пользователя о выходе из программы. Запросить пользователя (да/нет) можно с помощью
функции MessageBox с параметром MB_YESNO.
Download