Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.18;
Скачать: CL | DM;

Вниз

Как определить тип окна?   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2004.04.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1080798454
MaD
2004-04-01 09:47
2004.04.18
Отображение ДОС текскта в RichEdit в Win2000


1-1080554108
tytus
2004-03-29 13:55
2004.04.18
StringGrid_


7-1076832791
yorik
2004-02-15 11:13
2004.04.18
Подсказка в трее.


3-1079447433
Andriy Tysh
2004-03-16 17:30
2004.04.18
Group in DBGrid (DBGridEh)


14-1079942353
Болельщик
2004-03-22 10:59
2004.04.18
Вчера в КВН