Из-за того, что видеооборудование бывает разное, не все устройства поддерживают все видеорежимы. Для определения доступных режимов на конкретно взятой машине, вызовите метод DirectDraw7.GetDisplayModesEnum Он возвращает объект DirectDrawEnumModes, который может потом использоваться для получения описания поддерживаемых режимов. Вы можете получить описание всех поддерживаемых режимов или получить подтверждение или опровержение о работе одного, указанного вами режима, путем установки соответствующих флагов при вызове GetDisplayModesEnum. Первый параметр метода - флаги,- контролируют дополнительный опции для метода. В большинстве случаев их игнорируют, указывая флаг DDEDM_DEFAULT. Второй параметр - ddsd. В нем передается структура DDSURFACEDESC2, которая описывает некий режим для подтверждения его работы. Если параметр установить в Nothing, будут перечислены все режимы. После того, как вы получили объект DirectDrawEnumModes, вы можете извлекать из него полезную информацию. Методом DirectDrawEnumModes.GetCount можно получить количество поддерживаемых режимов. Затем вы можете вызывать метод DirectDrawEnumModes.GetItem для получения описания одного режима дисплея из набора, который хранится в DirectDrawEnumModes. После вызова GetCount, информация о режиме находится в структуре DDSURFACEDESC2. Легко получить информацию о размерах экрана из членов этого типа lWidth и lHeight, а также о глубине цвета из ddpfPixelFormat. ddpfPixelFormat - это тоже тип - DDPIXELFORMAT, в нем содержится информация о глубине цвета режима. Этот тип несет в себе информацию о количестве битов на пиксел и говорит, использует или нет режим палитру. Если член lFlags содержит флаг DDPF_PALETTEINDEXED1, DDPF_PALETTEINDEXED2, DDPF_PALETTEINDEXED4, или DDPF_PALETTEINDEXED8, тогда глубина цвета режима 1, 2, 4 или 8 битов, и каждый пиксел - это индекс в установленной палитре. Если lFlags содержит DDPF_RGB, тогда режим дисплея не палетизированный и глубина цвета описана в члене lRGBBitCount типа DDPIXELFORMAT.
|