русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Получение индекса контекста устройства

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

Первый метод используется при обработке сообщения WM_PAINT. При этом для получения контекста устройства вызывают функцию BeginPaint, а для его освобождения – функцию EndPaint. Обработчик данного сообщения в общем случае будет иметь следующий вид:

case WM_PAINT:

hDC= BeginPaint (hWnd, &ps);

...

EndPaint (hWnd, &ps);

break;

Первый параметр функции BeginPaint и EndPaint содержит дескриптор окна, контекст устройства которого вы желаете получить. Второй параметр содержит адрес переменной типа PAINTSTRUCT.

Структура PAINTSTRUCT содержит информацию, которую приложение может использовать по своему усмотрению. Данная структура содержит следующие поля:

typedef struct tagPAINTSTRUCT {

HDC hDC; // Дескриптор контекста отображения

BOOL fErase; // Флаг необходимого обновления фона окна

RECT rcPaint; // Прямоугольник обновления

BOOL fRestore; // Резервное поле

BOOL flncUpdate; // Резервное поле

BYTE rgbReserved[16]; // Резервное поле

} PAINTSTRUCT;

Наибольший интерес представляют поля hDC и rcPaint.

Поле hDC содержит индекс контекст устройства, который возвращает функция BeginPaint.

Поле rcPaint является указателем на структуру типа RECT, которая определяет прямоугольник внутри рабочей области экрана, содержимое которого надо обновить. Данное поле может заполняться при вызове функции InvalidateRect. При обработке сообщения WM_PAINT можно, используя содержимое данного поля структуры PAINTSTRUCT, обновлять не все окно, а только ту его область, которая нуждается в обновлении.

Второй метод получения контекста устройства используется при обработке всех других сообщений.

case WM_*** : // He WM_PAINT!!!

hDC=GetDC (hWnd); // Получаем контекст устройства

... // Использование функций GDI

ReleaseDC (hWnd, hDC); // Освобождаем контекст устройства

break;

Данный метод, также как и предыдущий, позволяет получить индекс контекста устройства (hDC) рабочей области окна, определяемого дескриптором окна (hWnd).

Следующий метод позволяет получить индекс контекста устройства для всего окна, а не только его рабочей области:

case WM_*** : // He WM_PAINT!!!

hDC=GetWindowDC (hWnd); // Получаем контекст устройства

... // Использование функций GDI

ReleaseDC (hWnd, hDC); // Освобождаем контекст устройства

break;

При использовании данного метода, кроме рабочей области окна, мы также получаем доступ к меню, полюсам просмотра и заголовка окна.

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

case WM_*** : // He WM_PAINT!!!

// Получаем контекст устройства

hDC=CreatetDC («DISPLAY», NULL, NULL, NULL);

... // Использование функций GDI

DeleteDC (hWnd, hDC); // Освобождаем контекст устройства

break;

В некоторых случаях необходимо получить только некоторую информацию о контексте устройства. В этом случае вы можете получить индекс информационного контекста при помощи функции CreatetIC. Параметры данной функции соответствуют параметрам функции CreatetDC:

case WM_*** : // He WM_PAINT!!!

// Получаем контекст устройства

hDC=CreatetIC («DISPLAY», NULL, NULL, NULL);

... // Использование функций GDI

DeleteDC (hWnd, hDC); // Освобождаем контекст устройства

break;

Заметим, что информационный контекст, полученный при помощи функции CreatetIC, не может быть использован функциями GDI для отображения какой-либо информации на устройстве отображения.

Просмотров: 451


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.