Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТРПС- читать.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
142.34 Кб
Скачать

4. Синхронные и асинхронные Windows сообщения. Сходства и отличия. Области применения. (трпс)

Асинхронными называются сообщения, помещаемые Windows в очередь сообщений приложения, которая просматривается в цикле обработки сообщений (PostMessage).

Синхронные сообщения передаются непосредственно окну, когда вызывается оконная процедура (SendMessage). Асинхронные сообщения могут помещаться в очередь в одно время а обрабатываться в другое. Синхронные – посылаются напрямую в функцию окна и тут же обрабатываются.

Асинхронные сообщения – результат пользовательского ввода, движения мыши или щелчков кнопок мыши; сообщения таймера или сообщение завершения цикла обработки сообщений WM_QUIT; сообщение результат вызова функции CreateWindowEx() WM_CREATE, сообщение результат вызова функции UpdateWindow() WM_PAINT.

Во время обработки оконной процедурой одного сообщения, приложение не может быть прервано другим сообщением. Только в единственном случае, если оконная процедура сама вызывает функцию, которая становится источником нового синхронного сообщения, то это сообщение начинается обрабатываться еще до того, как функция окна вернет управление Windows.

5. Классы и стили окон. Иерархия окон. (трпс)

Класс окна несет информацию о начальном внешнем виде окна, пиктограмме, курсоре и ресурсе меню, а также об адресе оконной функции.

Существует множество стандартных классов окна. Эти системные глобальные классы реализуют возможности элементов управления. Любое приложение может использовать эти классы в своих окнах, например, реализовать поле ввода, используя класс Edit.

Свои собственные классы окон определяются с помощью функции RegisterClass().

Window позволяет разбивать существующие окна на субклассы и суперклассы. Разбиение на субклассы замещает оконную процедуру для класса окна на другую процедуру. Операция создания суперкласса создает новый класс на основе существующего, сохраняя его оконную процедуру.

В Windows существует три основных стиля окон:

Главное окно (WS_OVERLAPPEDWIMDOW). Оно располагается на “DeskTop” и называется окнами верхнего уровня.

Временное окно (WS_POPUPWINDOW) Принадлежит главному окну приложения, и служат обычно для вывода какой-либо информации. Пример – диалоговое окно.

Дочернее окно (WS_CHILD) не может быть перемещено за границы родительского окна. Пример – элементы управления диалогов/

В Windows поддерживается строгая иерархия окон. Каждое окно должно иметь родительское окно. Единственное исключение “DeskTop”.

6. Особенности отрисовки для Windows приложения. Контекст устройства, недействительная область, обработка сообщений. (трпс)

В любой момент может потребоваться перерисовка любого окна, поэтому обработка сообщения WM_PAINT крайне важна. Это сообщение сигнализирует окну, что вся его рабочая область или некоторая ее часть становится недействительной, и ее следует перерисовать. Перерисовкой неклиентской области окна занимается Windows, перерисовка клиентской части – забота программиста.

Случаи, когда клиентская область становиться недействительной:

  • при создании окна (UpdateWindow() помещает сообщение WM_PAINT в очередь);

  • увеличение размеров окна;

  • минимизация окна программы, а затем его восстановление;

  • во время перемещения окон, при перекрывании части окна другими;

  • если при обработке любого сообщения требуется изменить содержимое окна при помощи функции IvalidateRect().

Сообщение WM_PAINT является низкоприритетным. Оно помещается в очередь тогда, когда там нет других необработанных сообщений. Если в окне объявлены несколько областей для перерисования, то приложение получает только одно сообщение WM_PAINT, в котором определена суммарная область, охватывающая все указанные части.

Обработка сообщения WM_PAINT всегда начинается с вызова функции BeginPaint(HWND hWnd,PAINTSTRUCT* lpPaint) и заканчивается – вызовом функции EndPaint(HWND hWnd,PAINTSTRUCT* lpPaint). Первый параметр BeginPaint - дескриптор окна, второй – указатель на структуру PAINTSTRUCT, поля которой содержат информацию, необходимую для отрисовки. Возвращаемым значением BeginPaint() является дискриптор контекста устройства. Этот дискриптор необходим для вывода в рабочую область текста и графики. Функция EndPaint() выполняет обязательное освобождение дискриптора контекста устройства. Если приложению требуется получить контекст устройства клиентской области окна вне WM_PAINT, то для этого необходимо воспользоваться другими функциями Win32 API.

Контекст устройства – это структура данных, связывающая приложение с драйвером устройства и полностью определяющая состояние драйвера и способ вывода информации. Перед тем как приложение начнёт вывод информации в окно, оно должно получить контекст устройства. До этого связи между программой и окном не существует. Таким образом, перед началом любого процесса вывода необходимо получить контекст устройства. Контекст устройства представляет собой путь вывода данных из приложения в рабочую область окна с использованием подходящего драйвера устройства Графический вывод осуществляется через контекст устройства, путем передачи его дескриптора в соответствующую GDI функцию. Через контекст устройства общие, независимые от устройства графические вызовы транслируются в инструкции, представляющие вывод на конкретное устройство. Когда приложение вызывает функцию отрисовки GDI, контекст устройства определяет, какой драйвер устройства выполнит этот вызов. Бывают контексты устройств отображения, контекст памяти, контекст принтера и контекст метафайла.