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

Функции Win32 api для видеосистемы

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

К основным информационным функциям относятся:

  • GetSysColor;

  • SystemParametersInfo;

  • GetSystemMetrics;

  • GetDeviceCaps;

  • EnumDisplaySetting;

  • GetPixel.

GetSysColor позволяет получить информацию о цветовой палитре системного интерфейса. Функция возвращает цвет заданного элемента интерфейса системы.

Синтаксис: DWORD GetSysColor(nIndex)

int nIndex; // индекс элемента

Индекс элемента может принимать следующие значения:

COLOR_3DDKSHADOW  - темная тень 3D- объектов.

COLOR_3DFACE, COLOR_BTNFACE  - лицевая сторона 3D- объекта. 

COLOR_3DHILIGHT, COLOR_3DHIGHLIGHT, COLOR_BTNHILIGHT, COLOR_BTNHIGHLIGHT - ярко освещенная сторона 3D- объектов.

COLOR_3DLIGHT - освещенная сторона 3D- объектов.

COLOR_3DSHADOW, COLOR_BTNSHADOW - светлая тень 3D- объектов.

COLOR_ACTIVEBORDER  - бордюр активного окна.

COLOR_ACTIVECAPTION - заголовок активного окна.

COLOR_APPWORKSPACE  - задний план в приложениях MDI. (multiple document interface)

COLOR_BACKGROUND, COLOR_DESKTOP - рабочий стол.

COLOR_BTNTEXT - текст на кнопке.

COLOR_CAPTIONTEXT - текст в заголовке, в области переменного размера и в области с линейками прокрутки.

COLOR_GRAYTEXT  - неактивный текст.

COLOR_HIGHLIGHT  - объект, выбранный для контроля.

COLOR_HIGHLIGHTTEXT - текст объекта, выбранного для контроля.

COLOR_INACTIVEBORDER - бордюр неактивного окна.

COLOR_INACTIVECAPTION - заголовок неактивного окна.

COLOR_INACTIVECAPTIONTEXT - текст в заголовке неактивного окна.

COLOR_INFOBK - задний план инструментов управления.

COLOR_INFOTEXT - текст инструментов управления.

COLOR_MENU - задний план меню.

COLOR_MENUTEXT - текст в меню.

COLOR_SCROLLBAR - свободное пространство на линейке прокрутки.

COLOR_WINDOW - задний план окна.

COLOR_WINDOWFRAME - оконное обрамление.

COLOR_WINDOWTEXT - текст окна.

GetDeviceCaps позволяет получить специфическую информацию о заданном устройстве. Контекст устройства получают функциями GetDC или GetWindowDC.

Синтаксис: int GetDeviceCaps(hdc, nIndex)

HDC hdc; // идентификатор контекста устройства  (device context)

int nIndex; // индекс запроса

Индекс может принимать следующие значения:

DRIVERVERSION - версия драйвера устройства.

TECHNOLOGY - вид устройства .

Возвращаемые значения: 

DT_PLOTTER  - векторный плоттер;

DT_RASDISPLAY - растровый дисплей;

DT_RASPRINTER - растровый принтер;

DT_RASCAMERA - растровая камера;

DT_CHARSTREAM - символьный поток;

DT_METAFILE - метафайл;

DT_DISPFILE - дисплейный файл.

HORZSIZE - ширина физического экрана в миллиметрах.

VERTSIZE - высота физического экрана в миллиметрах.

HORZRES - ширина экрана в пикселях.

VERTRES - высота экрана в растровых линиях.

LOGPIXELSX - количество пикселей в логическом дюйме вдоль ширины экрана.

LOGPIXELSY - количество пикселей в логическом дюйме вдоль высоты экрана.

BITSPIXEL - количество битов для отображения цвета каждой точки.

PLANES - количество цветовых плоскостей.

NUMBRUSHES - количество специальных кистей устройства.

NUMPENS - количество специальных перьев (карандашей) устройства.

NUMFONTS - количество специальных шрифтов устройства.

NUMCOLORS - количество цветов, входящих в цветовую таблицу устройства, если устройство имеет глубину цвета не более 8 битов на пиксель, иначе возвращается -1.

