Alt + Tab

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

Alt + Tab

Сообщение Odrick » 23.05.2005 (Пн) 13:38

Народ, кто-нить знает, как на время выполнения программы глобально заблокировать сочетание клавиш Alt+Tab?
То, что для одних константа, для других только переменная...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 23.05.2005 (Пн) 13:47

У разработчиков игр под директ спроси
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 23.05.2005 (Пн) 16:00

Хм... А что, Direct это умеет? :)
То, что для одних константа, для других только переменная...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 23.05.2005 (Пн) 16:18

Нет, там просто большая проблема была, когда прога сворачивалась по алт+таб. Поэтому для них вопрос актуальный. Хотя может уже решили вопрос.
Водки я вам не обещаю, но погуляем хорошо.
И. Сусанин.

Аватара (с) Тёмыч

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.05.2005 (Пн) 16:27

Давно, очень давно решили...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 23.05.2005 (Пн) 18:57

А зачем тебе это нужно??? Можно же сделать чтоб прога никуда не девалась по нажатию альт-таб...
Ушел в себя, вернусь не скоро...

Если вам нужно сделать прозрачной только форму, а контролы на ней нет, то вам сюда!!!

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 23.05.2005 (Пн) 23:29

Проблема именно с директом. После сворачивания окна и в последствии его восстановления, поверхности DirectDraw не обновляются. В итоге - черный экран. Как этого избежать... Этот вопрос я уже задавал, но вразумительного ответа так и не получил. Выход - блокировать все системные сочетания клавищ, которы приводят к сворачиванию окна. Сорри, если ошибки в правописании - сейчас пьянг немного :)
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.05.2005 (Вт) 9:55

Проблема не с директом, а с руками.
Поиском никто не пользуется?

http://bbs.vbstreets.ru/viewtopic.php?t=4468
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 24.05.2005 (Вт) 10:46

GSerg ты меня совсем за дурака держишь? :) Этот топик я читал еще с полгода тому назад :) Только там речь идет о Direct3D. Я же спрашиваю о DirectDraw :)
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.05.2005 (Вт) 12:14

Тогда объясни мне, в чём глубокая и принципиальная разница? С учётом того, что у directdraw есть как testcooperativelevel, так и setcooperativelevel? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 24.05.2005 (Вт) 14:47

GSerg М-м-м... Наверное у меня руки таки кривоваты :oops: , но как это вкрутить в моем случае пока понять не могу. Ок, вечером выложу код - посмотришь?
То, что для одних константа, для других только переменная...

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 24.05.2005 (Вт) 23:54

В общем вот код:
Код: Выделить всё
Option Explicit

Dim dx As New DirectX7
Dim dd As DirectDraw7
Dim rcRect As RECT
Dim ddsd1 As DDSURFACEDESC2
Dim ddsd2 As DDSURFACEDESC2
Dim Primary As DirectDrawSurface7
Dim Back As DirectDrawSurface7
Dim BackPic As DirectDrawSurface7

Private Sub Form_Load()
    Dim bLoop As Boolean
   
    Set dd = dx.DirectDrawCreate("")
    Me.Show
   
    Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_EXCLUSIVE)
    Call dd.SetDisplayMode(640, 480, 16, 0, DDSDM_DEFAULT)

    ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
    ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
    ddsd1.lBackBufferCount = 1

    Set Primary = dd.CreateSurface(ddsd1)

    Dim caps As DDSCAPS2
    caps.lCaps = DDSCAPS_BACKBUFFER
    Set Back = Primary.GetAttachedSurface(caps)

    ddsd2.lFlags = DDSD_CAPS
    ddsd2.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
   
    ddsd2.lHeight = 480
    ddsd2.lWidth = 640
    Set BackPic = dd.CreateSurfaceFromFile("Back.bmp", ddsd2)
   
    rcRect.Left = 0
    rcRect.Top = 0
    rcRect.Right = 640
    rcRect.Bottom = 480
   
    bLoop = True
    Do While bLoop
        Back.BltFast 0, 0, BackPic, rcRect, DDBLTFAST_NOCOLORKEY Or DDBLTFAST_WAIT
        Primary.Flip Nothing, DDFLIP_WAIT
        DoEvents
    Loop
   
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyEscape Then
        Set BackPic = Nothing
        Set Back = Nothing
        Set Primary = Nothing
        Call dd.RestoreDisplayMode
        Call dd.SetCooperativeLevel(Me.hWnd, DDSCL_NORMAL)
        End
    End If
End Sub


И как его заставить восстанавливаться? :roll:
Вложения
DD.zip
DirectDraw трабла...
(4.99 Кб) Скачиваний: 19
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.05.2005 (Ср) 11:43

Не вижу в этом коде ни одной попытки вызвать TestCooperativeLevel. Следовательно, адаптировать код D3D ты даже не пытался. Следовательно, сам понимаешь :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList