Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
8-1071501250
kopcap
2003-12-15 18:14
2004.04.18
Перерисовка кадров


14-1080044560
ИМХО
2004-03-23 15:22
2004.04.18
Задачка для шахматистов: хохотал 5 минут


1-1080979504
NIK57
2004-04-03 12:05
2004.04.18
Не работает прога без установки Delphi


1-1081030524
LORDMAXX
2004-04-04 02:15
2004.04.18
Как добавить в TScrollBox Items


1-1080550890
tytus
2004-03-29 13:01
2004.04.18
StringGrid_





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский