Visual Basic - мастерская разработчика
Библиотеки

DirectX

Обзоры
DirectDraw
Direct3D
DirectX Audio
DirectPlay
DirectInput
Fido Topics
SourceCode
Tools&Libs

OpenGL

Статьи и учебники
Fido Topics
SourceCode
Tools&Libs

Архив по Glide

Движки

Обзоры
Учебники
SourceCode
Downloads

Создание игр

Ваши игры

Обзорные статьи
Учебники
Fido Topics
SourceCode
Download

Stuff

Программер-Чат

Псевдо-FTP
Disclaimer
Оффтопик

 

Глюки в DirectX7

(или наблюдения, которые спасут вам много нервов)

1.)

Бывает такое вы запускаете свой проект под DX7 в режиме

Call dd.SetCooperativeLevel(Form1.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN Or _
DDSCL_ALLOWREBOOT)

Call dd.SetDisplayMode(Screen.Width, _
Screen.Height, _
Screen.Depth, _
0, _
DDSDM_DEFAULT)

Всё вроде идёт нормально, но только вы кликаете мышой как ваша форма теряет фокус(несмотря на вышеперечисленные параметры) Такое случается если разрешение вашего проекта в запущеном(Run) виде равняется разрешению Рабочего Стола( и не только). Что бы избежать этого сделайте так Допустим разрешение Desktop'а равно 1024x768x16, и вам для вашего проекта тоже надо 1024x768x16, поэтому перед тем как ставить строчку (2) поставьте строчку (3)

1 Call dd.SetCooperativeLevel(Form1.hWnd, _
DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN Or
DDSCL_ALLOWREBOOT)

3 Call dd.SetDisplayMode(640, _
480, _
8, _
0, _
DDSDM_DEFAULT)

2 Call dd.SetDisplayMode(1024, _
768, _
16, _
0, _
DDSDM_DEFAULT)

Не думайте так мол "Нафиг мне лишний код" или "Разрешения моего проекта и Desktop'а не совпадают". Но строчка это не так уж много и вдруг вы своим проектом решите поделиться с другом, у которого они совпадут.

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


2.)

Если вы в вашем проекте используете свой курсор и убиваете Системный

Старайтесь заменить эти две строки

Win32.ShowCursor False 'Убить системный курсор
Win32.ShowCursor True 'Восстанавливаем курсор


На следующее

Dim lRet As Long, lSystemCursor As Long 'Это
Private Enum Const_SC 'поместите
SC_Hide = -1 'в
SC_Show = 1 'раздел
End Enum 'Declarations

Private Sub Form_Load()
Call SystemCursor(SC_Hide) 'Убить системный курсор
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call SystemCursor(SC_Show) 'Восстанавливаем курсор
Set frmKB3 = Nothing
End
End Sub

Private Sub SystemCursor(SysCursor As Const_SC)
If SysCursor Then
Do
lSystemCursor = lSystemCursor + 1
lRet = ShowCursor(lSystemCursor)
Loop Until lRet >= 0
Else
Do
lSystemCursor = lSystemCursor - 1
lRet = ShowCursor(lSystemCursor)
Loop Until lRet < 0
End If
End Sub

Если вы знаете что нибудь ещё пишите

Дмитрий (LordSatan@mail.ru).

Posted: 22.01.2k1
Autor: Дмитрий Дещенко
<lordsatan@mail.ru>

 


Проект
Создание Народного Учебника по OpenGL

Участвовать!
Поиск
Найдите статью или файл:


Рассылка
Новости сайта
La Vision в вашем почтовом ящике








Программирование на С++ Delphi и Паскаль
Центр демо-искусства в России