Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_elektronnykh_ustroystv.doc
Скачиваний:
60
Добавлен:
28.05.2015
Размер:
1.44 Mб
Скачать

Контрольные вопросы

  1. Чем отличается последовательность выполнения команд традиционной DOS– программы и современногоWindows– приложения?

  2. Что такое событие и сообщение в рамках программирования в ОС Windows? Какие бывают сообщения?

  3. Какая простейшая структура событийно-управляемой программы на Си?

  4. Что такое оконная процедура, какое ее назначение?

  5. Почему такие параметры как адрес оконной процедуры или иконка курсора задаются при регистрации класса окна, а название окна в аргументах функции для его создания?

  6. Что такое цикл сообщений?

  7. Требуется ли приложению обрабатывать все возможные виды сообщений, существующих в ОС?

  8. Можно ли просто вывести что-то на экран в произвольном месте кода программы? Почему?

  9. Как происходит завершение программы? Какое назначение функции PostQuitMessage()?

  10. Оконная процедура нигде не вызывается явно из главной функции программы, хотя все основные команды сосредоточены именно в ней? Когда и чем она вызывается?

2.2 Визуализация цифровых данных

2.2.1 Вывод графической информации на дисплей

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

Для предоставления приложениям графических функциональных возможностей Windows имеет стандартный набор функций, называемый интерфейсом графических устройств – GDI. Функции GDI предоставляют возможности рисования, которые не зависят от используемого устройства вывода. Например, одни и те же функции можно использовать для организации вывода на дисплей или принтер. Аппаратная независимость реализуется через использование драйверов устройств, которые переводят функции GDI в команды, воспринимаемые используемым устройством вывода. Это означает, что не нужно беспокоиться о том, как конкретное устройство (например, определенная марка принтеров) работает с графическим образом. Подобная абстракция аппаратной части является очень распространенной. Ценой универсальности являются достаточно ограниченные возможности по работе с графикой и невысокое быстродействие графических команд. Насыщенные визуальными данными программы следует разрабатывать с использованием специализированных программных средств: OpenGL,GLES,Direct3Dи т.п.

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

Как правило, приложения выполняют свою работу по рисованию содержимого окна во время обработки сообщения Windows WM_PAINT, хотя часто требуется рисовать и во время обработки других сообщений. В любом случае приложению нужно придерживаться следующей последовательности действий:

  1. получение или создание контекста отображения;

  2. установка необходимых атрибутов в контексте отображения;

  3. выполнение операций рисования;

  4. освобождение либо удаление контекста отображения.

Последнее действие (освобождение либо удаление контекста отображения) должно быть обязательно выполнено, так как контекст – очень ресурсоёмкая структура данных. Если создать множество контекстов, а затем не удалить (или не освободить) эти контексты, система станет работать нестабильно из-за нехватки ресурсов, единственным выходом станет ее перезагрузка.

Рассмотрим особенности работы устройств вывода информации на примере программы построения круговой диаграммы, окно которой показано на рисунке 2.2.1.

Рисунок 2.2.1 – Тестовая программа, выполняющая визуализацию данных

Программа основана на примере простейшей программы Windows, рассмотренной ранее. Текст на языкеC++ рабочей программы выглядит следующим образом (для удобства новый код выделен жирным шрифтом):

#define _USE_MATH_DEFINES

#include <math.h>

#include <stdio.h>

#include <time.h>

// Стандартный включаемый файл Windows

#include <windows.h>

const float g_data[] = { 10.0f, 4.0f, 30.0f, 12.0f, 26.0f, 5.0f, 18.0f };

struct Brush

{

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]