Что нового

[Элементы GUI] Неперемещаемое(прикрепленное) окно GUI

kasper_sky

Antivirus
Сообщения
116
Репутация
1
Доброго времени суток.
Возможно, мой вопрос слегка идиотский, но все же:
Как(каким параметром) задать окну неперемещаемость?
То есть, у меня есть окно гуи, мне нужно, чтобы при попытке его переместить ничего не происходило.

Спасибо.
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Можно так попробывать

Код:
Global  $Pos 
$hGui = GUICreate("My Gui")
GUISetState()
$Pos = WinGetPos($hGui)
$WM_MOVE  = 0x0003

GUIRegisterMsg($WM_MOVE,"WM_MOVE")
While GUIGetMsg() <> -3
WEnd

Func WM_MOVE()
  WinMove ( $hGui, "", $Pos[0], $Pos[1] )
EndFunc
 
Автор
K

kasper_sky

Antivirus
Сообщения
116
Репутация
1
VladUs, не подходит. Нужно, чтобы окно совсем не дергалось и не перемещалось.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kasper_sky,
Можно так попробовать:
Код:
#include <GUIConstantsEx.au3>

Global $fNew, $fOld, $iW = 400, $iH = 300
$fOld = Not $fNew

$hGui = GUICreate('Попробуйте переместить окно', $iW, $iH, 10, 10)
$nButton = GUICtrlCreateButton('Click', ($iW - 100) / 2, ($iH - 30) / 2, 100, 30)
GUISetState()

While 1
	$aCur = GUIGetCursorInfo()
	If Not @error Then
		If ($aCur[1] <= 0 And $aCur[0] <= $iW - 100) Then
			$fNew = False
		Else
			$fNew = True
		EndIf
	EndIf
	If $fOld <> $fNew Then
		$fOld = $fNew
		If $fOld Then
			GUISetState(@SW_ENABLE)
		Else
			GUISetState(@SW_DISABLE)
		EndIf
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			MsgBox(64, 'Info', 'Click')
	EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
kasper_sky

Код:
$Gui = GUICreate("Неперемещаемое окно", 300, 200, 100, 50)
GUISetState()

$GP = WinGetPos($Gui)
GUIRegisterMsg(0x0046, "WM_WINDOWPOSCHANGING")

Do
Until GUIGetMsg()=-3

Func WM_WINDOWPOSCHANGING($hWnd, $Msg, $wParam, $lParam)
    Local $stWinPos = DllStructCreate("uint;uint;int;int;int;int;uint", $lParam)
    DllStructSetData($stWinPos, 3, $GP[0])
    DllStructSetData($stWinPos, 4, $GP[1])
EndFunc
 

VladUs

Скриптер
Сообщения
621
Репутация
181
AZJIO
А зачем Вы вызываете функцию SystemParametersInfo()?
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Код:
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>

Global Const $WM_MOVING = 0x0216

Global $hGui = GUICreate("My Gui")
Global $aPos = WinGetPos($hGui)

GUIRegisterMsg($WM_MOVING, 'WM_MOVING')
GUISetState()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_MOVING($hWnd, $iMsg, $wParam, $lParam)
	Local $tRect = DllStructCreate($tagRect, $lParam)
	DllStructSetData($tRect, 'Left', $aPos[0])
	DllStructSetData($tRect, 'Top', $aPos[1])
	DllStructSetData($tRect, 'Right', $aPos[2]+$aPos[0])
	DllStructSetData($tRect, 'Bottom', $aPos[3]+$aPos[1])
EndFunc
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
VladUs
Поправил удалив лишнее... функция была "прилеплятся к краям экрана" из неё сделал неперемещаемое
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
kasper_sky
Еще так можно:
Код:
#include <GUIConstantsEx.au3>
#include <GUIMenu.au3>
#include <MenuConstants.au3>

Global $iW = 400, $iH = 300

$hGui = GUICreate('Попробуйте переместить окно', $iW, $iH, 10, 10)
$nButton = GUICtrlCreateButton('Click', ($iW - 100) / 2, ($iH - 30) / 2, 100, 30)
GUISetState()
$hMenu = _GUICtrlMenu_GetSystemMenu($hGui)
_GUICtrlMenu_DeleteMenu($hMenu, $SC_MOVE, False)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			MsgBox(64, 'Info', 'Click')
	EndSwitch
WEnd
 
Верх