ASPECTX - ширина пикселя устройства, использующаяся для рисования линии.

ASPECTY - высота пикселя устройства, использующаяся для рисования линии.

ASPECTXY - диагональная ширина пикселя, использующаяся для рисования линии.

PDEVICESIZE - зарезервировано.

CLIPCAPS - если устройство можно отобразить в виде прямоугольника (например, битовая поверхность) возвращается 1, иначе 0.

SIZEPALETTE - количество цветов, входящих в системную палитру, этот индекс является значимым, если драйвер устройства устанавливает бит RC_PALETTE при индексе RASTERCAPS.

NUMRESERVED - количество зарезервированных цветов в системной палитре, этот индекс является значимым, если драйвер устройства устанавливает бит RC_PALETTE при индексе RASTERCAPS.

COLORRES - актуальное цветовое разрешение устройства в битах на пиксель, этот индекс является значимым, если драйвер устройства устанавливает бит RC_PALETTE при индексе RASTERCAPS.

PHYSICALWIDTH - для печатающих устройств: ширина физической страницы, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", имеет физическую ширину 5100 единиц. Эта физическая страница больше либо равна площади, на которой возможна печать.

PHYSICALHEIGHT - для печатающих устройств: высота физической страницы, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", имеет физическую высоту 6600 единиц. Эта физическая страница больше либо равна площади, на которой возможна печать.

PHYSICALOFFSETX - для печатающих устройств: дистанция от левого края физической страницы до левого края площади, на которой возможна печать, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", который не может вести печать левее, чем 0.25" от края бумаги, имеет значение дистанции 150 единиц.

PHYSICALOFFSETY - для печатающих устройств: дистанция от верхнего края физической страницы до верхнего края площади, на которой возможна печать, в единицах устройства. Например, принтер, установленный на 600 dpi на бумаге 8.5"x11", который не может вести печать выше, чем 0.5" от края бумаги, имеет значение дистанции 300 единиц.

VREFRESH - только для Windows NT: для дисплея текущее вертикальное обновление устройства в циклах за секунду (Гц). Значение вертикального обновления, равное 0 или 1, представляет аппаратное значение, принятое по умолчанию. Эта величина обычно устанавливается переключателями на видеокарте, материнской плате или программно,  не используя функции Win32.

DESKTOPHORZRES  - только для Windows NT: Ширина виртуального рабочего стола в пикселях. Это значение может быть больше значения HORZRES для многодисплейного режима.

DESKTOPVERTRES - только для Windows NT: Высота виртуального рабочего стола в пикселях. Это значение может быть больше значения HORZRES для многодисплейного режима.

RASTERCAPS - значение, показывающее растровую совместимость устройства, как показано ниже.

Возвращаемые значения: 

RC_BANDING - требует расширенную поддержку;

RC_BITBLT - возможность переносить битовые поверхности;

RC_BITMAP64 - возможность поддержки битовых поверхностей более, чем 64K;

RC_DI_BITMAP - возможность поддержки функций SetDIBits и GetDIBits;

RC_DIBTODEV - возможность поддержки функции SetDIBitsToDevice;

RC_FLOODFILL - возможность поддержки сплошной заливки;

RC_GDI20_OUTPUT - возможность поддержки свойств Windows 2.0;

RC_PALETTE - специфицирует основную палитру устройства;

RC_SCALING - возможность масштабирования;

RC_STRETCHBLT - возможность выполнения функции StretchBlt;

RC_STRETCHDIB - возможность выполнения функции StretchDIBits.

CURVECAPS - значение, показывающее совместимость устройства с кривыми линиями.

Возвращаемые значения: 

CC_NONE - устройство не поддерживает кривые;

CC_CIRCLES - устройство может рисовать окружности;

CC_PIE - устройство может рисовать углы;

CC_CHORD - устройство может рисовать дуги;

CC_ELLIPSES - устройство может рисовать эллипсы;

CC_WIDE - устройство может рисовать широкие бордюры;

CC_STYLED - устройство может рисовать стилизованные бордюры;

CC_WIDESTYLED - устройство может рисовать широкие и стилизованные бордюры;

