Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Почему не совпадает результат: WinGetPos и WM_MOVE?

Ответить
Настройки темы
[решено] Почему не совпадает результат: WinGetPos и WM_MOVE?

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152


Конфигурация

Профиль | Отправить PM | Цитировать


Растолкуйте, пожалуйста, как/от чего высчитывают данны WinGetPos и WM_MOVE,
почему не совпадает результат?

Код: Выделить весь код
#NoTrayIcon
#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        0)
    Opt('TrayIconHide',         1)
#endregion

#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
#endregion

#region: - Global
; Main Win
    Global  $hMainWin
    Global  $iMainWinWidth      = 350
    Global  $iMainWinHeight     = 345
    Global  $iMainWinX          = -1
    Global  $iMainWinY          = -1

    Global  $iMainWinApiX, $iMainWinApiY
#endregion

#region: - Main Win
Func _MainWin_Create()
    $hMainWin = GUICreate('Test', $iMainWinWidth, $iMainWinHeight, $iMainWinX, $iMainWinY)
        GUISetState(@SW_SHOW, $hMainWin)
            GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')
EndFunc
#endregion

#region: - После создания всех GUI
    HotKeySet('{ESC}', '_Pro_Exit')
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
    _MainWin_Create()
#endregion

#region: - Sleep, Exit
While 1
    Sleep(10)
    ToolTip('WinGetPos' & @CRLF & 'X = ' & $iMainWinX & @CRLF & 'Y = ' & $iMainWinX & @CRLF  & @CRLF & _
            'WinAPI' & @CRLF & 'X = ' & $iMainWinApiX & @CRLF & 'Y = ' & $iMainWinApiY, _
            10, 70)
WEnd

Func _Pro_Exit()
    Exit
EndFunc
#endregion

#region: - GUI Register Msg
Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    Local  $aWinPos = WinGetPos($hWnd)

    $iMainWinX  = $aWinPos[0]
    $iMainWinY  = $aWinPos[1]

    $iMainWinApiX  = _WinAPI_LoWord($lParam)
    $iMainWinApiY  = _WinAPI_HiWord($lParam)
EndFunc
#endregion

Отправлено: 21:34, 02-04-2009

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата proxy:
почему не совпадает результат? »
Ну хотябы потому, что используется одна и таже переменная:

Цитата:
ToolTip('WinGetPos' & @CRLF & 'X = ' & $iMainWinX & @CRLF & 'Y = ' & $iMainWinX & @CRLF & @CRLF & _
'WinAPI' & @CRLF & 'X = ' & $iMainWinApiX & @CRLF & 'Y = ' & $iMainWinApiY, _
10, 70)
Но как я понимаю не в этом дело... Вообще по сути, WM_MOVE получает координаты клиентской части окна, поэтому нужно самим добавлять (или убавлять):

Код: Выделить весь код
#NoTrayIcon
#region: - Option
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        0)
    Opt('TrayIconHide',         1)
#endregion

#region: - Include
    #include <GUIConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
#endregion

#region: - Global
; Main Win
    Global  $hMainWin
    Global  $iMainWinWidth      = 350
    Global  $iMainWinHeight     = 345
    Global  $iMainWinX          = -1
    Global  $iMainWinY          = -1

    Global  $iMainWinApiX, $iMainWinApiY
#endregion

#region: - Main Win
Func _MainWin_Create()
    $hMainWin = GUICreate('Test', $iMainWinWidth, $iMainWinHeight, $iMainWinX, $iMainWinY)
        GUISetState(@SW_SHOW, $hMainWin)
            GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit')
EndFunc
#endregion

#region: - После создания всех GUI
    HotKeySet('{ESC}', '_Pro_Exit')
    GUIRegisterMsg($WM_MOVE, 'WM_MOVE')
    _MainWin_Create()
#endregion

#region: - Sleep, Exit
While 1
    Sleep(10)
WEnd

Func _Pro_Exit()
    Exit
EndFunc
#endregion

#region: - GUI Register Msg
Func WM_MOVE($hWnd, $Msg, $wParam, $lParam)
    Local $aWinPos = WinGetPos($hWnd)
    Local $aWinClientSize = WinGetClientSize($hWnd)

    Local $iBorder_Size = ($aWinPos[2] - $aWinClientSize[0]) / 2
    Local $iCaption_Size = ($aWinPos[3] - $aWinClientSize[1]) - $iBorder_Size

    $iMainWinX  = $aWinPos[0]
    $iMainWinY  = $aWinPos[1]

    $iMainWinApiX  = _WinAPI_LoWord($lParam) - $iBorder_Size
    $iMainWinApiY  = _WinAPI_HiWord($lParam) - $iCaption_Size

    ToolTip('WinGetPos' & @CRLF & 'X = ' & $iMainWinX & @CRLF & 'Y = ' & $iMainWinY & @CRLF  & @CRLF & _
        'WinAPI' & @CRLF & 'X = ' & $iMainWinApiX & @CRLF & 'Y = ' & $iMainWinApiY, 10, 70)
EndFunc
#endregion

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:49, 02-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Но как я понимаю не в этом дело... Вообще по сути, WM_MOVE получает координаты клиентской части окна, поэтому нужно самим добавлять (или убавлять): »
точно, верно. даже если можно было вычислить размер рамок, заголовка и т.д.
думаю WinGetPos будет оптимальней.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 01:42, 03-04-2009 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Почему не совпадает результат: WinGetPos и WM_MOVE?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как записать в переменную результат выполнения команды? MSI Скриптовые языки администрирования Windows 64 24-12-2020 18:20
[решено] Как преобразовать текстовую формулу в числовой результат malev AutoIt 2 18-09-2009 11:09
CMD/BAT - [решено] Строка результат выполнения filever.exe передать в переменную dARKest Скриптовые языки администрирования Windows 3 07-09-2009 22:50
[решено] Объединить результат mysql_fetch_array() в одну переменную D_Master Вебмастеру 9 10-07-2009 17:23
Разное - [решено] Имя папки настроек пользователя не совпадает с именем учетной записи. Почему? truvo Microsoft Windows 2000/XP 1 08-03-2008 19:35




 
Переход