PDA

Просмотр полной версии : Класс окна #12345 ...



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

Romeo
13.10.2004, 11:27
Это обозначает, что класс регистрировался автоматически какой-нибудь высокоуровневой средой разработки наподобие Delphi или C Builder. Такие среды обыно используют принцип сабклассинга для создания элементов управления, наследующих своё поведение от стандартных элементов управления Windows, причём весь процесс скрывается от конечного програмимиста, что нибы-то должно способствовать облегчению труда последнего. Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они понимают все сообщения своих "прародителей".

RAVEN
20.10.2004, 11:35
Работать с такими контролами нужно точно так же, как и со стандартными элементами управления Windows - они пониют все сообщения своих "прародителей".
Хм. Что-то надпись на пункте выпадающего меню не вытаскивается ни WM_GETTEXT, ни EM_GETLINE. Чем же тогда?

Romeo
20.10.2004, 12:07
Подробнее, пожалуйста.

RAVEN
20.10.2004, 12:33
Все выпадающие меню имеют класс вида #12345 и Вы говорите, что с ними можно работать также как и с остальными окнами, но на сообщения WM_GETTEXT и EM_GETLINE они не реагируют.

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

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