Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Окно по точке, Почему получаю разные результаты 
:(
    Опции темы
merz
Дата 4.6.2002, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



Для получения окна по точке существуют 2 функции
WindowFromPoint и ChildWindowFromPoint.
Мне необходимо получить дочернее окно в заданной точке.
Если родительское окно находится поверх остальных, то следующий код работает корректно:
Код

HWND hOutputText = WindowFromPoint(point);

Но оно может находится и не наверху!
Поэтому пишем следующий код:
Код

HWND hwndCurrWnd = NULL;
HWND hwndPrevWnd = this->m_hWnd;
hwndCurrWnd = ::ChildWindowFromPoint(hwndPrevWnd, point);
while (hwndCurrWnd != hwndPrevWnd)
{
hwndPrevWnd = hwndCurrWnd;
hwndCurrWnd = ::ChildWindowFromPoint(hwndPrevWnd, point);
}
return hwndPrevWnd;

но он возвращает совершенно другой результат!
В чем здесь собака зарыта?
С Уважением, Merz.
PM MAIL YIM   Вверх
suborg
Дата 4.6.2002, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.4.2002
Где: Москва

Репутация: нет
Всего: нет



По-моему там если окно перекрыто другим окном, то оно не находится.
PM MAIL WWW ICQ   Вверх
merz
Дата 4.6.2002, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



В WindowFromPoint  так оно и есть
но ChildWindowFromPoint находится...
PM MAIL YIM   Вверх
Sheff
Дата 4.6.2002, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



ChildWindowFromPoint берёт хэндл дочернего окна по хэндлу родительского окна и точке. Но если твоё родительское окно закрыто другими окнами(который тоже являются родительскими), как же ты возьмёшь его хэндл с помощью ChildWindowFromPoint, ведь оно не является ни для кого дочерним.


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
merz
Дата 5.6.2002, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



То есть, как я понял, ты хочешь сказать что у окна бывают 2 родителя?? Оригинально!
PM MAIL YIM   Вверх
Sheff
Дата 5.6.2002, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Цитата(merz @ 05.6.2002, 12:35)
То есть, как я понял, ты хочешь сказать что у окна бывают 2 родителя?? Оригинально!

Я хочу сказать, что то твоё окно(родительское) не является ни для кого дочерним, разве что может для Explorer'а.


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
merz
Дата 5.6.2002, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



Ну и что?
Дескриптор этого окна у меня есть:
Код

HWND hwndPrevWnd = this->m_hWnd;

PM MAIL YIM   Вверх
Sheff
Дата 5.6.2002, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Цитата(merz @ 05.6.2002, 12:57)
Ну и что?
Дескриптор этого окна у меня есть:
Код

HWND hwndPrevWnd = this->m_hWnd;

А зачем тогда цикл, если ты знаешь хэндл этого самого родительского окна, разве нельзя взять Child вот так:
Код

HWND hwndPrevWnd = this->m_hWnd;
hwndCurrWnd = ::ChildWindowFromPoint(hwndPrevWnd, point);

hwndCurrWnd - будет хэндлом дочернего окна.


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
merz
Дата 5.6.2002, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



То будет потомок - лежащий на самом дне z-буффера, а мне надо получить тот, что на самом верху (то есть ближе всего к нам)
PM MAIL YIM   Вверх
Sheff
Дата 5.6.2002, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Цитата(merz @ 05.6.2002, 13:07)
То будет потомок - лежащий на самом дне z-буффера, а мне надо получить тот, что на самом верху (то есть ближе всего к нам)

Ааа, так у тебя в этом окне ещё и куча чаилдов, которые друг друга перекрывают. Если ты хочешь взять самого "верхнего" чайлда, то не лучше ли юзать GetWindow с флагом GW_CHILD ?


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
merz
Дата 6.6.2002, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



Вобщем, пожоже разобрался я в этой проблеме..
Все дело в том, что окошко нужное - поле ввода на апплете
И как показал Spy++ у апплета нет родителя...
PM MAIL YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.