![]() |
|
|
![]()
|
|
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Создал дочернее окно класса унаследованного от CDialog. Его эдиты не получают фокус от мыши. Как исправить?
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что значит "не получают фокус от мыши"? Ты тыкаешь в поле, а курсор (каретка) туда не устанавливается? Тогда проверь активность полей.
-------------------- ... |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: нет Всего: 1 |
Да, не получают фокус. Активность - это Enabled? Если да, то они активны. Кнопки этого окна фокус получают. И затем можно табуляцией передать фокус эдитам этого окна. Но сразу от мыши они не получают фокус. При этом spy++ показывает, что они получают lbuttondown. Это сообщение отредактировал(а) User008 - 19.10.2010, 01:15 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Кто-то возможно перехватывает клики мыши и они не попадают на обработку в эдиты.
Убери весь код (закомментируй обработчики в карте), которые есть в твоем диалоге, а также PreTranslate и убедись, что все нормально. Короче, начни с "голого" диалога - только поля и никакой обработки. И на всякий случай проверь поведение шаблона в тестовом режиме редактора ресурсов - как там себя ведут поля-эдиты в этом смысле? Потом начинай понемногу наращивать функциональность и ищи, что мешает. Добавлено через 1 минуту и 24 секунды На самом деле Спай показывает, что им посылается LBUTTONDOWN, а вот доходит ли, он знать не может. -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Тоже столкнулся с такой проблемой.
Если окно создается как Child, и у диалога стоит стиль Border:Dialog Frame, то эдиты действительно фокуса не получают, все так, как говорит автор. Обработчиков сообщений пока еще нет никаких, это голый скелет прогаммы и все что в ней есть - создание дочернего окна через Create() и показ/размещение внутри главного окна с помощью SetWindowPos(). Однако, если у окна поставить стиль Border:none, то эта проблема исчезает. Сам не понимаю, в чем дело. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Странно, конечно. Но сочетание DLGFRAME и CHILD само по себе какое-то странное. Если диалог дочерний, то предполагается, что он будет вставлен в какую-то оболочку: в другой диалог, в визард и т.д. Тогда стиль DLGFRAME ему не нужен - там толстая рамка и т.д. Но другой бордюр, Thin, например, скорее всего, будет работать нормально.
А если диалог самостоятельный, то он никак не может быть child... Откуда задача-то возникла? -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Создаем дочерние окошки, по умолчанию без рамок, все торчат внутри главного окна, все отвечают за свой функционал. Короче, это "кирпичики", из которых собирается главное окно приложения. Добавляю возможность настройки пользователем расположения этих "кирпичиков" - кнопочки, по которой окошки обзаводятся рамками, и их можно мышкой перетасовать внутри главного окна. Снова нажимаем кнопочку - окошки "прилипли" на своих местах, рамочки убрались. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Ясно. По взрослому, когда окошки вне главного окна, они должны быть в своих отдельных фреймах. Как MFC делает, когда панель между плавающим и прилипшим состоянием переключается: всегда есть фрейм, а дочерняя панель просто меняет парента. В MFC еще есть промежуточный контейнер, то для обеспечения конкретной задачи достаточно и одного слоя.
-------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |