Нужно вывести сообщение при работе других приложений , ДАЖЕ ИГР!
Кто-то может научить?
4udik писал(а):Нужно вывести сообщение при работе других приложений , ДАЖЕ ИГР!
Кто-то может научить?
4udik писал(а):В том-то и дело , что при работе большенства игр вывод MsgBox проходит незамеченным.
Проблема в том , чтобы вывести окно сообщения во время игры , после убрать сообщение и чтобы игра корректно продолжила работу.
Сам добиться этого не могу.Либо все виснет намертво , либо сообщение просто не выводится.
4udik писал(а):Про причину вывода сообщения почти угадал!
И насчет всего остального я тоже согласен!
Но вот вопрос - КАК это зделать? Как там разобраться с мышкой и клавиатурой понятно,а вот как вывести картинку чтобы ее было видно во время игры?КОНКРЕТНО!.
А в форме, что-нибудь типа этого:
iPicContr = LoadPicture("C:\1.bmp")
DeskTopDc = GetWindowDC(GetDesktopWindow)
hBitDeskTop = CreateCompatibleBitmap(DeskTopDc, lx, ly)
ReleaseDC GetDesktopWindow, DeskTopDc
Call DrawBMPonDeskTop(fBool, hBitDeskTop, iPicContr, x, y, xOld, yOld, lx, ly)
А функция:
Public Sub DrawBMPonDeskTop(fBool As Boolean, ByVal hBitDeskTop As Long, iPicContr As IPictureDisp, x As Long, y As Long, xOld As Long, yOld As Long, lx As Long, ly As Long)
' Рисует на десктопе BMP, очищает предыдущее место рисования
' fBool - False-рисуем 1 раз, стирать пока нечего, True-надо стереть bmp со старого места
' hBitDeskTop - кусок первонач. десктопа из-под нашего bmp
' iPicContr - сама bmp картинка
' x, y - коорд. нового положения bmp на экране
' xOld, yOld - коорд. старого положения bmp на экране
' lx, ly - размер картинки
Dim i As Long, k As Long
Dim DeskTopDc As Long
Dim memDC As Long ' эквивалент. DeskTopDc в памяти
Dim memDC2 As Long ' эквивалент. DeskTopDc в памяти
Dim hBmpPrev As Long, hBmpPrev2 As Long ' старый растр
' получение дескриптора десктопа
DeskTopDc = GetWindowDC(GetDesktopWindow)
' пол. эквивалент устройства DeskTopDc для памяти
memDC = CreateCompatibleDC(DeskTopDc)
' выбираем нашу bmp в memDC2
hBmpPrev = SelectObject(memDC, iPicContr.Handle)
memDC2 = CreateCompatibleDC(DeskTopDc)
' выбираем битмап раб. стола в memDC2
hBmpPrev2 = SelectObject(memDC2, hBitDeskTop)
' рисование
If fBool Then ' стираем старую картинку
i = BitBlt(DeskTopDc, xOld, yOld, lx, ly, memDC2, 0, 0, SRCCOPY)
End If
' сохраняем в выбранном hBitDeskTop новый фон под BMP
i = BitBlt(memDC2, 0, 0, lx, ly, DeskTopDc, x, y, SRCCOPY)
' рисуем на декстопе BMP
If x <> 0 And y <> 0 Then
i = TransparentBlt(DeskTopDc, x, y, lx, ly, memDC, 0, 0, lx, ly, vbWhite)
' вместо TransparentBlt можно BitBlt использовать, но придется поколдовать с прозрачностью(конечно если у тебя прямоуг. картинка, то наплевать на прозрачность, используй BitBlt копируя bmp как есть - SRCCOPY. Microsoft предупреждает что TransparentBlt в Win98 может создать утечку памяти...;) )
End If
'Восстанавливаем старый растр
SelectObject memDC, hBmpPrev
SelectObject memDC2, hBmpPrev2
' Освобождаем
DeleteDC memDC
DeleteDC memDC2
ReleaseDC GetDesktopWindow, DeskTopDc
End Sub
4udik писал(а):Спасибо за совет!Картинка нормально выводится,НО.....
Во время игры картинка не статична. Т.Е. вывожу сообщение как ты
советовал,но следующий же кадр игры стирает его нафиг!:(
Так-что теперь проблема застопорить игру.Есть какие мысли?...
Сейчас этот форум просматривают: AhrefsBot и гости: 25