Частота обновления экрана

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Частота обновления экрана

Сообщение Tarik » 08.04.2003 (Вт) 16:26

Для изменения разрешения в своей проге я использую слудующий код:

Код: Выделить всё

Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Const CCDEVICENAME = 32
Const CCFORMNAME = 32
Const DM_PELSWIDTH = &H80000
Const DM_PELSHEIGHT = &H100000

Public OldScreenWidth As Long, OldScreenHeight As Long

Private Type DEVMODE
dmDeviceName As String * CCDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Public Sub GetVideoMode(ByRef Width As Long, ByRef Height As Long, ByRef Depth As Long)

Dim hDC As Long

hDC = GetDC(GetDesktopWindow())
Width = GetDeviceCaps(hDC, HORZRES)
Height = GetDeviceCaps(hDC, VERTRES)
Depth = GetDeviceCaps(hDC, BITSPIXEL)
ReleaseDC GetDesktopWindow(), hDC

End Sub


Sub ChangeRes(iWidth As Long, iHeight As Long)

Dim a As Boolean
Dim i&
i = 0

Do
a = EnumDisplaySettings(0&, i&, DevM)
i = i + 1
Loop Until (a = False)

Dim b&
DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
DevM.dmPelsWidth = iWidth
DevM.dmPelsHeight = iHeight
b = ChangeDisplaySettings(DevM, 0)
End Sub


Sub DetectResolution(NeedWidth As Long, NeedHeight As Long)


Dim Height As Long, Width As Long, Depth As Long, NewDepth As String
GetVideoMode Width, Height, Depth

OldScreenWidth = Width
OldScreenHeight = Height

If Width <> NeedWidth And Height <> NeedHeight Then
ChangeRes NeedWidth, NeedHeight
End If
End Sub


Так вот. В начале проги я поставил "ChangeRes 800,600", а в конце
"ChangeRes OldScreenWidth, OldScreenHeight". И почему-то при выходе и проги частота обновления экрана устанавливается на 60 Гц :evil: . С чего бы это? Может из-за XP-шки? :roll:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 08.04.2003 (Вт) 16:33

видимо при переходе на 800*600 драйвер видюхи ставит дефолтную частоту рефреша (60Гц). а при возвращении прежнего разрешения эта частота не восстанавливается. дело тут вовсе не в XP, оно везде так происходит. и ничего с этим не поделаешь... разве что как-то программно частоты поменять, но как?... :?
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 44

    TopList