Активация MDI окон

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Активация MDI окон

Сообщение xolod » 27.11.2004 (Сб) 3:57

Активирую MDI окна, как учит прорицатель-MSDN:
Код: Выделить всё
SendMessage MDIForm.hwnd, WM_MDIACTIVATE, ChildForm.hwnd, 0&


А в ответ... тишина. Часа 4 уже сижую, маюсь (по времени сообщения видно), ничего придумать не могу. Даже ActivateWindow, SetForegroundWindow и т.п. методы, здесь не уместные, перепробовал.. Ничего :?..

Извечный вопрос - "Что делать :?: "

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 27.11.2004 (Сб) 4:59

Может это то что надо
Код: Выделить всё
Private Declare Function SetActiveWindow Lib "user32.dll" (ByVal hwnd As Long) As Long


:wink:
Max!

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.11.2004 (Сб) 14:57

Написал же, что пробовал методы, не имеющие никакого отношения к MDI, они ессесено не работают, как и твой :?

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 27.11.2004 (Сб) 19:57

Дочернее окно у тебя загружено\не загружено\минимизировано? В каком оно состоянии на момент посылки сообщения?

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 27.11.2004 (Сб) 20:20

И чего ты хочешь добиться при помощи WM_MDIACTIVATE?
Если надо сделать, чтобы дочерняя форма вылезла вперед и получила фокус, для этого есть FrmChild1.ZOrder

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.11.2004 (Сб) 21:46

Юстас писал(а):Дочернее окно у тебя загружено\не загружено\минимизировано? В каком оно состоянии на момент посылки сообщения?

Издеваешься, да? 8)


ZOrder тут не причем, потому что я все функции работы с MDI перехватываю и своими заменяю... Я разобрался, в MSDN по поводу WM_MDIACTIVATE ошибочка закралась, саппорт microsoft помог.
Как говориться, Case Closed

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 27.11.2004 (Сб) 22:13

С чего ты взял, что издеваюсь :( Ты ведь не сказал, чего хочешь добиться, вот и заставляешь гадать. И чего ты вообще ожидал от SendMessage? Если вернула ноль - значит дошло твоё сообщение, а то что у тебя ничего не происходит, так никто и не обещал, что будет происходить. Чтобы происходило, надо в оконной процедуре реагировать на сообщение, а не пропускать его мимо ушей.

И если разобрался, то хотя бы сказал, что да как. А то ценность твоего топика для окружающих приближается к нулю.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.11.2004 (Сб) 22:49

Во первых, когда API функция (любая) возвращает 0, значит как раз то, что она не дошла или с ошибкой работу окончила.. Тебе MSDN читать надо :wink:

Во вторых, что я хотел добиться, вполне ясно описал. Как активировать (вывести на передний план, если хочешь) MDI.

И в третьих,
ошибка была у меня в константе WM_MDIACTIVATE, она должна быть
Const WM_MDIACTIVATE = &H222

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 27.11.2004 (Сб) 22:49

Во первых, когда API функция (любая) возвращает 0, значит как раз то, что она не дошла или с ошибкой работу окончила.. Тебе MSDN читать надо :wink:

Во вторых, что я хотел добиться, вполне ясно описал. Как активировать (вывести на передний план, если хочешь) MDI child.

И в третьих,
ошибка была у меня в константе WM_MDIACTIVATE, она должна быть
Const WM_MDIACTIVATE = &H222

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 28.11.2004 (Вс) 0:17

xolod писал(а):Во первых, когда API функция (любая) возвращает 0, значит как раз то, что она не дошла или с ошибкой работу окончила.. Тебе MSDN читать надо


Позволь не согласиться, что ноль - это ошибка :) Тем более с тем, что для любой функции :)))) И неплохо бы прочесть о MDIACTIVATE:

If an application sends this message to an MDI client window, the return value is zero.
An MDI child window should return zero if it processes this message.

И это сообщение никак не выведет тебе окно на передний план и ничего с этим окном не сделает, пусть даже и 222h. Кстати, я изначально попробовал именно 222. Никакой реакции не будет на твоё сообщение. Оно просто пройдёт сквозняком через WndProc и сгинет в глубинах DefWindowProc, оставшись не обработанным. Чтобы произошло что-либо, по сообщению MDIACTIVATE должен быть записан код, производящий что-либо с Child окном. Хотя бы BringWindowToTop или что-либо ещё.

Так что действительно, MSDN читать надо. Вот только кому? :)

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 28.11.2004 (Вс) 1:04

Ясный пень что она 0 возвращает, потому как сообщение поставлено на обработку (и не факт что оно дойдет). А я что написал в предыдущем посте :twisted:. ?!

И забей на функции вывода на передний план, типа BringWindowToTop, они для MDI мягко говоря бесполезны...

зы: и про MSDN не надо меня лечить :evil:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.11.2004 (Вс) 10:37

xolod писал(а):Во первых, когда API функция (любая) возвращает 0, значит как раз то, что она не дошла или с ошибкой работу окончила..

Сие - неправда... Возьми, например, CoCreateGuid (первое что в голову пришло).

Функций "returns zero if successful" и "returns non-zero if successful" в Win32API примерно поровну ;-)

Плюс ещё есть OpenFile-и-комапния, возвращающая при ошибках -1. :shock:
Изображение

Юстас
Бывалый
Бывалый
 
Сообщения: 200
Зарегистрирован: 24.10.2003 (Пт) 5:05

Сообщение Юстас » 28.11.2004 (Вс) 13:53

tyomitch
Не надо его лечить.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList