В общем чел попросил сделать ему задания, интернета у него нет, сдать надо в понедельник, а я сегодня утром уезжаю на выходные. Если у кого-нибудь время будет, прошу просмотреть задания и сделать хоть что-нибудь. Будем признательны мы с ним вместе. Вот текст заданий:
Работа 7 (индивидуальное задание А). Вывод в главное окно приложения текста и фигур. Воспользовавшись в качестве образца приложением 10-1 из книги [1] (стр. 89) или 5-2 из книги [2] (стр. 165), составьте программу в соответствии с индивидуальным заданием А.
Работа 8 (индивидуальное задание В). Меню. Воспользуйтесь программой из предыдущей работы в качестве заготовки. Включите в проект файлы заголовков и ресурсов. Опишите в файле ресурсов меню в соответствии с индивидуальным заданием и добавьте в приложение обработку сообщений от меню. В качестве образца можно воспользоваться приложением 11-1 из книги [1] (стр. 95) или 6-1 из книги [2] (стр. 180) (из которых надо взять только часть, связанную с меню).
Работа 9 (индивидуальное задание С). Модальный диалог в качестве главного окна приложения.
Составьте программу без главного окна, выводящую на рабочий стол Windows при своем запуске модальный диалог с указанными в индивидуальном задании элементами управления. В качестве образца можно воспользоваться приложением 11-1 из книги [1] (стр. 95) или 6-1 из книги [2] (стр. 180) (из которых надо взять только часть, связанную с диалогом). Текст программы будет включать в себя следующие элементы:
• главную функцию WinMain () всего с двумя предложениями - вызовом функции DialogBox () для создания диалогового окна и предложением return 0 для возврата в Windows;
• оконную функцию диалогового окна DlgProc ();
• функции обработки сообщений диалогового окна (в минимальном варианте сообщений WM_INITDIALOG об инициализации диалога и WM_COMMAND от элементов управления диалогового окна; в различных индивидуальных заданиях дополнительно требуется обработка тех или иных сообщений, например, WMCTLCOLORDLG или WMCTLCOLORSTATIC).
Включите в файл ресурсов указанные в индивидуальном задании элементы управления, а в оконную функцию диалогового окна - макросы для обработки дополнительных сообщений. Для каждого обрабатываемого сообщения предусмотрите вызываемую им функцию.
Краткая справка по программным средствам, используемым в этой работе:
1. Общий формат элементов управления, размещаемых в диалоговом окне: CONTROL "текст", идентификатор, "класс элемента", стиль, координаты
2. Возможные классы и соответствующие им стили элементов:
класс STATIC, стили SSLEFT, SSCENTER (для текста), SSICON (для пиктограммы), SSBITMAP (для рисунка), SS_WHITEFRAME, SSBLACKFRAME (для рамки); класс LISTBOX, стили WSVSCROLL, WSBORDER, LBSSORT; класс СОМВОВОХ, стили WSVSCROLL, WS_BORDER, CBSSORT; класс BUTTON, стили BSPUSHBUTTON, BSAUTORADIOBUTTON.
3. Сообщения, которые необходимо обрабатывать, чтобы изменять цвет диалогового окна или элементов управления в нем:
WMCTLCOLORDLG WMCTLCOLORSТАТIС WMCTLCOLORLISTBOX WMCTLCOLQREDIT
Формат функций, обрабатывающих эти сообщения: HBRUSH OnCtlColor.. . (HWND hwndDlg, HDC hdc, HWND hwndCtl, int c)
Здесь:
hwndDlg - дескриптор диалогового окна;
hdc - дескриптор контекста устройства диалогового окна или конкретного элемента в нем. Позволяет изменять, в частности, цвет шрифта или фона под ним;
hwndCtl - дескриптор элемента управления в диалоговом окне;
с - константа, характеризующая тип элемента управления (в программе не используется).
Функции должны возвращать дескриптор кисти, которой красится диалог или элемент в нем.
Если требуется выяснить, от какого элемента управления пришло сообщение, следует сравнивать значение параметра hwndCtl с дескрипторами имеющихся в диалоге элементов управления. Получить значение дескрипторов по известным нам идентификаторам (задаваемым в файле ресурсов) можно с помощью функции GetDlgl tem ().
4. Для заполнения списка символьными строками следует при обработке сообщения WMINITDIALOG организовать цикл с вызовом двух функций: wsprintf () и SendDlgltemMessage () . Первая функция будет преобразовывать выводимые числа в символьную форму и формировать символьную строку, добавляемую в список, а вторая - посылать диалогу сообщение LB_ADDSTRING для добавления в список этой строки. Формат вызова функции SendDlgltemMessage ():
SendDlgltemMessage(hwndDlg, idCtl, LB_ADDSTRING, 0, (LPARAM) str);
Здесь:
hwndDlg - дескриптор диалогового окна;
idCtl - идентификатор элемента управления, которому посылается сообщение, в данном случае идентификатор списка; :
LBADDSTRING - символическое обозначение посылаемого сообщения (могут быть и другие, например, LBDELETESTRING);
str - выводимая в список строка.
Работа 10 (индивидуальное задание D). Вывод графика в главное окно приложения. Программа составляется на основе работы 7, но вместо текста и фигур в окно выводится график. В середине главного окна большого размера (600x400 пикселов) нарисуйте горизонтальную и вертикальную оси координат и выведите вокруг этих осей график указанной в задании математической функции. Абсциссы и ординаты точек графика вычисляйте в цикле (число шагов цикла указано в задании); абсцисса будет обозначать номер пиксела по горизонтальной оси, ордината - номер писксела по вертикальной оси. Каждую точку графика рисуйте небольшим цветным квадратиком размером в 2-3 пиксела. Не забудьте сдвинуть график в середину окна так, чтобы он правильно изображался относительно начала координат; при этом переверните его относительно горизонтальной оси, поскольку вертикальная нумерация пикселов в окнах Windows начинается от верхнего края окна, а не от нижнего края рисунка, как это принято при изображении любых графиков.
Работа 11 (индивидуальное задание Е). Работа с файлами. Составьте программу, которая с помощью 32-разрядных функций работы с файлами CreateFile (), WriteFileO, SetFilePointer () и ReadFile () выполняет базовые операции с файлами, именно, создание нового файла, запись в него данных и их контрольное чтение. Зарезервируйте в памяти массив и запишите в него в цикле указанный в индивидуальном задании ряд чисел. Создайте файл с произвольным именем. Выведите созданный массив в файл. Прочитайте файл в другой, пустой массив такого же размера. Выведите в окно сообщения первый и последний элемент прочитанного массива. Программа состоит из одной функции WinMain () без каких-либо окон или элементов управления (кроме окна вывода сообщения).
С помощью программы Norton Commander выведите на экран созданный вами файл в форме шестна-дцатеричных чисел и убедитесь, что файл имеет длину и содержимое, соответствующие заданию.
Работа 12. Проецирование файлов на память. Воспользуйтесь файлом, созданным в предыдущей работе. С помощью функций CreateFileMappingO и MapViewOfFile () выполните проецирование файла на память. Обращаясь к содержимому файла с помощью полученного указателя, измените одно из данных, записанных ранее в файл. С помощью программы Norton Commander выведите на экран созданный вами файл в форме шестнадцатеричных чисел и убедитесь, что файл действительно модифицирован.
Работа 13. Потоки. Воспользуйтесь программой из работы 8 (индивидуальное задание В), в которой выбором пунктов меню переключались изображения на экране. Исключите из приложения меню, а также все функции, связанные с обработкой сообщений от меню. В функции обработки сообщения WM_CREATE запустите вторичный поток, который периодически, например, с частотой 1 Гц, осуществляет переключение тех же изображений. Запуск потока осуществляется функцией CreateThread (); рабочая функция потока, имя которой указывается в качестве третьего параметра функции CreateThread (), должна иметь прототип DWORD WINAPI имя функции (LPVOID). В этой функции с помощью оператора while (1) организуйте бесконечный цикл переключения изображений с усыплением потока в каждом шаге цикла на заданное время с помощью функции Sleep ().
Индивидуальные задания
Задание А14. Составьте программу, в которой в главное окно серого цвета выводятся три вложенных друг в друга квадрата с размерами сторон 300, 200 и 100 пикселов, соприкасающиеся левыми верхними углами. Внешний квадрат закрасить фиолетовым цветом, средний - темно-синим, а внутренний - светло-синим.
Задание В14. Составьте программу с меню "Отражение", состоящим из пунктов с названиями "Слева" и "Справа". Выбор каждого пункта меню должен приводить к выводу в главное окно серого цвета либо левой, либо правой половины синего круга. Полукруги рисуются с помощью функций Pie () или Chord().
Задание С14. Включите в состав диалога кнопку "Закрыть", комбинированный список с линейкой вертикальной прокрутки, а также статический элемент, куда функция DlgDirListComboBox () поместит имя выбранного файла. Введите в оконную процедуру диалога обработку сообщений WM_CTLCOLORDLG и WM_CTLCOLORSTATIC. Покрасьте окно диалога и статический элемент в бледно-фиолетовый цвет, а текст в статическом элементе - в темно-фиолетовый. Заполните комбинированный список упорядоченным содержимым текущего каталога диска, воспользовавшись для этого функцией DlgDirListComboBox(), которую следует вызвать при обработке сообщения WM_INITDIALOG. Выведите в комбинированный список только файлы .ЕХЕ.
Задание D14. Выведите график функции/= е~х cos5x, вычисляя координаты 200 точек для положительных значений х и 200 - для отрицательных. Для переменной х задайте шаг 1/100; ординаты графика умножайте на 50.
Задание Е14. Запишите в файл последовательный ряд из 10000 целых четных чисел в убывающем порядке.