MENU

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tigrix
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 20.01.2004 (Вт) 23:05

MENU

Сообщение tigrix » 21.01.2004 (Ср) 18:40

Подскажите плиз кто знает как отследить HWND Меню НЕ мышкой, а когда оно появится.

как активное окно. :?

SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Сообщение SBJocker » 22.01.2004 (Чт) 0:10

Я могу тебе сказать только одно: меню это не окно! И соответственно hWnd у него нет...

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 22.01.2004 (Чт) 1:52

SBJocker писал(а):Я могу тебе сказать только одно: меню это не окно! И соответственно hWnd у него нет...

Тут вы заблуждаетесь, в винде все объекты являются окнами, и у всего есть свой hwnd, даже у меню, даже у надписи под значками на рабочем столе.
Зная hwnd окна, хэндл его меню получаешь с пом. ф-и GetMenu, его подпункты GetSubMenu. А системное меню окна с пом GetSystemMenu.

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

Сообщение GSerg » 22.01.2004 (Чт) 11:03

hWnd девайс контекста в студию, плз...
Равно как hWnd меню, кистей, перьев, элементов листбоксов, комбобоксов, текстбоксов, лист- и тривьюшек, регионов,..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SBJocker
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 124
Зарегистрирован: 19.01.2004 (Пн) 16:57

Сообщение SBJocker » 22.01.2004 (Чт) 11:27

Вот вам выдержка из Win32 API for Profesonals: "Меню - один из немногих объектов, которые отображаются на экране, но не являются окнами. Это означает, что у меню нет ни манипулятора окна, ни функций окна. Внешний вид и позиция менб полностью определяется средой Windows"

Вот так - то!

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 22.01.2004 (Чт) 11:34

GSerg писал(а):hWnd девайс контекста в студию, плз...
Равно как hWnd меню, кистей, перьев, элементов листбоксов, комбобоксов, текстбоксов, лист- и тривьюшек, регионов,..

Смотрю и удивляюсь, чесслово, вроде Гуру а таких вещей не знает...
Ну подумаешь написал hwnd а не Handle. А окном в винде можно назвать любой объект, и у каждого объекта есть свой хэндл.

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

Сообщение GSerg » 22.01.2004 (Чт) 11:37

Хэндл действительно есть у каждого объекта. Хотя бы затем, чтобы его можно было уничтожить. Но не следует путать множество хэндлов с его подмножеством hWnd. Только то, что имеет hWnd, является окном. Всё остальное окном не является.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 22.01.2004 (Чт) 11:38

SBJocker писал(а):Это означает, что у меню нет ни манипулятора окна...

Теперь идем в заголовочный файл C++ и видим:
HMENU GetMenu(

HWND hWnd // handle of window
);

и как это назвать??? HMENU - это что вам, х... собачий чтоли?

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

Сообщение GSerg » 22.01.2004 (Чт) 11:41

А теперь возвращаемся из хэдера и читаем внимательно:
GSerg писал(а):не следует путать множество хэндлов с его подмножеством hWnd.

Всё, прекращаю эту дискуссию.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 22.01.2004 (Чт) 11:45

Какие ещё подмножества, подвиды... Всё это просто 32-х битные числа, и ничего большего. И всё это называется манипуляторы, хэндлы. И не важно чей это хэндл, окна, меню, контекста или ещё чего-то, принципиально они ни чем не отличаются.

tigrix
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 20.01.2004 (Вт) 23:05

Сообщение tigrix » 22.01.2004 (Чт) 15:23

Браво! Спасибо за то что меня просветили! Но я это уже всё знал. Только спросил я совсем не то! Обьясняю:

Узнать ХЭНДЛ меню мышкой у меня получается
hwd=WindowFromPoint(x,y) - Когда навожу мышкой на любой обьект он мне показывает Хэндл любово обьекта даже меню и ДАЖЕ левых окон! Это то что мне надо, только не спомощью мыши, а допустим я нажал SHIFT+F10 -Меню появилось! И тут прога сообщила мне ХЕНДЛ!
:? :? :?

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 23.01.2004 (Пт) 1:22

Kostyan писал(а):Зная hwnd окна, хэндл его меню получаешь с пом. ф-и GetMenu.

И не важно в видно это меню сейчас, или нет. Ты всё-равно получишь его манипулятор. А если тебе не известен Hwnd хозяина меню, то и меню не получишь.


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

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

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

    TopList