Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40031.doc
Скачиваний:
2
Добавлен:
30.04.2022
Размер:
181.76 Кб
Скачать

Получение цвета точки с заданными координатами

Компонента 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); }

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