Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> имеем окно. нужно держать другое окно поверх него 
:(
    Опции темы
holmes
Дата 10.10.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



первое окно - форма

далее создается несколько окон CreateWindowEx(ws_ex_layered + ws_ex_toolwindow + ws_ex_noparentnotify + ws_ex_acceptfiles)
wndClass->style = CS_DBLCLKS + CS_OWNDC;

окна позиционируются на первом и должны оставаться всегда поверх него (как дочерние, но без стиля ws_child чтобы их можно было вытащить с первого окна)

подскажите как сделать.

сейчас использую
SetWindowLong(hWnd, GWL_HWNDPARENT, ParentHWnd) - для присоединения
и SetWindowLong(hWnd, GWL_HWNDPARENT, 0) - для отсоединения

Есть еще одна задача: необходимо как-то активировать главное окно (выводить на передний план и передавать фокус ввода) с сохранением вышеописанного функционала.

Заранее благодарен за помощь.
PM MAIL   Вверх
EnergoHokum
Дата 10.10.2008, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотри тут. Может, подойдёт?
PM MAIL ICQ   Вверх
holmes
Дата 10.10.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



насчет BringWindowToTop не помню но наверняка уже пробовал (для активации), но дело не в этом

мне как раз и нужно выстроить z-последовательность и сохранять ее в нужном порядке
я выставляю ее при помощи функции deferWindowPos (если устанавливать по SetWindowPos, то будет работать долго, неприемлемо для моего приложения)
выставляю в массив для defer позицию 0xffffffff сначала для главного окна и следом для остальных
но получаю ситуацию что иногда некоторые из окон оказываются под главным.

я даже пробовал что-то вроде реакции на wm_windowposchanging и возвращал свой параметр в качестве zorder, не помогло, а может не так что-то делал, документации-то как весь zordering работает нет ...

пример того как надо - ObjectDock, он кроме главного окна и дополнительных окон каждого пункта (иконки) создает еще столько же окон (для каждого пункта) с именем класса ZOrderWindow (или что-то типа того, не суть). Из названия просто не может быть непонятно что он использует эти окна для достижения эффекта, который мне нужен, но вот как ?...

Просто последнее что я могу сделать это поставить хук на все оконные сообщения ObjectDock'а (например используя APIMonitor) и смотреть что происходит, но потом лог разбирать ... жуть
PM MAIL   Вверх
Andrey44
Дата 10.10.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



holmes, лови и обрабатывай WM_WINDOWPOSCHANGING .



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 10.10.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



все просто, для этого нужно все остальные окна, которые должны всегда быть поверх первичного, создавать со стилем WS_POPUP, а в hwndParent ставить им дескриптор этого самого - первичного окна. WS_POPUP для этого как раз и предназначен.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
holmes
Дата 15.10.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



окна я и так создаю с ws_popup и ставлю им hwndParent, но не помогает ...

а по поводу обработки WM_WINDOWPOSCHANGING я написал что уже пробовал (см. 3 пост), тоже не помогло, объясните как
PM MAIL   Вверх
Andrey44
Дата 15.10.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Izvinite za takoy tekst, na mashine net russkogo yazika.
Kak vi obrabativali WM_WINDOWPOSCHANGING ?
Posmotrite na strukturu WINDOWPOS.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
holmes
Дата 15.10.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



обрабатывал примерно так:

возвращал в hwndInsertAfter для главного окна например $fffffffd а для окошек пунктов $fffffffe

еще вроде пробовал получать hwndInsertAfter из сообщения главного окна и ставить для окошек пунктов hwndInsertAfter  + 1
эффект отсутствует, точнее присутствует, но стало еще хуже (не поддается описанию)

что бы еще такое придумать ?...
PM MAIL   Вверх
GremlinProg
Дата 16.10.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(holmes @  15.10.2008,  11:02 Найти цитируемый пост)
окна я и так создаю с ws_popup и ставлю им hwndParent, но не помогает ...

что значит не помогает, открой фотошоп, и посмотри на поведение его окошек-панелек, это как раз попап-панельки, если сомневаешься, запусти Spy, проверь стили своих окошек.
проблема может крыться только в двух вещах: либо ты перекрываешь установку слилей, затирая попап, либо перекрываешь установку родителя в CreateWindow/Ex. В обоих случаях, если не учесть хоть одно условие, поведение окна уже не будет попап.

PS: SetWindowLong - не всегда то же самое, что указать стили при создании окна, тебе нужно создать окно со стилем popup, а не установить этот стиль после создания окна


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
holmes
Дата 17.10.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я писал что SetWindowLong я использую только для указания родителя (wndParent), стиль я не меняю по ходу работы программы

хотя ... может и указание родителя может портить мне жизнь?


а еще может следующая вещь:

я так и не смог активировать главное окно программы при помощи BringWindowToTop, SetForegroundWindow и т.п., поэтому делаю это устанавливая главному окну и всем окошкам пунктов HWND_TOPMOST и следом сразу HWND_NOTOPMOST (при этом если не делать этого для окошек пунктов то они хоть и имеют родителя = главное окно, но все равно под него проваливаются)

вобщем если у кого появятся мысли буду оч благодарен, а так ... буду шаманить на выходных ... потом отпишу
PM MAIL   Вверх
holmes
Дата 27.10.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



положительных результатов нет
PM MAIL   Вверх
HumanAPI
Дата 4.11.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А просто диалог сделать нельзя?

Примерно так(кусок моего кода извеняюсь не стал править)
 hMgr = CreateDialogParam((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),
                             "DialogMenedgerObj", hWnd, DlgMenedgerObjProc, (LPARAM)this); 
ну и в ресурсах
DialogMenedgerObj DIALOGEX 6,5,112,214
CAPTION "Менеджер объектов"
FONT 8,"MS Sans Serif",0,0
STYLE 0x10C30000
EXSTYLE 0x00000080
BEGIN
  CONTROL "",301,"ListBox",0x5021094B,2,3,108,126,0x00000200
  CONTROL "Вид",ID_OBJ_VIEW,"Button",0x50010000,4,149,48,13
  CONTROL "Скрыть",ID_OBJ_SEEN,"Button",0x50010000,4,166,48,13
  CONTROL "Удалить",ID_OBJ_DELETE,"Button",0x50010000,58,166,48,13
  CONTROL "Объеденить",ID_OBJ_UNIT,"Button",0x50010000,58,182,48,13
  CONTROL "Показать",ID_VISIBLE,"Button",0x50010000,4,182,48,13
  CONTROL "Копировать",ID_OBJ_COPY,"Button",0x50010000,58,149,48,13
  CONTROL "",302,"ComboBox",0x10010043,2,132,108,67
  CONTROL "Трансформировать",ID_OBJ_TRANS,"Button",0x50010000,6,199,100,13
END


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


Новичок



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

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



ммм ... нет. не в моем случае

продолжаю  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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