Класс окна #12345 ...

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
RAVEN
Сообщения: 10
Зарегистрирован: 08 окт 2004, 11:20
Откуда: Москва

12 окт 2004, 17:25

Здравствуйте, уважаемые программисты.
У меня такой вопрос: получаю класс окна с помощью ф-ции GetClassName. Некоторые окна имеют класс вида #xxxxx где x - цифра, такие как выпадающие списки, диалоговые окна и т.п. Может это означает, что эти окна являются "детьми", тогда каким образом работать с ними?
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

13 окт 2004, 11:27

Это обозначает, что класс регистрировался автоматически какой-нибудь высокоуровневой средой разработки наподобие Delphi или C Builder. Такие среды обыно используют принцип сабклассинга для создания элементов управления, наследующих своё поведение от стандартных элементов управления Windows, причём весь процесс скрывается от конечного програмимиста, что нибы-то должно способствовать облегчению труда последнего. Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они понимают все сообщения своих "прародителей".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
RAVEN
Сообщения: 10
Зарегистрирован: 08 окт 2004, 11:20
Откуда: Москва

20 окт 2004, 11:35

Romeo писал(а):Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они пониют все сообщения своих "прародителей".
Хм. Что-то надпись на пункте выпадающего меню не вытаскивается ни WM_GETTEXT, ни EM_GETLINE. Чем же тогда?
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

20 окт 2004, 12:07

Подробнее, пожалуйста.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
RAVEN
Сообщения: 10
Зарегистрирован: 08 окт 2004, 11:20
Откуда: Москва

20 окт 2004, 12:33

Все выпадающие меню имеют класс вида #12345 и Вы говорите, что с ними можно работать также как и с остальными окнами, но на сообщения WM_GETTEXT и EM_GETLINE они не реагируют.
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

04 фев 2005, 15:58

На самом деле здесь всё как раз наоборот. Для работы с объектами Windows, оконные классы которых начинаются со знака "#", в Win32API предусмотрены специальные функции. Так для создания окна диалога существуют специальные функции типа CreateDialog() или DialogBox()...
Для создания выпадающего меню вызывается функция CreatePopupMenu(), а далее текст в него добавляется или считывается тоже с помощью специальных функций: AppendMenu(), GetMenuItemInfo()...

Можно конечно попробовать воспользоваться и обычными функциями типа CreateWindow() и SendMessage(), но такой способ не является документированным. И где гарантия, что такое приложение будет корректно работать в других версиях Windows?
Ответить