
- •Методические указания
- •Оглавление
- •Теоретический материал
- •Введение
- •Типы данных Windows. Типы указателей Windows. Использование памяти
- •Венгерская нотация. Префиксы данных
- •Общая структура Windows-приложений
- •Описание класса (стиля) окна. Структура wndclass
- •Создание (визуализация) окна
- •Сообщения. Схема обработки. Прототипы функций-обработчиков сообщений
- •Ресурсы Windows-приложений
- •Встроенные редакторы ресурсов
- •Средства организации вывода данных
- •Средства организации ввода данных
- •Вывод растровых изображений в Windows-приложениях
- •Автоматические шаблоны (каркасы) windows-приложений (тип empty, simple)
- •Создать шаблон Windows-приложения (тип Empty) и изучить его свойства
- •Модифицировать шаблон
- •Создать шаблон Windows-приложения (тип Simple) и изучить его свойства
- •Типовой шаблон (каркас) windows-приложения (тшп)
- •Изучение свойств типового шаблона
- •Изучить листинг типового шаблона
- •Воспроизвести типовой шаблон
- •Изучить свойства типового шаблона
- •Модификация типового шаблона
- •Изменить интерфейс типового шаблона
- •Добавить строку приветствия в типовой шаблон
- •Использование типового шаблона
- •Организовать вывод данных с применением функций
- •Добавить ресурс - меню
- •Организовать ввод данных с применением меню и пользовательского диалогового окна
- •Автоматический шаблон (каркас) windows-приложения (тип hello)
- •Изучение свойств шаблона (тип Hello)
- •Создать шаблон Windows-приложения (тип Hello)
- •Изучить ресурсы шаблона
- •Изучить свойства шаблона
- •Модификация шаблона (тип Hello)
- •Получить типовой шаблон приложения (тшп) из шаблона (тип Hello)
- •Организовать ввод-вывод числовых данных с применением пользовательского диалогового окна
- •Индивидуальные задания
-
Средства организации ввода данных
Ввод данных для обработки в приложении может производиться: - из окошек редактирования диалоговых окон; - из файлов (с использованием функций традиционных и объектно-ориентированных библиотек ввода-вывода С, С++).
Ввод текста. Выполнняется, например, с использованием окошка (поля) редактирования ресурса – диалоговое окно и функции GetDlgItemText (…)
ВВЕСТИ_ТЕКСТ_ИЗ_ПОЛЯ_ДИАЛОГОВОГО_ОКНА(ДескрипторОкна, ДескрипторПоляРедактирова-
ния, СтрокаДляВводаДанных, ДлинаСтрокиДляВвода).
Прототип функции указан ниже
.
Пример использования функции
GetDlgItemText (hDlg, IDC_EDIT1, NumString1, 15) .
Ввод целых чисел. Выполняется с использованием окошка редактирования ресурса – диалоговое окно и функции GetDlgItemInt (…)
ВВЕСТИ_ЦЕЛОЕ_ИЗ_ПОЛЯ_ДИАЛОГОВОГО_ОКНА(ДескрипторОкна, ДескрипторПоляРедактиро-
вания, NULL, bool НаличиеЗнака).
Прототип функции указан ниже (если НаличиеЗнака = 1, то результат ввода преобразуется в целое со знаком; если НаличиеЗнака = 0, то результат ввода преобразуется в целое без знака)
.
Пример использования функции
Int I;
Int j;
…………………
i = GetDlgItemInt (hDlg, IDC_EDIT1, NULL, 0);
ji = GetDlgItemInt (hDlg, IDC_EDIT1, NULL, 1); .
Ввод вещественных чисел. Производится аналогично вводу строковых данных, но с последующим приведением введенной строки к вещественному типу, например, с помощью функции преобразования atof(…)
ПРЕОБРАЗОВАТЬ_В_ВЕЩЕСТВЕННОЕ(Строка).
Пример использования функции
char MyString[20];
float MyFloat;
……..
GetDlgItemText (hDlg,IDC_EDIT1, MyString,15);
MyFloat = atof (MyString); .
-
Вывод растровых изображений в Windows-приложениях
Интерфейс графических устройств GDI обрабатывает операторы работы с графикой, обеспечивая интерфейс использования, не зависящий от особенностей конкретных устройств вывода. Включает графические примитивы – наборы функций для рисования базовых элементов.
При выводе на экран в используемых функциях вывода, как правило, необходимо задание координат вывода в клиентской области экрана. Для задания координат могут использоваться разные режимы отображения, например логические единицы (виртуальная система координат) или логические координаты (пикселы, мм, дюймы, … ). Преобразование координат в физические (в систему координат устройства, т.е. в пикселы) производится в соответствии с установленным режимом отображения. Windows поддерживает семь режимов отображения, описанных в заголовочных файлах <windows.h> и <wingdi.h> [см. ПРИЛОЖЕНИЕ. РежимыОтображения]. Смена режима отображения выполняется функцией SetMapMode(…).
По умолчанию принят режим отображения MM_TEXT – пиксельные координаты (с шагом смещения в пикселах и со смещением при увеличении значения координаты по оси х вправо и по оси у вниз экрана). Верхний левый угол клиентской области экрана имеет координаты (0,0). В других режимах возможно другое направление смещения с шагом смещения в 0.1, 0.01 мм, в 0.01, 0.001 дюйма.
При рисовании используют: - контекст устройства (переменная типа HDC hdc. Например, hdc = BeginPaint (hWnd, &ps) ) и структуру типа PAINTSTRUCT ps; - перья (средство рисования контуров, линий с атрибутами – цвет, стиль, толщина); - кисти (средство заливки замкнутых контуров, рисования графических объектов с атрибутами – цвет, стиль заливки, стиль штриховки); - окно вывода (с заданием его атрибутов, например цвета фона, текста, областей вывода и т.д.).
Для получения дескрипторов различных стандартных графических объектов, включая кисти, перья используют API-функцию GetStockObject (…) с прототипом:
HGDIOBJ GetStockObject (int Оbject).
Указанная функция возвращает дескриптор объекта, задаваемого параметром Оbject (тип HGDIOBJ задает дескриптор GDI-объекта).
Стили перьев см. в [ПРИЛОЖЕНИЕ. ПараметрыФункцииCreatePen]. Пример получения стандартного пера показан ниже
HPEN hPen;
………….
hPen = SelectObject (hdc, GetStockObject (WHITE_PEN)); .
Для создания пользовательского пера используется функция CreatePen(…).
Аналогично организуется работа с кистью – ресурсом рисования на экране с использованием готовой маски определенного размера, цвета и имеющем некоторый шаблон заполнения. Типовые параметры кисти см. в [ПРИЛОЖЕНИЕ. ВстроенныеКисти].
Схема взаимодействия программы и контекстов устройств при выводе растрового изображения в окно приведена на рисунке ниже.
Основные графические примитивы: - дуги эллипса Arc(…), ArcTo(…); - эллипсы и окружности Ellipse(…); - линии от текущей точки до точки, указанной в функции LineTo(hdc, x, y); - прямоугольники Rectangle(…); - полигоны Polygon(…); - связанные отрезки прямых PolyLine(…). А также функция рисования точки COLORREF SetPixel (hdc, x, y, COLORREF crColor), функция получения цвета точки в виде переменной типа COLORREF crColor = GetPixel(hdc, x, y), функция перемещения курсора к указанной точке с сохранением координаты текущей точки в структуре типа LPPOINT - BOOL MoveToEx(hdc, x, y, LPPOINT pPoint).
Пример использования функций приведен ниже
WndProc(…)
{
…….
HPEN hPen;
……
switch (messg)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
hPen = CreatePen(PS_SOLID,1,RGB (0, 255, 0) ); //или PS_DASH или RGB (255, 0, 0)
SelectObject (hdc, hPen);
Ellipse ( hdc, 100, 100, 300, 300 );
MoveToEx(hdc, 50, 50, NULL);
LineTo(hdc, 400,400);
……………….
ValidateRect(hWnd,NULL);
EndPaint(hWnd, &ps);
break;
…………………..
}
} .