Здравствуйте, уважаемые программисты.
У меня такой вопрос: получаю класс окна с помощью ф-ции GetClassName. Некоторые окна имеют класс вида #xxxxx где x - цифра, такие как выпадающие списки, диалоговые окна и т.п. Может это означает, что эти окна являются "детьми", тогда каким образом работать с ними?
Класс окна #12345 ...
Модераторы: Duncon, Hawk, Romeo, Eugie
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
"Могу" и "Могу, но не знаю как"
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Это обозначает, что класс регистрировался автоматически какой-нибудь высокоуровневой средой разработки наподобие Delphi или C Builder. Такие среды обыно используют принцип сабклассинга для создания элементов управления, наследующих своё поведение от стандартных элементов управления Windows, причём весь процесс скрывается от конечного програмимиста, что нибы-то должно способствовать облегчению труда последнего. Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они понимают все сообщения своих "прародителей".
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Хм. Что-то надпись на пункте выпадающего меню не вытаскивается ни WM_GETTEXT, ни EM_GETLINE. Чем же тогда?Romeo писал(а):Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они пониют все сообщения своих "прародителей".
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
"Могу" и "Могу, но не знаю как"
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Подробнее, пожалуйста.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Все выпадающие меню имеют класс вида #12345 и Вы говорите, что с ними можно работать также как и с остальными окнами, но на сообщения WM_GETTEXT и EM_GETLINE они не реагируют.
У настоящего программиста на вопрос "Можете ли вы написать такую программу" может быть только два ответа:
"Могу" и "Могу, но не знаю как"
"Могу" и "Могу, но не знаю как"
На самом деле здесь всё как раз наоборот. Для работы с объектами Windows, оконные классы которых начинаются со знака "#", в Win32API предусмотрены специальные функции. Так для создания окна диалога существуют специальные функции типа CreateDialog() или DialogBox()...
Для создания выпадающего меню вызывается функция CreatePopupMenu(), а далее текст в него добавляется или считывается тоже с помощью специальных функций: AppendMenu(), GetMenuItemInfo()...
Можно конечно попробовать воспользоваться и обычными функциями типа CreateWindow() и SendMessage(), но такой способ не является документированным. И где гарантия, что такое приложение будет корректно работать в других версиях Windows?
Для создания выпадающего меню вызывается функция CreatePopupMenu(), а далее текст в него добавляется или считывается тоже с помощью специальных функций: AppendMenu(), GetMenuItemInfo()...
Можно конечно попробовать воспользоваться и обычными функциями типа CreateWindow() и SendMessage(), но такой способ не является документированным. И где гарантия, что такое приложение будет корректно работать в других версиях Windows?