Как узнать определитель (handle, хэндл, хендл, дескриптор) графического объекта?

 

Для управления создаваемыми в процессе работы советника графическими объектами средствами WINAPI требуется знать определители этих объектов. Для установления handle основного окна такая возможность предоставлена специальной функцией WindowHandle(...).

Похоже, что подобной функции для графических объектов не существует или ... её не предоставляют в пользование. Но, очень нужно. Или поясните, пожалуйста, как правильно сформировать handle графического объекта. Буду очень благодарен.

 

Ещё одно дополнение. МТ4 предоставляет оператор ObjectDescription для определения handle объектов всех типов кроме OBJ_TEXT и OBJ_LABEL.

Мои попытки получить дескриптор обыкновенной линии с помощью оператора

Alert(ObjectDescription("obj_line"));

не увенчались успехом. В качестве дескриптора объекта с именем "obj_line" Alert не выдаёт ни одного знака - пусто. Вопрос 1: в чём тут дело?

Кроме того, оператор ObjectDescription имеет тип string, что не вяжется с типом дескриптора объектов от WINAPI (они там целочисленные). Вопрос 2: эти дескрипторы строятся по-разному и не имеют друг к другу отношения?

 
string ObjectDescription( string name) 
// Функция возвращает описание объекта. Для объектов типа OBJ_TEXT и OBJ_LABEL возвращается текст, отображаемый этими объектами.
Это не дескриптор. Это текстовая подпись у объекта.
 
Понятно, спасибо. Тогда на кой ляд нужна функция ObjectDescription?! Ведь для линий, например, мы всегда будем получать "шиш", поскольку они текст не содержат. Не думаю, что такую "бессмыслицу" допустили разработчики. Что-то здесь не так... Может быть, эту "текстовую подпись у объекта" формирует МТ4, и она действительно не имеет отношения к дескриптору объекта от Windows? И как узнать настоящий "виндосовский" дескриптор объекта?
 
Описание может быть у любого графического объекта. У линии тоже.
 
dokpiknik >>:
Понятно, спасибо. Тогда на кой ляд нужна функция ObjectDescription?! Ведь для линий, например, мы всегда будем получать "шиш", поскольку они текст не содержат. Не думаю, что такую "бессмыслицу" допустили разработчики. Что-то здесь не так... Может быть, эту "текстовую подпись у объекта" формирует МТ4, и она действительно не имеет отношения к дескриптору объекта от Windows? И как узнать настоящий "виндосовский" дескриптор объекта?

К дескриптору окна она действительно отношения не имеет. Мало того - я сейчас тут WinSpy даже полазил - все объекты система отрисовывает сама - т.е. окон, их представляющих, а соответсвенно и хендлов для них, попросту нет.

 
Azzx писал(а) >>

К дескриптору окна она действительно отношения не имеет. Мало того - я сейчас тут WinSpy даже полазил - все объекты система отрисовывает сама - т.е. окон, их представляющих, а соответсвенно и хендлов для них, попросту нет.

Под словом "система" Вы имеете в виду МТ4? Внутренним идентификатором объекта в МТ4 является его имя. Мне бы хватило научиться определять по имени объекта его "свойство выделенности" и менять это свойство (поиск handle объекта - это моя попытка решить эту проблему, а не идея фикс). Как это делается? Ведь каким-то образом управляет всем этим сама система МТ4...! Может быть, знает кто-нибудь?

 
dokpiknik писал(а) >>

... Мне бы хватило научиться определять по имени объекта его свойство "выделенности" и менять это свойство ...

Уважаемые разработчики! Пожалуйста, помогите решить проблему. Ведь известно, что с помощью функции PostMessageA можно удалять выделенность ВСЕХ объектов разом. Каким образом можно удалять выделенность отдельных объектов и как определять их "признак выделенности"? Здесь надежда только на вас.

Причина обращения: