Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CEdit'ы в дочернем окне, Не получают фокус от мыши 
:(
    Опции темы
User008
Дата 17.10.2010, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создал дочернее окно класса унаследованного от CDialog. Его эдиты не получают фокус от мыши. Как исправить?
PM MAIL   Вверх
Earnest
Дата 18.10.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Что значит "не получают фокус от мыши"? Ты тыкаешь в поле, а курсор (каретка) туда не устанавливается? Тогда проверь активность полей.


--------------------
...
PM   Вверх
User008
Дата 19.10.2010, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Earnest @  18.10.2010,  09:07 Найти цитируемый пост)
Что значит "не получают фокус от мыши"? Ты тыкаешь в поле, а курсор (каретка) туда не устанавливается? Тогда проверь активность полей.

Да, не получают фокус. Активность - это Enabled? Если да, то они активны. Кнопки этого окна фокус получают. И затем можно табуляцией передать фокус эдитам этого окна. Но сразу от мыши они не получают фокус. При этом spy++ показывает, что они получают lbuttondown.

Это сообщение отредактировал(а) User008 - 19.10.2010, 01:15
PM MAIL   Вверх
Earnest
Дата 22.10.2010, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Кто-то возможно перехватывает клики мыши и они не попадают на обработку в эдиты.
Убери весь код (закомментируй обработчики в карте), которые есть в твоем диалоге, а также PreTranslate и убедись, что все нормально.
Короче, начни с "голого" диалога - только поля и никакой обработки. И на всякий случай проверь поведение шаблона в тестовом режиме редактора ресурсов - как там себя ведут поля-эдиты в этом смысле? Потом начинай понемногу наращивать функциональность и ищи, что мешает.

Добавлено через 1 минуту и 24 секунды
Цитата(User008 @  19.10.2010,  01:57 Найти цитируемый пост)
 При этом spy++ показывает, что они получают lbuttondown.

На самом деле Спай показывает, что им посылается LBUTTONDOWN, а вот доходит ли, он знать не может.


--------------------
...
PM   Вверх
Dreamer_0x01
Дата 14.12.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Тоже столкнулся с такой проблемой.

Если окно создается как Child, и у диалога стоит стиль Border:Dialog Frame, то эдиты действительно фокуса не получают, все так, как говорит автор.
Обработчиков сообщений пока еще нет никаких, это голый скелет прогаммы и все что в ней есть - создание дочернего окна через Create() и показ/размещение внутри главного окна с помощью SetWindowPos().

Однако, если у окна поставить стиль Border:none, то эта проблема исчезает.
Сам не понимаю, в чем дело.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 16.12.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Странно, конечно. Но сочетание DLGFRAME и CHILD само по себе какое-то странное. Если диалог дочерний, то предполагается, что он будет вставлен в какую-то оболочку: в другой диалог, в визард и т.д. Тогда стиль DLGFRAME ему не нужен - там толстая рамка и т.д. Но другой бордюр, Thin, например, скорее всего, будет работать нормально.
А если диалог самостоятельный, то он никак не может быть child...
Откуда задача-то возникла?


--------------------
...
PM   Вверх
Dreamer_0x01
Дата 17.12.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


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

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



Цитата

Откуда задача-то возникла?


Создаем дочерние окошки, по умолчанию без рамок, все торчат внутри главного окна, все отвечают за свой функционал. Короче, это "кирпичики", из которых собирается главное окно приложения.
Добавляю возможность настройки пользователем расположения этих "кирпичиков" - кнопочки, по которой окошки обзаводятся рамками, и их можно мышкой перетасовать внутри главного окна. Снова нажимаем кнопочку - окошки "прилипли" на своих местах, рамочки убрались.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Earnest
Дата 20.12.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Ясно. По взрослому, когда окошки вне главного окна, они должны быть в своих отдельных фреймах. Как MFC делает, когда панель между плавающим и прилипшим состоянием переключается: всегда есть фрейм, а дочерняя панель просто меняет парента. В MFC еще есть промежуточный контейнер, то для обеспечения конкретной задачи достаточно и одного слоя.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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