· Начало · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Popupmenu + edit

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Дек 11, 2003 12:54:50

masquer


зачем тебе нужно превращать hmenu в hwnd

Потому я и удивился, так как разницу я знаю :)


Дата: Дек 11, 2003 21:23:18

masquer
hwnd меню ловится элементарно CBT хуком (так более правильно), и зачем тебе нужно превращать hmenu в hwnd?
Мне как раз хендл окна меню и нужен.
Можешь закинуть пример как его отловить хуком, а то я в них не силён.


Дата: Дек 12, 2003 00:19:27

Black_mirror

По поводу DRAWITEMSTRUCT:
вообще-то я знаю назначение полей и знаю, что hWnd окна-владельца там нет. Я лишь предложил использовать WM_DRAWITEM как точку начала отлова хэндла.


Дата: Дек 12, 2003 01:37:28

Нашел замечательное сообщение для отлова хендла окна меню:
WM_ENTERIDLE! Теперь осталось только хук повесить.


Дата: Дек 12, 2003 10:53:09 · Поправил: masquer

Black_mirror
Условно-схематично - так:
invoke SetWindowsHookEx, WH_CBT, addr CBTHookProc, hInstance, 0
...
invoke TrackPopupMenuEx,...
...
invoke UnhookWindowsHookEx,...

...
CBTHookProc proc
cmp nCode, HCBT_CREATEWND
jnz @@end
invoke GetClassName, wParam,...
if class==szMenuClass
...
endif
@@end:
...
CBTHookProc endp
Toxic
использовать WM_DRAWITEM как точку начала отлова хэндла
Оригинально, а почему тогда не WM_MEASUREITEM?


Дата: Дек 13, 2003 01:43:13

masquer
Оригинально, а почему тогда не WM_MEASUREITEM?
The WM_MEASUREITEM message is sent to the owner window of an owner-drawn button, combo box, list box, list view control, or menu item when the control or menu is created.


Дата: Дек 13, 2003 01:50:12

Black_mirror
WM_ENTERIDLE
Я не уверен(т.к. не имею возможности проверить), но мне кажется что это сообщение будет отослано только один раз (в связке с WM_ENTERMENULOOP). Если это так, то что ты будешь делать, если у меню есть pop-up'ы (а в 99% случаев они будут)?


Дата: Дек 13, 2003 06:33:58

masquer
Спасибо!

Toxic
Это сообщение отсылается очень часто. Но мне кажется, что если программа тормозит и в очереди сообщений всегда есть что обрабатывать, то такой метод не сработает.


Дата: Дек 13, 2003 13:42:40

Toxic
Я, в общем-то, в курсе того, как обрабатывать WM_*ITEM и в связи с чем они приходят. Мне просто интересно, насколько это лучше хука в плане получения хендла окна меню и добавления к нему дочернего окна или мы не ищем легких путей? :)


Дата: Дек 13, 2003 13:46:46

masquer

Если хук локальный и за ним следует анхук - что может быть проще?


Дата: Дек 13, 2003 14:12:45 · Поправил: Black_mirror

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

P.S: И как такое может работать?!


Дата: Дек 13, 2003 14:27:43

Black_mirror

Я хотел получить хэндл окна только чтобы сабклассить. Мне нужно сообщение окну меню, дающее рект нужного айтема. Есть ли такие? Если нет, я могу воспользоваться ownerdraw и получить рект через drawitem (предварительно задав достаточную ширину меню в measureitem). Но уже в очереди главного окна. А что ты хотел делать с меню?


Дата: Дек 13, 2003 14:37:34

Valery
что может быть проще?
ну, я так и делаю, мне просто интересно, почему Toxic советует по-другому делать.


Дата: Дек 13, 2003 14:51:54

Valery
Получить RECT можно через GetMenuItemRect, только вот возвращает его эта функция в каких-то не понятных координатах, даже в том случае когда меню на экране нет.

Хочу добавить в меню элементы для выбора интенсивности компонент цвета типа SCROLLBAR'ов.


Дата: Дек 13, 2003 14:56:14

Black_mirror



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


Во-во! У меня одна из координат иногда под 2 гига и потому я забил на GetMenuItemRect.

<< . 1 . 2 . 3 . >>