Страница 1 из 1
Класс окна #12345 ...
Добавлено: 12 окт 2004, 17:25
RAVEN
Здравствуйте, уважаемые программисты.
У меня такой вопрос: получаю класс окна с помощью ф-ции GetClassName. Некоторые окна имеют класс вида #xxxxx где x - цифра, такие как выпадающие списки, диалоговые окна и т.п. Может это означает, что эти окна являются "детьми", тогда каким образом работать с ними?
Добавлено: 13 окт 2004, 11:27
Romeo
Это обозначает, что класс регистрировался автоматически какой-нибудь высокоуровневой средой разработки наподобие Delphi или C Builder. Такие среды обыно используют принцип сабклассинга для создания элементов управления, наследующих своё поведение от стандартных элементов управления Windows, причём весь процесс скрывается от конечного програмимиста, что нибы-то должно способствовать облегчению труда последнего. Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они понимают все сообщения своих "прародителей".
Добавлено: 20 окт 2004, 11:35
RAVEN
Romeo писал(а):Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они пониют все сообщения своих "прародителей".
Хм. Что-то надпись на пункте выпадающего меню не вытаскивается ни WM_GETTEXT, ни EM_GETLINE. Чем же тогда?
Добавлено: 20 окт 2004, 12:07
Romeo
Подробнее, пожалуйста.
Добавлено: 20 окт 2004, 12:33
RAVEN
Все выпадающие меню имеют класс вида #12345 и Вы говорите, что с ними можно работать также как и с остальными окнами, но на сообщения WM_GETTEXT и EM_GETLINE они не реагируют.
Добавлено: 04 фев 2005, 15:58
WinMain
На самом деле здесь всё как раз наоборот. Для работы с объектами Windows, оконные классы которых начинаются со знака "#", в Win32API предусмотрены специальные функции. Так для создания окна диалога существуют специальные функции типа CreateDialog() или DialogBox()...
Для создания выпадающего меню вызывается функция CreatePopupMenu(), а далее текст в него добавляется или считывается тоже с помощью специальных функций: AppendMenu(), GetMenuItemInfo()...
Можно конечно попробовать воспользоваться и обычными функциями типа CreateWindow() и SendMessage(), но такой способ не является документированным. И где гарантия, что такое приложение будет корректно работать в других версиях Windows?