Про меню

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Про меню

Сообщение tyomitch » 10.02.2005 (Чт) 12:09

1. Как, имея hMenu подменю, найти hMenu его родителя?
2. Как, имея hMenu подменю (произвольного уровня) меню окна, узнать какому окну оно принадлежит?
3. Как узнать по hMenu, системное ли это меню, или обычное?
Изображение

Павел C
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 31.01.2005 (Пн) 14:39

Сообщение Павел C » 10.02.2005 (Чт) 13:31

Здравствуйте.
Не могли бы подсказать кто сталкивался в программировании нестандартных окон для Windows (пример окно о том тчо ReGet не зарегистрирован, оно имеет красочное оформление , непрямоугольную форму, отсутсвуют стандартные значки закрыть и т.д. т.е. фактически представлен разработанный интерфейс отличный от стандартного Windows) как собственно они делаются.
2. Возможно ли создать редактор конструирования таких окон, т.е. как пример требуется пользователю сотворить нечто подобное нестандартной форму (ну к примеру круглое меню с кнопкой ОК по середине, само меню залито какой нибудь текстурой из одного БМП файла в левой своей части и текстурой из второго БМП файла в правой своей части).
3. Как приделать в VB обработку, например, нажатия такой клавиши.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.02.2005 (Чт) 14:23

MenuItemFromPoint это конечно круто :)

1. Помоему только перебирая все меню и находя такого, который связан с нужным hMenu.

2. Опять таки, подняться доверху, запомнить hMenu, а затем перебрать все окна в системе и сравнить MenuBarInfo.hMenu с сохраненным.

3. Аналогично :)
Т.е. получить системный hMenu окна и сравнить его с текущим.

Может есть и более прямые пути, но я их не нашел.
Lasciate ogni speranza, voi ch'entrate.

KDima
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 759
Зарегистрирован: 14.07.2004 (Ср) 23:14
Откуда: СПб

Re: Про меню

Сообщение KDima » 10.02.2005 (Чт) 15:26

tyomitch писал(а):1. Как, имея hMenu подменю, найти hMenu его родителя?
2. Как, имея hMenu подменю (произвольного уровня) меню окна, узнать какому окну оно принадлежит?
3. Как узнать по hMenu, системное ли это меню, или обычное?


А вы еще и вопросы задаёте! :shock: :D
Хороший прогер не тот, кто всё знает, хороший прогер знает, где найти знание.

Последний раз редактировалось: Administrator (15.07.2004 (Вт) 00:01), всего редактировалось 999 раз(а)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.02.2005 (Чт) 15:37

Да, это он умеет :)

Тёмыч, ты же как-то казал недокументированные структуры, в которых есть hParent у менюшки. Либо ходи туда, либо см. alibek:)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 10.02.2005 (Чт) 15:54

Метод alibek-а какой-то уж черезчур лобовой. Неужели нет документированного пути?

Глядя в недокументированные структуры, я увидел, что (поскольку только один каскад меню может быть активен одновременно) при показе меню его hWnd сохраняется в глобальную переменную, а потом при клике оттуда читается. Т.е. ответ на вопрос №2 - "похоже, никак".

Вопрос сужается до "как документированными способами узнать родителя подменю". Может, можно?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.02.2005 (Чт) 15:58

Я так думаю, что мелкософтовцы исходили примерно из того, что
- если меню твоё, ты и сам знаешь, кто там где
- если меню не твоё, то нафига тебе это вообще знать.

Даже не знаю куда тебя послать. В ресурсы, тырить менюшку оттуда? Слабое и бесполезное утешение :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.02.2005 (Чт) 16:37

К тому же, не всегда менюшка находится в ресурсах, она может генерироваться в runtime :)
Метод, что называется, в лоб, кто же спорит. Только вот первый взгляд на MSDN ничего другого не говорит. Хотя наверняка есть более прямые, но менее документированные пути.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.02.2005 (Чт) 16:40

Опа! :) Vi пришел, может он знает?
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение tyomitch » 10.02.2005 (Чт) 18:49

Так, всё печально...
У меню нет ссылки на родителя.
У меню окна (но не у его подменю) есть ссылка на это окно, т.ч. можно было бы узнать окно-владельца меню и без перебора. Но - не удаётся: на моей Win2000 эта ссылка ведёт в Kernel-Space, т.е. читать по ней нельзя. А жаль :-(

Итак, на все три вопроса ответ "никак". Тему можно считать прикрытой...
Изображение


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 160

    TopList