CC_INTERIORS - устройство может рисовать внутренности;

CC_ROUNDRECT - устройство может рисовать прямоугольники с закругленными краями.

LINECAPS - значение, показывающее совместимость устройства с прямыми линиями.

Возвращаемые значения: 

LC_NONE - устройство не поддерживает прямые;

LC_POLYLINE - устройство может рисовать полилинии;

LC_MARKER - устройство может рисовать маркер;

LC_POLYMARKER - устройство может рисовать множественный маркер;

LC_WIDE - устройство может рисовать широкие линии;

LC_STYLED - устройство может рисовать стилизованные линии;

LC_WIDESTYLED - устройство может рисовать широкие и стилизованные линии;

LC_INTERIORS - устройство может рисовать внутренности.

POLYGONALCAPS - значение, показывающее совместимость устройства с многоугольниками.

Возвращаемые значения: 

PC_NONE - устройство не поддерживает многоугольники;

PC_POLYGON - устройство может рисовать многоугольники со смешанной заливкой;

PC_RECTANGLE - устройство может рисовать прямоугольники;

PC_WINDPOLYGON - устройство может рисовать многоугольники с извивающейся заливкой;

PC_SCANLINE - устройство может рисовать одиночную масштабируемую линию;

PC_WIDE - устройство может рисовать широкие бордюры;

PC_STYLED - устройство может рисовать стилизованные бордюры;

PC_WIDESTYLED - устройство может рисовать широкие и стилизованные бордюры;

PC_INTERIORS - устройство может рисовать внутренности.

TEXTCAPS - значение, показывающее совместимость устройства с текстом.

Возвращаемые значения: 

TC_OP_CHARACTER - устройство поддерживает посимвольный вывод;

TC_OP_STROKE - устройство поддерживает строковый вывод;

TC_CP_STROKE - устройство поддерживает объединение строк;

TC_CR_90 - устройство поддерживает поворот символов на 90 градусов;

TC_CR_ANY - устройство поддерживает любые повороты символов;

TC_SF_X_YINDEP - устройство поддерживает независимое масштабирование по осям x и y;

TC_SA_DOUBLE - устройство поддерживает двойное увеличение символов;

TC_SA_INTEGER - устройство поддерживает целочисленное масштабирование символов;

TC_SA_CONTIN - устройство поддерживает любое масштабирование символов;

TC_EA_DOUBLE - устройство может отображать символы двойной ширины;

TC_IA_ABLE - устройство поддерживает стиль italic; 

TC_UA_ABLE - устройство поддерживает подчеркивание;

TC_SO_ABLE - устройство поддерживает зачеркивание;

TC_RA_ABLE - устройство может отображать растровый шрифт;

TC_VA_ABLE - устройство может отображать векторный шрифт;

TC_RESERVED - зарезервировано;

TC_SCROLLBLT - устройство не может использовать перемещение битовых блоков.

Функции GetDC и GetDesktopWindow имеют следующие значения:

GetDC возвращает идентификатор контекста рабочей области заданного окна. Оконный  идентификатор получен функциями GetActiveWindow или GetDesktopWindow. После использования контекста необходимо его закрыть функцией ReleaseDC.

Синтаксис: HDC GetDC(hWnd)

HWND hWnd;  // идентификатор окна

GetActiveWindow возвращает идентификатор активного окна. Как правило, это окно приложения, вызывающего функцию.

Синтаксис: HWND GetActiveWindow(VOID)

GetDesktopWindow возвращает идентификатор рабочего стола Windows.

Синтаксис: HWND GetDesktopWindow(VOID)

ReleaseDC закрывает контекст заданного окна.

Синтаксис: int ReleaseDC(hWnd,hDC)

HWND hWnd; // идентификатор окна

HDC hDC;  // идентификатор контекста

GetWindowDC возвращает идентификатор контекста заданного окна. Оконный идентификатор получен функциями GetActiveWindow или GetDesktopWindow. После использования контекста необходимо его закрыть функцией ReleaseDC.

Синтаксис: HDC GetWindowDC(hWnd)

HWND   // идентификатор окна

