Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.217.65.190] |
|
Сообщ.
#1
,
|
|
|
Как добиться от монитора его характеристик: разрешения, тактовой частоты и пр.? А поменять? Легко!
Есть несколько WinAPI функций. Фактически, приведу только список функций, приводить подробности глупо – поскольку все они есть в MSDN. В том же MSDN в конце каждого описания функции есть ссылки на близкие по назначению функции. Как получить разрешение GetDeviceCaps int GetDeviceCaps( HDC hdc, // хэндл контекста устройства int nIndex // “индекс возможностей” – индекс запрашиваемой характеристики ); Вернёт для вашего HDC всё что попросите. Попросить можно nIndex. Полный список возможных вопросов Вы найдёте в MSDN. Если вам нужно разрешение монитора (в пикселях), то действовать можно вот так: HDC hdcScreen = GetWindowDC(GetDesktopWindow()); int nXRes = GetDeviceCaps(hdcScreen, HORZRES); //взять разрешение по горизонтали int nYRes = GetDeviceCaps(hdcScreen, VERTRES); //взять разрешение по вертикали Обращу внимание, что эта функция может применяться не только к монитору, но и ко всему, что может иметь HDC, например, к принтеру. Кстати, с помощью nIndex = TECHNOLOGY можно получить по контексту устройства информацию о том, с чем же вы на самом деле имеете дело. Тактовую частоту (в Гц) обновления можно получить с помощью VREFRESH (правда, работать это будет лишь в Windows NT/2000). Ещё одна интересная функция, в сторону которой стоит посмотреть: GetSystemMetrics Перед тем как поменять настройки монитора, необходимо заполнить структуру DEVMODE. Это можно сделать с помощью функции EnumDisplaySettings BOOL EnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, LPDEVMODE lpDevMode); Эта функция перечисляет все возможные характеристики дисплея. Первый параметр, lpszDeviceName, обозначает дисплей, для которого вы хотите перечислить характеристики. В общем то вы можете передать и NULL, но у MS есть проблемы при работе с много мониторными системами, особенно если у них отличающиеся характеристики. В этом случае вы должны передать "\\.\DisplayX", где Х может принять значение 1, 2, или 3. Каждый монитор имеет свою коллекцию настроек, которые может поддерживать (каждый, кто копался в настройках монитора, их видел). iModeNum показывает номер "настройки" (пресета) в коллекции, который Вы хотите получить (первый пресета имеет №0). Возвращаемые значения настроек вы найдёте в параметре DEVMODE. DEVMODE имеет множество членов, но только 5 из них относятся к дисплеям. Поменять разрешение монитора можно функцией ChangeDisplaySettings Вот её прототип: LONG ChangeDisplaySettings( LPDEVMODE lpDevMode, // графический режим DWORD dwflags // опция графического режима ); Если вам необходимо, что бы после завершения работы программы настройки монитора вернулись в исходное положение, ни в коем случае не устанавливайте флаг dwflags CDS_UPDATEREGISTRY, который разрешает прописывать обновлённые настройки монитора в реестр. Если Вам необходимо поменять характеристики иного (не дисплея) устройсва, то в руки вам попадает функция ChangeDisplaySettingsEx: LONG ChangeDisplaySettingsEx( LPCTSTR lpszDeviceName, // name of display device LPDEVMODE lpDevMode, // graphics mode HWND hwnd, // not used; must be NULL DWORD dwflags, // graphics mode options LPVOID lParam // video parameters (or NULL) ); Подробно описывать её не буду – если Вы добрались до программирования плоттеров и т.п. – то скорее всего Вы уже не читаете ФАК, а, возможно, пишете его. |
Сообщ.
#2
,
|
|
|
Ты только описал функции. Надо бы хоть по одному примеру их использования.
|