Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


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

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


Creat0R

Во-первых, в твоем примере нет динамического создания/удаления описателей - тут речь всего о двух хэндлах, а точнее - об одной группе связанных описателей: (CallBack + Timer), которую можно обозвать одним "составным описателем". Во-вторых, я не вижу проблемы как таковой - определи пару UDF: одна создает описатель, другая - закрывает и пусть пользователь сам решает куда их втыкать.

Могу предложить свой вариант системы UDF, причем без создания глобальных данных:

_GUICtrlOnHoverCallOpen() - открывает хэндлы, инициализирует и возвращает массив - управляющую структуру, в которой сохраняются хэндлы и рабочие данные, пример заполнения:

$aControl [0] [0] - кол-во элементов массива (обрабатываемых контролов)
$aControl [0] [1] - описатель CallBack
$aControl [0] [2] - описатель Timer

$aControl [$i] [0] - ControlID
$aControl [$i] [1] - HoverFuncName
$aControl [$i] [2] - HoverFuncNameLeave

_GUICtrlOnHoverCallClose(ByRef $aControl) - закрывает все описатели и уничтожает управляющий массив ($aControl =0)

_GUICtrlOnHoverCallAdd(ByRef $aControl, $CtrlID, $HoverFuncName = "", $HoverFuncNameLeave = "") - регистрирует контрол для обработки

_GUICtrlOnHoverCallDelete(ByRef $aControl, $CtrlID) - снимает контрол с обработки


Цитата Creat0R:
есть ещё пару (точно где не помню), где дела обстоят ещё хуже »
вспоминай


ADD: может я ошибаюсь, но имхо для штатного GUI не нужен никакой таймер - достаточно поставить обработчик сообщения WM_MOUSEMOVE ...совсем другое дело обработка контролов чужих окон, но там одного ControlID недостаточно, нужно еще идентифицировать главное окно или процесс... а может просто передавать hWnd контрола?.. впрочем, это уже будет совсем другая функция

Последний раз редактировалось amel27, 03-11-2008 в 12:19.


Отправлено: 10:11, 03-11-2008 | #1057