Что нового

[Окна, Диалоги] Неактивное окно поверх активного окона

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Доброго времени суток.
Вопрос на мой взгляд немного глупый и некорректный, но все же попробую объяснить.

Есть активное оконное приложение. Поверх его нужно рисовать еще одно окно, которое не будет сбивать фокус при кликах в активное окно.
Т.е. если нарисовать окно поверх второго, то если во втором навести мышку на пределы первого окна и кликнуть - фокус перейдет к нему.
Можно ли вообще сделать его неактивным? И при этом без проблем пользоваться вторым.

Заранее спасибо.
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI

firex [?]
Т.е. если нарисовать окно поверх второго, и во втором навести мышку на пределы первого окна и кликнуть - фокус перейдет к нему.
Вот этого и не должно быть, а эта функция лишь делает его поверх окна.


Добавлено:
Сообщение автоматически объединено:

http://puu.sh/3jd9h.jpg
К нему не должен переходить фокус в случае, если на заднем приложении я осуществлю клик на пределах радара. Радар поверх всех окон.

Как вам объяснить еще яснее я не представляю.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Т.е. вы хотите пропускать клик сквозь окно?
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI
Верно. Окно будет прозрачным примерно на 50%. И чувствовать оно должно себя как оверлей. (не принимать на себя наведение мыши(смена курсора) и все события связанные с кликами).
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
firex
В оверлеи выводить не умею, но как вариант можно попробовать так (расположите окно GUI над окном SciTE и кликайте в клиентскую область GUI).
Код:
#include <GuiConstantsEx.au3>

$wnd = WinGetHandle("[class:SciTEWindow]")

$gui = GUICreate("")
GUISetState()
WinSetOnTop($gui, "", 1)
WinSetTrans($gui, "", 128)

Do
  Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
      Exit
    Case $GUI_EVENT_PRIMARYUP
      GUISetState(@SW_HIDE)
      MouseClick("primary")
      GUISetState(@SW_SHOW)
      WinActivate($wnd)
  EndSwitch
Until 0
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI
Однако в случае зажатия кнопки(в игре к примеру стрельба) - окно удержит его в себе :(
Я подумывал и раньше о таком методе, но он не годится.

Как крайний вариант: содержимое окна - это hBitMap, который очень часто обновляется. Можно рисовать его.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
firex
Это окно поверх других - на autoite?
Или нужно какое-то стороннее окна таким сделать?

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

$hWndGUI = GUICreate('My GUI', 300, 350, -1, -1, $WS_POPUP, BitOR($WS_EX_TRANSPARENT, $WS_EX_TOPMOST), $WS_EX_TOOLWINDOW)
WinSetTrans($hWndGUI, '', 155)
GUISetState(@SW_SHOW)


While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			ExitLoop
	EndSwitch
WEnd
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
WSWR [?]
Это окно поверх других - на autoite?
Да, это мое приложение написанное на AutoIt. И его параметры соответствуют вашим. (только там окно на окне).

Код:
$__hGUI_Dlg = GUICreate( $_sTitle, $IlumOpt[5], $IlumOpt[6], $IlumOpt[3], $IlumOpt[4], $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW), $_hParent)
$__hGUI_Layer = GUICreate( $_sTitle, ($IlumOpt[5] - 4), ($IlumOpt[6] - 4), ($IlumOpt[3] + 2), ($IlumOpt[4] + 2), $WS_POPUP, $WS_EX_LAYERED, $__hGUI_Dlg)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
firex [?]
его параметры соответствуют вашим
Не соответствуют. Главное отличие в стиле $WS_EX_TRANSPARENT, которое и делает окно прозрачным для кликов (теперь тоже буду знать, как этим стилем пользоваться).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
WSWR,
А если установить в Вашем примере
Код:
GUISetState(@SW_SHOWNOACTIVATE)
То оно фокус не перехватывает.
 
Автор
firex

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI
madmasles
Спасибо, сейчас все попробую.


Добавлено:
Сообщение автоматически объединено:

WSWR, InnI
На Win7 этот пример не работает. Окно просто не появляется.
Испытал эти стили на моих окнах - результата никакого. Все равно перехватывает на себя нажатия.
 
Верх