EnumDisplaySettings позволяет получить информацию об одном из возможных  графических режимов, номер которого задан. Функция возвращает true при корректном ее завершении. Для получения всех возможных графических режимов разрешений необходимо несколько раз вызвать данную функцию, увеличивая номер запрашиваемого режима до тех пор, пока функция не вернет false.

Синтаксис: BOOL

EnumDisplaySettings(lpszDeviceName,iModeNum,lpDevMode)

LPCTSTR lpszDeviceName; // указатель на строку-спецификатор устройства

DWORD iModeNum; // номер графического режима доступного в системе

LPDEVMODE lpDevMode; // указатель на структуру DEVMODE, принимающую данные

lpszDeviceName может принимать значения \\.\DisplayX, где X может иметь значения 1, 2, or 3.  Если lpszDeviceName установлен в NULL, возвращаются установки текущего дисплея (для Windows'95 всегда должен быть NULL).

GetPixel возвращает цвет точки с заданными координатами в указанном контексте устройства. Контекст устройства получают функциями GetDC или GetWindowDC, описанными ранее.

Синтаксис: COLORREF GetPixel(hdc,nXPos,nYPos)

HDC hdc; // идентификатор контекста устройства

int nXPos; // горизонтальная координата точки

int nYPos;  // вертикальная координата точки

Следует обратить внимание, что функция SystemParametersInfo встречается также среди функций устройств ручного ввода, таким образом, являясь многоцелевой. Эта особенность многих функций Win32 API, возможные причины которой будут рассмотрены ниже. С помощью приведенных функций можно получить следующую информацию:

  • цветовая палитра интерфейса системы;

  • время запуска хранителя экрана;

  • разрешение системы;

  • количество цветов системы;

  • доступные варианты разрешений и цветов системы;

  • цвет заданной точки устройства.

Получение цвета элемента системы

Компонента Edit1 выводит код цвета рабочего стола в виде 32-битного знакового числа. 

TEdit *Edit1; 

void main() 

{Edit1-

Text=(int)GetSysColor(COLOR_BACKGROUND);} 

Получение времени запуска хранителя экрана

Компонента Edit1 выводит время в секундах(+5 секунд), отсчитываемое от последнего нажатия клавиши или перемещения мыши до запуска хранителя экрана. 

TEdit *Edit1; 

void main() 

{   int pvParam; 

 SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT,0,&pvParam,SPIF_SENDCHANGE);   Edit1->Text=pvParam;  } 

Получение текущего разрешения системы

Компонента Edit1 выводит разрешение системы по оси х, Edit2 - по оси y. 

TEdit *Edit1;

TEdit *Edit2; 

void main () 

{   Еdit1->Text=GetSystemMetrics(SM_CXSCREEN);   Еdit2->Text=GetSystemMetrics(SM_CYSCREEN);  } 

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

TEdit *Edit1; void main ()

{

 hDeskTop=GetDesktopWindow();  dcDeskTop=GetWindowDC(hDeskTop);  Edit3->Text=GetDeviceCaps(dcDeskTop,BITSPIXEL);  ReleaseDC(hDeskTop,dcDeskTop); }

Получение разрешений системы

Получение количества вариантов разрешения экрана, выделение памяти для хранения всех вариантов и занесение их в массив для дальнейшего использования.

typedef struct _DISPRes

 {   DWORD  dmBitsPerPel;

  DWORD  dmPelsWidth;

  DWORD  dmPelsHeight;

 } DISPRes;

DISPRes *lpDevMode;

void main()

{  int i;

 DEVMODE pDevMode;

 for (i=0;EnumDisplaySettings(NULL,i,&pDevMode);++i);

 lpDevMode=(DISPRes*)malloc(i*sizeof(DISPRes));

 for (i=0;EnumDisplaySettings(NULL,i,&pDevMode);++i)

   {

    lpDevMode[i].dmBitsPerPel=pDevMode.dmBitsPerPel;

    lpDevMode[i].dmPelsWidth=pDevMode.dmPelsWidth;

    lpDevMode[i].dmPelsHeight=pDevMode.dmPelsHeight;

   } /// ... free(lpDevMode); }

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