- •Оглавление
- •1. Интерфейс графического устройства gdi. Обработка сообщений wm_paint.
- •2. Обмін інформацією між процесами та потоками. Обмін даними за допомогою файлів.
- •3.Створити програму у Windows (Win32 api), яка виводе одне (головне) вікно.
- •4. Обмін інформацією між процесами та потоками. Обмін повідомленнями.
- •5. Створити програму у Windows (Win32 api), яка демонструє основні стилі вікон (вікно верхнього рівня, спливаюче вікно з головним вікном та без нього, дочірнє вікно).
- •6. Процеси та потоки. Створення процесу. Створення потоку
- •7. Створити програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід текстових строк у вікно.
- •8) Створити програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід різноманітних типів ліній у вікно.
- •9. Робота з файлами. Асинхронні операції з файлами.
- •10. Створити простішу програму у Windows (Win32 api), яка забезпечує при отриманні повідомлення wm_paint вивід простих геометричних фігур у вікно.
- •11. Створити програму у Windows (Win32 api), яка забезпечує обробку повідомлень wm_paint, wm_destroy, wm_create, wm_command. Другі повідомлення передати на обробку стандартній функції вікна.
- •№ 12 Стандартні елементи керування. Графічний список. Індикатор прогресу. Складальний лічильник.
- •13. Створити простішу програму у Windows (Win32 api), яка забезпечує обробку повідомлень миші (wm_lbuttondown, wm_rbuttondown) у вікні.
- •15. Базові команди. Класифікація команд. Команди передачі даних. Команди обміну процесора з пам'яттю. Команди передачі кодів між процесором і периферією.
- •16. Команди обробки даних. Базові арифметичні команди.
- •17. Створити програму у Windows (Win32 api), яка забезпечує обробку повідомлень клавіатури (wm_keyup, wm_keydown) у вікні.
- •18. ВікнаWindows.Процедура створенняд очірнього вікна. Повідомлення wm_create.
- •19. Створити програму у Windows (Win32 api), яка забезпечує роботу з таймером.
- •20.Таймери Windows і служба часу.
- •24. Інтерфейс графічних пристроїв gdi. Обробка повідомлень wm_paint.
- •26. Створити простішу програму у Windows (Win32 api), яка забезпечує роботу з стандартним елементом керування - графічний список.
- •27. Основи розробки Windows-додатків. Головна функція WinMain(). Повідомлення Windows.
- •29 Створити програму у Windows (Win32 api), яка забезпечує роботу з стандартним елементом керування - набірний лічильник.
24. Інтерфейс графічних пристроїв gdi. Обробка повідомлень wm_paint.
Интерфейс графических устройств (Graphics Device Interface – GDI) системы открывает доступ к большому количеству функций вывода. Приложения, обращаясь к функциям GDI, работают не с физическими устройствами, а с логическими. То есть описание вызова функций не зависит от физического способа отображения. GDI передает указания о выводе драйверу устройства вывода. Драйвер работает непосредственно с физическим устройством и при управлении выводом учитывает его ограниченные возможности и аппаратные особенности. Благодаря этому приложения способны работать с любым устройством вывода, драйвер которого установлен в системе.
Параметры вывода устанавливают в контексте отображения с помощью функций GDI. Контекст отображения – это структура данных, которая содержит характеристики устройства вывода и указатели на выбранные инструменты рисования. Функции GDI используют только выбранные в контекст отображения параметры и инструменты рисования. Например, для рисования линии некоторой толщины приложение должно выбрать перо этой толщины. Дескриптор контекста отображения объявляется обычно следующим образом:
HDC hdc;
Система Windows является многозадачной операционной системой и, следовательно, на экране монитора могут одновременно присутствовать несколько окон связанных с различными приложениями. Окна могут менять размер и положение на экране, перекрывать друг друга, сворачиваться в иконку и разворачиваться на весь экран. В этих случаях изменяется клиентская область окна и часто возникает необходимость перерисовки изображения в клиентской области. При возникновении необходимости перерисовки клиентской области окна система посылает сообщение WM_PAINT и приложение само должно заниматься перерисовкой.
Обработка сообщения WM_PAINT в оконной функции
case WM_PAINT:
PAINTSTRUCT ps;
начинается с получения контекста устройства окна приложения:
HDC hdc = BeginPaint (hwnd, &ps);
функция BeginPaint, кроме возвращения дескриптора контекста устройства в качестве своего значения, обнуляет недействительную область окна (аналогично ValidateRect (hwnd, NULL);) и заносит некоторую информацию об обновляемой области в структуру ps. В полученном контексте устройства область отсечения совпадает с недействительной областью, что позволяет избежать вывода информации в ту часть клиентской области окна, которая в обновлении не нуждается.
Освобождаем контекст устройства
EndPaint (hwnd, &ps);
и завершаем обработку сообщения WM_PAINT
break;
Структура PAINTSTRUCT описана следующим образом:
typedef struct tagPAINTSTRUCT {
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT;
hdc – содержит дескриптор контекста отображения;
fErase – определяет необходимость стирания фона области обновления;
rcPaint – координаты прямоугольной области обновления;
Остальные поля зарезервированы для будущего использования.
Пример обработки сообщения WM_PAINT. В окно будет выведено синим цветом сообщение «Hello, world!».
PAINTSTRUCT ps;
HDC hdc;
switch (uMsg) {
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
SetTextColor(hdc, RGB(0,0,200));
TextOut(hdc,10,20,”Hello, world!”,strlen(”Hello, world!”));
EndPaint(hWnd,&ps);
break;
}
25. Основи програмування мовою С++. Функції.
Наилучшим способом создания и поддержки больших программ является их конструирование из маленьких фрагментов, или модулей. Модули в C++ называются функциями или классами.
Функция – это именованная часть программы, которая может вызываться из других частей программы, а также из себя самой (рекурсия), столько раз, сколько необходимо. Функция в C++ необязательно возвращает значение, в таком случае она соответствует процедурам в некоторых других языках программирования (например, Паскаль).
Функция в C++ может быть объявлена и должна быть определена. Не объявлять функцию можно только в том случае, если она определена до её первого вызова из других функций.
Пример объявления функции:
int sum (int a, int b);
или
int sum (int, int);
Пример определения функции:
int sum (int a, int b) {
return a+b:
}
Необходимо заметить, что формальные параметры могут не указываться при объявлении функции (можно указывать только их тип), но при определении функции они обязательно должны указываться.
Фактические параметры – это значения, которые присваиваются формальным параметрам во время вызова функции. Например, для приведенного выше примера,
c = sum (3, 5);
3 и 5 – фактические параметры.
Можно объявить указатель на функцию. Причем, передаваемые параметры и возвращаемое значение при объявлении указателя должны соответствовать передаваемым параметрам и возвращаемому значению той функции, на которую мы хотим определить указатель.
int (*p_to_sum) (int, int);
В тексте программы через указатель функцию можно вызвать так:
p_to_sum=∑
c = (*p_to_sum) (3, 5);
Можно также определить ссылку на функцию.
Для этого сначала создается новый тип ссылки с соответствующими функции параметрами и возвращаемым значением:
typedef int REF (int, int);
Затем в тексте программы функция через ссылку вызывается так:
REF& ref_to_sum = sum;
ref_to_sum (3, 5);
Функция также может быть частью класса, тогда она называется методом класса.
