Что нового

[Элементы GUI] Перетаскивание окна за элемент ActiveX в Win 7 и XP

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Есть такой код:

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

$hGUI_1 = GUICreate('Test Script', 300, 200, -1, -1, $WS_POPUP)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
$oIE = _IECreateEmbedded()

GUICtrlCreateObj($oIE, 0, 0, 200, 200)
GUICtrlSetBkColor(-1, 0xFF0000)

$hGUI_2 = GUICreate('Test Script', 300, 200, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW), $hGUI_1)
GUIRegisterMsg($WM_NCHITTEST, 'WM_NCHITTEST')
GUIRegisterMsg($WM_MOVE, 'WM_MOVE')

GUISetState(@SW_SHOW, $hGUI_2)
GUISetState(@SW_SHOW, $hGUI_1)

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

Func WM_NCHITTEST($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hGUI_2
			Return $HTCAPTION
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCHITTEST

Func WM_MOVE($hWnd, $iMsg, $wParam, $lParam)
	Switch $hWnd
		Case $hGUI_2
			Local $aPos = WinGetPos($hGUI_2)
			If IsArray($aPos) Then
				WinMove($hGUI_1, '', $aPos[0], $aPos[1])
			EndIf
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_MOVE

Суть в том, что окно с какими-то элементами(занимающими большую часть площади) "накрыто" другим прозрачным окном, поддерживающим перетаскивание.
В Win 7 работает, а в XP нет.

Хотелось бы, чтобы и в XP можно было перемещать окно за любую часть, независимо от того, что находится под курсором.
 
Верх