window class name --> ATOM
В системе зарегистрирован локальный оконный класс. Имеется его имя. Как по этому имени получить ATOM этого класса? Функции типа GetClassLong() требуют HWND окна, но оно неизвестно, хотя окна этого класса где-то тоже есть.
Пробовал FindAtom(), но он возращает 0 с ошибкой 2 (по данным GetLastError() ). Что еще можно сделать?
В системе зарегистрирован локальный оконный класс. Имеется его имя. Как по этому имени получить ATOM этого класса? Функции типа GetClassLong() требуют HWND окна, но оно неизвестно, хотя окна этого класса где-то тоже есть.
Пробовал FindAtom(), но он возращает 0 с ошибкой 2 (по данным GetLastError() ). Что еще можно сделать?[/QUOTE]
Поправка. Окон этого класса может и не быть. Если бы были, то можно было бы:
Код:
result = GetClassLong( FindWindow( className, NULL), GCW_ATOM );
Код:
[INDENT]WNDCLASSEX wcex;
GetClassInfoEx(NULL,"EDIT",&wcex);
wcex.cbSize=sizeof(WNDCLASSEX);
ATOM a=RegisterClassEx(&wcex);
[/INDENT]
GetClassInfoEx(NULL,"EDIT",&wcex);
wcex.cbSize=sizeof(WNDCLASSEX);
ATOM a=RegisterClassEx(&wcex);
[/INDENT]
Кстати GetClassInfoEx сама по себе возвращает атом класса:confused: .
[quote=k3Eahn]
Кстати GetClassInfoEx сама по себе возвращает атом класса:confused:
[/quote]
А откуда информация про то, что GetClassInfoEx() возвращает ATOM? В MSDN написано, что возвращается BOOL. Если она действительно возвращает ATOM, это было бы очень клево, но где найти подтверждение этому?
-такие вещи определяются опытным путем, не долго же проверить
[/quote]
Вернёт, или возвращает?
Определение опытным путем таких вещей влечет за собой серьезные ошибки в дальнейшем. На мой взгляд.
[quote=k3Eahn]
Вернёт, или возвращает?
[/quote]
Возвращает. Только вместо "edit" используется строка "internalDialog...."
Это естественно. В первый раз, когда ты пытаешься выполнить RegisterClassEx, система создает локальный класс (переопределяющий системный). Если же попытаться вслед за этим сделать еще один такой вызов, то перерегистрация существующего класса генерирует ошибку.
В моей задаче класс (локальный для приложения) уже создан, и поэтому вызов RegisterClassEx() ошибочен.
не может тут быть никаких серъезных ошибок, ригистрируешь класс в одной проге, пытаешься вызвать GetClassInfoEx из другой, приводишь типы выводишь результат и все! и не документированные моменты вполне нормально выявлять опытным путем
В моей задаче класс (локальный для приложения) уже создан, и поэтому вызов RegisterClassEx() ошибочен.[/quote]
По всей видимости это так.
ЗЫ: Положим ты получил атом, но что ты с ним будешь делать дальше?(я вот никак не пойму - зачем он может понадобиться).
Да вот уж так сложилось, что регистрация и/или поиск (нетривиальная задача) нужного класса осуществляется в отдельной фукнции, которая возвращает атом. Потом, при создании окна, этот атом и юзается.