Что нового

Возможность перетаскивания беззаголовочного окна

mv6677

Новичок
Сообщения
105
Репутация
0
Доброй ночи.
Помогите.

Есть макрос проигрывания видео в беззаголовочном окне, с уменьшением звука.
Пытаюсь сделать его таким, чтобы можно было это окно перетаскивать (используя параметр $WS_EX_CONTROLPARENT).
Но что-то не получается.
Причем есть один скрипт, где перетаскивание окна - возможно. Никак не могу, что понять почему в одном скрипте можно перемещать окно, а в другом - параметр WS_EX_CONTROLPARENT не дает вообще загружать видео.
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>

Global $sFile = "C:\1\1.avi"

Global $fVolume, $iValue = -10000
Global $hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_CONTROLPARENT))
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Engine_Shutdown()

Func WM_MOUSE($hWnd, $iMsg)
    Switch $iMsg
        Case $WM_MOUSEMOVE
            If Not $fVolume Then
                AdlibUnRegister("_VolumeDown")
                AdlibRegister("_VolumeUp", 10)
                $fVolume = True
                _WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
            EndIf
        Case $WM_MOUSELEAVE
            If $fVolume Then
                AdlibUnRegister("_VolumeUp")
                AdlibRegister("_VolumeDown", 10)
                $fVolume = False
            EndIf
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSE

Func _VolumeUp()
    If $iValue < 0 Then
        $iValue += 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeUp")
    EndIf
EndFunc   ;==>_VolumeUp

Func _VolumeDown()
    If $iValue > -10000 Then
        $iValue -= 100
        Engine_SetVolume($iValue)
    Else
        AdlibUnRegister("_VolumeDown")
    EndIf
EndFunc   ;==>_VolumeDown

Как изменить данный скрипт, чтобы можно было перетаскивать это беззаголовочное окно ?
 

Вложения

  • 111.rar
    64.6 КБ · Просмотры: 4

Tyr

Новичок
Сообщения
43
Репутация
4
В рабочем варианте используются:
#include <gdiplus.au3>
В нерабочем нет,
но зато есть <WinAPISys.au3> (которого у меня в портб версии в ресурсах отже нет)
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Tempo, кусок кода $WS_EX_LAYERED - убрал.

Как только я это сделал - перестала работать та часть кода, которая была ответственна за изменение звука.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include "DSEngine.au3"
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <MenuConstants.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>

Global $sFile = "C:\1\1.avi"

Global $fVolume, $fMove, $iValue = -10000
Global $hWnd = GUICreate("DirectShow Engine Example", 480, 320, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUIRegisterMsg($WM_MOUSEMOVE, "WM_MOUSE")
GUIRegisterMsg($WM_MOUSELEAVE, "WM_MOUSE")
GUIRegisterMsg($WM_LBUTTONDOWN, "WM_MOUSE")
Engine_Startup(@ScriptDir & "\DSEngine_UDF.dll")
Engine_LoadFile($sFile, $hWnd)
GUISetState()
Engine_StartPlayback()
Engine_Mute()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Engine_Shutdown()

Func WM_MOUSE($hWnd, $iMsg)
	Switch $iMsg
		Case $WM_LBUTTONDOWN
			$fMove = True
			_SendMessage($hWnd, $WM_SYSCOMMAND, 0xF009, 0, "int", "int", "long")
		Case $WM_MOUSEMOVE
			If Not $fVolume Then
				AdlibUnRegister("_VolumeDown")
				AdlibRegister("_VolumeUp", 10)
				$fVolume = True
				_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
			EndIf
		Case $WM_MOUSELEAVE
			If $fMove Then
				$fMove = False
				_WinAPI_TrackMouseEvent($hWnd, $TME_LEAVE)
			ElseIf $fVolume Then
				AdlibUnRegister("_VolumeUp")
				AdlibRegister("_VolumeDown", 10)
				$fVolume = False
			EndIf
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOUSE

Func _VolumeUp()
	If $iValue < 0 Then
		$iValue += 100
		Engine_SetVolume($iValue)
	Else
		AdlibUnRegister("_VolumeUp")
	EndIf
EndFunc   ;==>_VolumeUp

Func _VolumeDown()
	If $iValue > -10000 Then
		$iValue -= 100
		Engine_SetVolume($iValue)
	Else
		AdlibUnRegister("_VolumeDown")
	EndIf
EndFunc   ;==>_VolumeDown
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Tempo, а вот теперь - все работает идеально.
 
Верх