4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
1

Как узнать класс уже созданного окна?

20.11.2014, 06:08. Показов 1895. Ответов 3
Метки нет (Все метки)

C++
1
2
3
4
5
Child=CreateWindow(L"Class1", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
...
Child=CreateWindow(L"Class2", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
...
Child=CreateWindow(L"Class3", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
а потом в функции
C++
1
void f(HWND &Child, HWND Parent, wchar_t *Class);
надо узнать, существует ли вообще Child (это просто, если не NULL, значит существует) и если существует, то какого он класса и сравнить со строкой, переданной в параметр Class. Например,
C++
1
f(Child, Window, L"Class1");
, то в том случае, если было
C++
1
Child=CreateWindow(L"Class1", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
, надо выполнить одни действия, а если
C++
1
Child=CreateWindow(L"Class2", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
, или
C++
1
Child=CreateWindow(L"Class3", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
, то другие. При вызове
C++
1
f(Child, Window, L"Class2");
надо первые действия выполнить, если
C++
1
Child=CreateWindow(L"Class2", NULL , WS_BORDER | WS_CLIPSIBLINGS | WS_CHILDWINDOW | WS_VISIBLE, Left, Top, Width, Height, Window, NULL, (HINSTANCE)GetWindowLongPtr(Window, GWLP_HINSTANCE), NULL);
и вторые во всех остальных случаях. Ну и так далее. Если совпадает, действия одни, а если нет, то другие.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2014, 06:08
Ответы с готовыми решениями:

Узнать класс активного окна - Как?
предварительно класс окон можно узнать например с Spy++, а как быть если приложение, дескриптор...

Как узнать HWND созданного только что SendMessage окна? и желательно без FindWindow
заранее спасибо если чо, то FindWindow почему то не работает. Добавлено через 54 минуты Я...

Как узнать класс окна другого процесса? Желательно найти класс окна по PID процесса
Мне нужно узнать класс другого окна по PID процесса

Как узнать класс окна текущей программы?
Мне нужно узнать класс окна моей программы. Например снимок ниже.

3
шКодер самоучка
2175 / 1882 / 912
Регистрация: 09.10.2013
Сообщений: 4,140
Записей в блоге: 7
20.11.2014, 08:07 2
GetClassName
0
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.11.2014, 08:54  [ТС] 3
А чёрт его знает, какого размера понадобится буфер для lpClassName. Что динамически выделять буфер, длина которого равна длине параметра Class? Хотелось бы без этого. Можно как то вытянуть
C++
1
const wchar_t*
в то место, где хранится регистрационная информация? Мне ведь только сравнить.
0
шКодер самоучка
2175 / 1882 / 912
Регистрация: 09.10.2013
Сообщений: 4,140
Записей в блоге: 7
20.11.2014, 09:38 4
Цитата Сообщение от MSDN
The maximum length for lpszClassName is 256. If lpszClassName is greater than the maximum length, the RegisterClassEx function will fail.
имя класса не может быть длиннее 256 символов
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2014, 09:38
Помогаю со студенческими работами здесь

Как сменить название уже созданного проекта в Qt Creator?

Как получить буфер глубины уже созданного фреймбуфера?
Вопрос в шапке.

Как изменить размер уже созданного массива в классе?
Доброго дня, друзья! Столкнулся с такой проблемой, если вкратце, то выглядит он следующим...

Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию?
Есть класс в котором несколько конструкторов, Мне в некоторых местах нужно создавать объекты класса...

Как узнать имя созданного TImage?
По клику на Image1 - создаю динамически компонент типа TImage. Сколько раз на Image1 кликаю,...

Как получить дескриптор окна, созданного GLFW?
как получить дескриптор окна, созданного GLFW?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru