Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизКак определить тип окна? Найти похожие ветки
← →
arbiter © (2004-02-12 16:47) [0]Как имея только хэндл окна, определить его тип (CheckBox, Button, ListBox, etc)?
← →
YuRock © (2004-02-12 17:08) [1]1. The GetClassName function retrieves the name of the class to which the specified window belongs.
2. CheckBox отличается от Button только наличием стиля BS_CHECKBOX (или BS_AUTOCHECKBOX)
← →
arbiter © (2004-02-12 17:18) [2]1. GetClassName не подходит... оно может быть абсолютно любым для окна.
К примеру у Memo, имя класса = TMemo, а контрол тем временем = Edit.
2. Стили также не подходят, поскольку для разных типов контролов имеются стили с одинаковыми значениями.
К примеру BS_CHECKBOX = ES_RIGHT.
← →
clickmaker © (2004-02-12 18:31) [3]
> arbiter © (12.02.04 17:18) [2]
Ну дык, соотвессно у чек бокса будет TCheckBox, у списка TListBox
← →
arbiter © (2004-02-12 18:51) [4]абсолютно необязательно...
у CheckBox может быть как TCheckBox, так и Button (если окно создано функцией DialogBox), так и VasyaPupkinCoolCheckBox.
Я не привязываюсь к VCL, я вообще ни к чему не привязываюсь, у меня есть только Handle, и я хочу определить тип окна (чтобы знать в частности какие сообщения можно этому окну посылать).
← →
Игорь Шевченко © (2004-02-13 09:57) [5]
> Я не привязываюсь к VCL, я вообще ни к чему не привязываюсь,
> у меня есть только Handle, и я хочу определить тип окна
> (чтобы знать в частности какие сообщения можно этому окну
> посылать).
Голову включаем. После этого процесса понимаем, что задача абсолютно невыполнимая в общем случае. Ты можешь посылать сообщения только из того набора, который является общим для всех окон, и то, не всегда успешно, так как оконная процедура конкретного окна может обрабатывать ЛЮБЫЕ сообщения так, как ей заблагорассудится (точнее, как заблагорасудится тому программисту, который ее писал).
← →
arbiter © (2004-02-13 12:41) [6]> Игорь Шевченко © (13.02.04 09:57) [5]
Ты хочешь сказать что различия между окнами сводятся не к каким то их параметрам, а только к оконной процедуре?
И вычислить принадлежность окна к какому либо типу (базовому) можно только проследив цепочку вызовов оконных процедур? Что в общем то не представляется возможным (вернее представляется очень трудоёмким и ненадёжным).
← →
Игорь Шевченко © (2004-02-13 12:46) [7]arbiter © (13.02.04 12:41)
В общем случае - конечно. По Handle ты можешь определить размеры, стили, имя класса, и т.д. - функций много. Но определить гарантировано, что окно будет обрабатывать те или иные сообщения в общем случае ты не можешь.
← →
andry1981 (2004-02-13 14:28) [8]Кстати, у меня возникла подобная проблема.
Нужно определить любое свойство окна (чужой программы), которое его однозначно характеризует.
Пример: моя независимая прога ловит сообщения, когда я работаю в Delphi. Я размещаю компоненты на форме Table класса TTable и DataSet класса TDataSet (такие классы у них в Delphi). Срабатывает сообщение WM_CREATE для окна. Я его обрабатываю и пытаюсь получить параметры. Казалось бы, что GetClassName должно было возвратить мне эти самые класы. Но вся проблема в том, что я получаю в обеих случаях класс TContainer и всё тут.
Кто посоветует, как мне можно различить эти два компонента. Caption у них пустой, а стили и прочие характеристики - одинаковые (кроме хэндлов).
← →
MBo © (2004-02-13 14:33) [9]>andry1981
??? О чем ты?
TTable и TDataSet - не окна, и даже не контролы, а просто классы.
← →
andry1981 (2004-02-13 14:39) [10]Дело в том, что система реагирует на них как на дочерние окна, когда я их размещаю.
← →
Игорь Шевченко © (2004-02-13 14:46) [11]MBo © (13.02.04 14:33)
Имеются в виду значки невизуальных компонентов, насколько я понимаю. Они действительно являются дочерними окнами в режиме Design-time.
← →
MBo © (2004-02-13 15:31) [12]> в режиме Design-time.
А, вот это о чем речь....
← →
andry1981 (2004-02-14 03:57) [13]В принципе у этих окон есть ID, но он везде =0.
Так всё таки, как решить эту проблемку?
Может возможен другой подход?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.031 c