Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 390

.pdf
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
1.12 Mб
Скачать

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

задание состояния клавиатуры;

показать/скрыть курсор;

реверсировать кнопки мыши;

ограничить перемещение курсора заданной областью;

задание положения курсора;

задание скорости перемещения курсора.

Пример гашения курсора

Если свойство Checked компоненты CheckBox1 равно true, то курсор гасится. Иначе - восстанавливается.

TCheckBox *CheckBox1; void main ()

{

if (CheckBox1->Checked) while (ShowCursor(false)>=0);//

гарантированное гашение курсора

else while (ShowCursor(true)<0);// гарантированное восстановление курсора

}

Реверсирование кнопок мыши

Если кнопки били реверсированы, то их назначение восстанавливается. Иначе - кнопки реверсируются.

void main (){SwapMouseButton(!GetSystemMetrics(SM_SWAPBUTTON));}

Ограничение перемещения курсора

Если свойство Checked компоненты CheckBox1 равно true, то область перемещения курсора мыши ограничена окном приложения. Иначе - перемещение курсора разрешено по всему экрану.

void main ()

{

41

RECT sqare;

if (CheckBox1->Checked)

{sqare.left=Left; sqare.top=Top; sqare.right=Left+Width; sqare.bottom=Top+Height;

ClipCursor(&sqare);} else

{sqare.left=0; sqare.top=0; sqare.right=GetSystemMetrics(SM_CXSCREEN); -

sqare.bottom=GetSystemMetrics(SM_CYSCREEN); ClipCursor(&sqare);}

}

Установка позиции курсора мыши

Значение новой позиции курсора берется из свойства Text

компонент Edit1 и Edit2.

void main (){SetCursorPos(atoi(Edit1->Text.c_str()),atoi(Edit2- >Text.c_str()));}

Задание скорости перемещения курсора

Шкала компоненты TrackBar1 устанавливает одно из семи значений скорости мыши.

TTrackBar *TrackBar1; void main ()

{

int mousePos[7][3]={{0,0,0},{10,0,1},{7,0,1},{4,0,1},{4,12,2},{4,9,2},{4,6, 2}};

int lpiMouse[3]; lpiMouse[0]=mousePos[TrackBar1->Position][0]; lpiMouse[1]=mousePos[TrackBar1->Position][1]; lpiMouse[2]=mousePos[TrackBar1->Position][2];

SystemParametersInfo(SPI_SETMOUSE,0,lpiMouse,SPIF_SENDWININ ICHANGE);

}

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

42

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

Управление вводом с клавиатуры получило новое направление развития вследствие необходимости распределения вводимой информации между различными потоками в многозадачных системах. Так как функции управления потоками ввода захватывают более широкую область, чем управление клавиатурой, они не будут здесь рассмотрены.

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

3.ВИДЕОСИСТЕМА

3.1.Основное функциональное назначение видеосистемы

Видеосистема обеспечивает обратную связь в интерфейсе пользователя. На дисплей выводится информация о работе программ. Вместе с устройствами ручного ввода видеосистема является неотъемлемой частью всех современных ПЭВМ. Для ПЭВМ в основном используются дисплеи на базе электронно-лучевых трубок.

Функции видеосистемы представляют собой весь набор действий, связанных с выводом графической информации, режимом отображения, цветовой палитрой системы и сервисом. Под выводом графической информации понимаются операции, касающиеся вывода цветных (для цветной системы) точек и фигур, закрашивание и копирование областей, вывод текста. Количество режимов отображения (видеорежимов) имеет конечное значение, которое определяется количеством возможных цветовых режимов (4- битный, 8-битный, 16-битный и 32-битный) и разрешений

(640х480, 800х600, 1024х768 и т.д.). Цветовая палитра операционной системы - это определенные цвета, которые окрашивают те или иные объекты стандартного интерфейса

43

пользователя. Такими элементами для Windows являются рабочий стол, шрифты, окна и их элементы. Сервисные функции видеосистемы заключаются в управлении хранителями экрана, отключении дисплея и т.п.

Несмотря на различные виды дисплеев и видеоадаптеров, доступ со стороны программ к видеосистеме достаточно унифицирован.

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

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

Информационные функции видеосистемы

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

GetSysColor;

SystemParametersInfo;

GetSystemMetrics;

GetDeviceCaps;

EnumDisplaySetting;

GetPixel.

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

Синтаксис: DWORD GetSysColor(nIndex) int nIndex; // индекс элемента

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

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

44

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 - задний план окна.

45

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 - количество цветовых плоскостей.

46

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 единиц. Эта физическая страница больше либо равна площади, на которой возможна печать.

47

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 - значение, показывающее растровую совместимость устройства, как показано ниже.

48

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

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 - устройство может рисовать широкие и стилизованные бордюры;

49

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 - устройство может рисовать широкие бордюры;

50