Что нового

[Элементы GUI] Сохранение позиции окна при закрытии свернутого.

inx

Знающий
Сообщения
43
Репутация
12
При закрытии свернутого окна* в ini пишуться отрицательные значения.
(* через панель задач правой кнопкой)

Как правильно определить что было закрыто свернутое окно и сохранить хотя бы позиции по умолчанию?

Подобные вариации не работают:
Код:
Case $GUI_EVENT_CLOSE
			SaveSettings()
			Exit
			
			
Func SaveSettings()
	Local $hWnd = WinGetHandle("Имя окна")
	Local $state = WinGetState($hWnd)
	If BitAND($state, 16) Then
		$XPos = 30
		$YPos = 30
	Else
		Local $aPos = WinGetPos("[ACTIVE]")
		$XPos = $aPos[0]
		$YPos = $aPos[1]
	EndIf
	IniWrite("file.ini", "file", "$XPos", $XPos)
	IniWrite("file.ini", "file", "$YPos", $YPos)
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
http://autoit-script.ru/index.php/topic,3925.15.html#post_gui_5
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
http://autoit-script.ru/index.php/topic,13772.msg87249.html#msg87249
 
Автор
I

inx

Знающий
Сообщения
43
Репутация
12
В результате сделал свой велосипед, вроде работает * :smile:
*upd: в таком виде не совсем, при сворачивании только что открытого окна будет ошибка, нужно записать в $aLastPos координаты из ini.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

Dim $aPos, $aLastPos
Global $XPos, $YPos
$hGUI = GUICreate("Test", 500, 500)
GUISetState()
GUIRegisterMsg($WM_MOVE, "_WM_MOVE")

While 1
    Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			SavePos()
            Exit
    EndSwitch
WEnd

Func _WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
	Local $state = WinGetState($hGUI)
    If $hWnd = $hGUI And BitAND($state, 16) Then
		$XPos = $aLastPos[0]
		$YPos = $aLastPos[1]
	Else
		$aPos = WinGetPos("[ACTIVE]")
		$aLastPos = $aPos
		$XPos = $aPos[0]
		$YPos = $aPos[1]
    EndIf
EndFunc

Func SavePos()
	MsgBox($MB_SYSTEMMODAL, "", "Тут записываем позицию окна в ini:" & @CRLF & "XPos = " & $XPos & "   YPos = " & $YPos)
EndFunc
 
Верх