![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Окно верхнего уровня имеет фокус ввода при этом заголовок окна находящегося под этим окном также остается активным!
Вот, что странно, цитата из мануала по WinAPI:
Таким образом, словесно смоделируем ситуацию: Предположим, что существует главное окно приложения (окно №0). По нажатию на UI элемент которого создается окно №1 со стилем: WS_OVERLAPPED | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, и Ex-стилем: WS_EX_LEFT | WS_EX_LTRREADING | WS_EX_RIGHTSCROLLBAR | WS_EX_CONTROLPARENT. А уже на этом окне, в свою очередь создается поле ввода, окно №3 со стилем: WS_CHILD… Parent окна №1, в этом примере – десктоп. В итоге у нас получается всплывающий поп-ап содержащий текстфилд, имеющий фокус ввода, но окно №0 при этом не окрашивается как не активное. Реализовано данное, без каких либо хаков заголовков окон, хуков и прочих жесточайших способов. Меня в данном случае вгоняет в ступор в работающем примере на мой взгляд описано полное противоречие того что сказано в документации WinAPI. Этот работающий пример я прикрепил в аттач. Моя задача реализовать тоже самое но на нейтив коде, а для этого я должен понять логику создания этой замысловатой окноной системы. Прошу помочь, о гуру!!! P.S Именно то, что я описывал - третий комбобокс. Это сообщение отредактировал(а) vaddsm - 19.7.2008, 08:51 Присоединённый файл ( Кол-во скачиваний: 10 )
CustomComboDemo_v2.zip 34,41 Kb |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Тему закрываю, так как решение нашел. В приведенном примере в действительности окно главной формы после создания попап окна оставалось не активным. Визуально можно наблюдать некоторое перемигивание заголовка главной формы, такой эффект возникает как следствие потери окном активного состояния, но чтобы окно КАЗАЛОСЬ активным ему (видимо) отправляется сообщение WM_NCACTIVATE, wParam = TRUE. DefWindowProc съедает такое сообщение и рисует активный заголовок и рамку окна.
Но гадкий эффект мерцания создает впечатление некоторой незавершенности и не профессиональности. В свою очередь пошел немного дальше и решил избавится от мерцания путем подмены параметра wParam сообщения WM_NCACTIVATE. Вот сыроватый пример на API приложения из 3-х окон, в котором реализовано то, о чем я говорил.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |