- •Фгбоу впо «Воронежский государственный технический университет»
- •Программная реализация функций управления видеосистемой эвм
- •Программная реализация функций управления видеосистемой эвм
- •1.2. Содержание работы
- •1.3. Используемое оборудование и программные средства
- •2.1. Краткие теоретические сведения
- •Функции Win32 api для видеосистемы
- •Получение цвета точки с заданными координатами
- •Управляющие функции видеосистемы
- •Установка режимов копирования изображения
- •3.1. Порядок выполнения лабораторной работы
- •3.2. Указания по оформлению отчета
- •Программная реализация функций управления видеосистемой эвм
Получение цвета точки с заданными координатами
Компонента Panel1 меняет свой цвет в зависимости от положения курсора.
TPanel *Panel1;
void main()
{ POINT mouse_pos;
hDeskTop=GetDesktopWindow(); dcDeskTop=GetWindowDC(hDeskTop); if (GetCursorPos(&mouse_pos)) Panel1->Color=GetPixel(dcDeskTop,mouse_pos.x,mouse_pos.y); ReleaseDC(hDeskTop,dcDeskTop); }
Управляющие функции видеосистемы
Для изменения параметров видеосистемы и для вывода на дисплей графических изображений, используются управляющие функции Win32 видеосистемы. В рассматриваемом наборе не будут отражены все функции рисования геометрических фигур и точек, а также функции заливки вследствие простоты их использования. Достаточно будет привести только BitBlt, показывающую принцип обращения с рисовательными функциями. При необходимости следует использовать данные функции по аналогии.
Управляющими функциями видеосистемы являются:
SetSysColors;
SystemParametersInfo;
ChangeDisplaySetting;
BitBlt и т.п.
SetSysColors устанавливает цвета интерфейса системы.
Синтаксис: BOOL SetSysColors(cElements,lpaElements,lpaRgbValues)
int cElements; // количество изменяемых элементов
CONST INT *lpaElements; // указатель на массив элементов, список которых идентичен GetSysColor
CONST COLORREF *lpaRgbValues; // указатель на массив цветов
ChangeDisplaySettings меняет текущий графический режим.
Синтаксис: LONG ChangeDisplaySettings(lpDevMode,dwflags)
LPDEVMODE lpDevMode;// указатель на структуру DEVMODE, устанавливающую данные
DWORD dwflags;// флаг показывает, как графический режим должен быть изменен
BitBlt копирует прямоугольную битовую поверхность из контекста устройства источника в контекст устройства приемника. Контекст устройства получают функциями GetDC или GetWindowDC. Функция возвращает true при корректном ее завершении. Если происходит копирование между разными устройствами (дисплей-принтер), то функция всегда возвращает false.
Синтаксис: BOOL BitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop)
HDC hdcDest;// идентификатор контекста устройства-источника (device context)
int nXDest;// координата x левого верхнего угла копируемой поверхности в приемнике
int nYDest;// координата y левого верхнего угла копируемой поверхности в приемнике
int nWidth;// ширина копируемой поверхности int nHeight;// высота копируемой поверхности HDC hdcSrc;// идентификатор контекста устройства-приемника (device context)
int nXSrc;// координата x левого верхнего угла копируемой поверхности в источнике
int nYSrc;// координата y левого верхнего угла копируемой поверхности в источнике
DWORD dwRop;// код операции копирования
Код операции может принимать следующие значения:
BLACKNESS - заполнение принимающего прямоугольника, используя цвет, ассоциирующийся с кодом 0 (обычно черный цвет для физической палитры).
DSTINVERT - инвертировать принимающий прямоугольник.
MERGECOPY - осуществлять копирование по логическому "И" цветов источника и образца.
MERGEPAINT - осуществлять копирование по логическому "ИЛИ" инвертированных источника и неинвертированных цветов приемника.
NOTSRCCOPY - осуществлять копирование с инвертированием битов источника.
NOTSRCERASE - осуществлять копирование по логическому "ИЛИ НЕ" битов источника и приемника.
PATCOPY - копирование образца на источник.
PATINVERT - совмещение цветов образца и цветов приемника по модулю два.
PATPAINT - совмещение цветов образца и инвертированных цветов источника по логическому "ИЛИ", а результат по логическому "ИЛИ" с цветами приемника.
SRCAND - совмещение цветов источника и приемника по логическому "И".
SRCCOPY - простое копирование.
SRCERASE - совмещение цветов источника и инвертированных цветов приемника по логическому "И".
SRCINVERT - совмещение цветов источника и цветов приемника по модулю два.
SRCPAINT - совмещение цветов источника и цветов приемника по логическому "ИЛИ".
WHITENESS - заполнение принимающего прямоугольника, используя цвет, ассоциирующийся с кодом 1 (обычно белый цвет для физической палитры).
Как видно, некоторые функции являются и управляющими и информационными. Характерно и то, что набор функций меньше, чем набор выполняемых действий, то есть одна функция выполняет множество действий. Этот факт объясняется тем, что, во-первых, довольно часто входной информацией для выполнения действия является один бит, и в таком случае нерационально использование целого байта или слова. Во-вторых, чтобы не расширять и без того большие списки имен функций, можно объединить операции, сходные по назначению или по какому-нибудь признаку в одной функции.
Приведенный выше набор функций позволяет выполнить следующие действия над видеосистемой:
установить цвета элементов интерфейса системы;
установить обои рабочего стола;
установить время включения хранителя экрана;
изменить видеорежим системы;
копировать изображение.
Установка цветов системной палитры
Устанавливает рабочий стол в белый цвет.
void main () { int cDspElements; int lpnDspElements[]={COLOR_BACKGROUND}; COLORREF lpdwRgbValues[]={0xFFFFFF};// код белого цвета SetSysColors(1,lpnDspElements,lpdwRgbValues); }
Установка обоев рабочего стола
TOpenDialog *OpenDialog1; void main() { if (OpenDialog1->Execute()) SystemParametersInfo(SPI_SETDESKWALLPAPER,0,OpenDialog1->FileName.c_str(),SPIF_UPDATEINIFILE); }
Установка времени включения хранителя экрана
Новое время запуска хранителя экрана берется из свойства Text компоненты Edit1.
TEdit *Edit1; void main() { SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,atoi(Edit1->Text.c_str()),NULL, SPIF_SENDCHANGE); }
Изменение разрешения системы
Устанавливается разрешение системы 640 на 480 и 256-и цветная палитра. Если необходимо перегрузить систему или не удалось изменить настройки, то выводится соответствующее сообщение.
void main() { DEVMODE pDevMode; LONG result; pDevMode.dmBitsPerPel=8; pDevMode.dmPelsWidth=640; pDevMode.dmPelsHeight=480; pDevMode.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; pDevMode.dmSize=sizeof(pDevMode); result=ChangeDisplaySettings(&pDevMode,CDS_UPDATEREGISTRY); if (result==DISP_CHANGE_RESTART) MessageBox(NULL,"Новые параметры вступят в силу при перезагрузке компьютера !!!", "Сообщение",MB_OK); else if (result!=DISP_CHANGE_SUCCESSFUL) MessageBox(NULL,"Не удалось изменить разрешение системы !!!","Сообщение",MB_OK); }