Форма отчета по лабораторной работе. Отчет должен содержать: титульный лист; цель работы; условие задачи; текст программы с комментариями; вывод введенных данных в первом приложении и вывод
Отчет должен содержать: титульный лист; цель работы; условие задачи; текст программы с комментариями; вывод введенных данных в первом приложении и вывод данных, прочитанных из файла во втором приложении; выводы по работе.
Вопросы для самоконтроля
1. Режимы открытия файлов.
2. Отличия работы с файлом в текстовом и двоичном режимах.
3. Режимы открытия файлов, в которых файл обязательно должен существовать до открытия.
4. Режимы открытия файлов, в которых файл создается заново (существующий файл очищается).
Лабораторная работа № 8. Изучение приложений с графическим интерфейсом пользователя для Windows
Цель и задачи работы, требования к результатам ее выполнения
Цель работы состоит в овладении навыками разработки приложений с графическим интерфейсом пользователя для операционных систем типа Windows XP/7/8. Для достижения цели необходимо выполнить следующие задачи:
- изучить учебный материал, посвященный разработке приложений с графическим интерфейсом пользователя для операционных систем типа Windows [5];
- разработать программу на языке Си для решения заданного варианта задания;
- отладить программу;
- подготовить отчет по лабораторной работе.
Краткая характеристика объекта изучения
Сообщения Windows
Операционная система (OC) Windows предоставляет пользователю множество системных функций для использования ее возможностей и доступа к аппаратуре компьютера, эти функции составляют API (Application Programming Interface) – Win API. Кроме того, OC Windows обменивается информацией с приложением с помощью механизма сообщений. Сообщение это структура в памяти типа MSG. Когда пользователь выполняет некоторые действия с элементами интерфейса или работает с «мышью», или с клавиатурой, ОС посылает приложению сообщение с информацией об этом. Все стандартные сообщения имеют идентификатор (номер), заданный разработчиками ОС. Примеры идентификаторов сообщений (определены в заголовочных файлах директивой #define, являются целыми константами): WM_LBUTTONUP, WM_LBUTTONDOWN, WM_LBUTTONDBLCLK, WM_MOUSEMOVE, WM_CHAR, WM_KEYUP, WM_KEYDOWN, WM_ACTIVATE, WM_CREATE, WM_DESTROY, WM_MOVE, WM_SIZE, WM_KILLFOCUS, WM_PAINT, WM_COMMAND, WM_TIMER [5].
Структура приложения в Windows
Приложение с графическим интерфейсом пользователя состоит из двух основных частей:
- функция WinMain – точка входа в приложение (как правило, создает окно и запускает цикл обработки сообщений);
- функция окна - является функцией обратного вызова, «вызывается многократно операционной системой» для обработки сообщений приложения.
Стандартный заголовок функции WinMain имеет вид:
int WINAPI WinMain(HINSTANCE hIns, HINSTANCE hPrevIns, LPSTR arg, int WinMode)
Назначение функции WinMain:
- определение класса окна;
- регистрация класса окна;
- создание окна;
- отображение окна;
- запуск цикла обработки сообщений.
Стандартный заголовок функции окна (функции обратного вызова) имеет вид:
LRESULT CALLBACK WinFun(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Внутри функции окна обычно для обработки сообщений используют переключатель, который имеет следующую структуру:
switch(message)
{
case WM_CREATE: // Создание окна
………. break;
case WM_DESTROY: // Завершение программы
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN: // Нажатие левой клавиши мыши
……. break;
default: // Обработка сообщений по умолчанию
return DefWindowProc(hwnd, message, wParam, lParam);
}
Вывод графики в Windows
Контексты устройств
Контекст устройства (Device Context) – некоторое логическое представление физического устройства (экрана монитора, принтера, и т.д.). Контекст устройства – это внутренняя структура, для управления информацией о выходном устройстве. Она содержит информацию о параметрах и атрибутах («перо», «кисть», шрифт и др.) вывода графики на устройство (например, дисплей или принтер). Вместо направления вывода непосредственно на аппаратное устройство, приложение направляет его в контекст устройства, а затем Windows пересылает вывод в аппаратное устройство.
Типы контекстов устройств:
– контекст дисплея;
– контекст принтера;
– контекст в памяти (моделирует в памяти устройство вывода);
– информационный контекст (служит для получения данных от устройства).
Заголовки функции для получения контекста устройств (в программе используются хэндлы контекстов устройств - HDC):
HDC GetDC(HWND hWnd);
HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
Освобождение контекста устройств:
int ReleaseDC(HWND hWnd, HDC hDC);
BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint);
Графические «перья» и «кисти»
Заголовок функции для получения предопределенных «перьев» или «кистей»:
HGDIOBJ GetStockObject(int);
Возможные параметры:
Для «перьев»:
WHITE_PEN, BLACK_PEN, NULL_PEN
Для «кистей»:
WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH, DKGRAY_BRUSH, BLACK_BRUSH, NULL_BRUSH
Заголовок функции для создания «пера»:
HPEN CreatePen(int, int, COLORREF);
Первый параметр определяет стиль, возможные значения (заданы константами в заголовочных файлах):
PS_SOLID /* ______ */
PS_DASH /* ------- */
PS_DOT /* ....... */
PS_DASHDOT /* _._._._ */
PS_DASHDOTDOT /* _.._.._ */
PS_NULL
Второй параметр определяет толщину.
Третий параметр определяет цвет, для получения цвета можно использовать макрос:
RGB(r,g,b)
он возвращает тип объявленный как
typedef DWORD COLORREF;
Заголовок функции для создания сплошной «кисти»:
HBRUSH CreateSolidBrush(COLORREF);
Заголовок функции для создания «кисти» с заданным стилем:
HBRUSH CreateHatchBrush(int, COLORREF);
Первый параметр определяет стиль, возможные значения, определенные в заголовочных файлах:
HS_HORIZONTAL /* ----- */
HS_VERTICAL /* || */
HS_FDIAGONAL /* \\\\\ */
HS_BDIAGONAL /* ///// */
HS_CROSS /* +++++ */
HS_DIAGCROSS /* xxxxx */
Заголовок функции для загрузки «пера» или «кисти» в контекст устройства:
HGDIOBJ SelectObject(HDC, HGDIOBJ);
После работы с объектами («пером» и «кистью») их необходимо удалить, заголовок функции для удаления имеет вид:
BOOL DeleteObject(HGDIOBJ);