Здравствуйте, vovas, Вы писали:
V>Здравствуйте, rus blood, Вы писали: RB>>А сообщение WM_MENUGETOBJECT ты обработал?
V>только это собщение приходит после V>WM_MENUDRAG V>сначала драг должно прийти, а потом гэтобджект...
Извини за тупость...
Должно или реально приходит?
В первом посте ты вроде написал, что WM_MENUDRAG НЕ приходит....
Здравствуйте, rus blood, Вы писали: RB>Должно или реально приходит? ВООБЩЕ не приходит ничего.
Беру МенюИтемб тащу, а брейкпоинт молчит!!!
(у меня не заработало в рабочем проекте, и я сходу
накалякал просто WTL-проект для теста — и ничего)
1. Если взять точно твой код, то возвращается FALSE. Причина — неинициализировано поле cbSize у структуры MENUINFO.
2. У функции TrackPopupMenu после параметров координт точки идет параметр lReserved. Ты случайно параметрами не ошибся? Команды меню вообще в окно приходят?
Сделал пример. Все работает, как надо. WM_MENUDRAG вызывается на ура...
Здравствуйте, rus blood, Вы писали:
...
Огромное спасибо за поддержку!!! Это я туплю! короче такая фигня
не приходило, но теперь пришло! менюшка лежит в dll-ке и в туда передается
хэндл окна, принимающего от менюшки мессаги. Dll-ка подгружалась статически
через *.Lib, и инициализация ::CoInitialize( NULL ) была в int main(...). Как только я добавил ее и в
Здравствуйте, vovas, Вы писали:
V>Здравствуйте, rus blood, Вы писали: V>... V>все заработало! еще раз спасибо! V>УВАЖАЕМЫЕ ЛЮДИ, НЕ ЗАБЫВАЙТЕ ДОБАВЛЯТЬ ИНИЦИАЛИЗАЦИЮ!!!
Ты знаешь, специально проверил на своем примере.
WM_MENUDRAG приходит даже если НЕ делать инициализацию COM.
Здравствуйте, rus blood, Вы писали: RB>WM_MENUDRAG приходит даже если НЕ делать инициализацию COM.
!!! я тоже считал, что это WinAPI заморочка, а не COM...
да и считаю, но ФАКТ чёрть подери! вот убираю из DLL
инициализацию — и кладбищенская тишина.....
Здравствуйте, vovas, Вы писали:
V>!!! я тоже считал, что это WinAPI заморочка, а не COM... V>да и считаю, но ФАКТ чёрть подери! вот убираю из DLL V>инициализацию — и кладбищенская тишина.....
Ну я тоже как бы не с потолка сочиняю, а вот у меня живой пример перед глазами.
Даже специально перед вызовом меню поставил код создания com-объекта, ну и ессно получаю "com is not initialized".
А WM_MENUDRAG тем не менее приходит.
Только у меня нет dll, и все работает в одном приложении.
У тебя однопоточное приложение? Все таки странно, что в DllMain потребовалась инициализация com, по идее это должно было быть в одном потоке с функцией main, где com уже инициализировано...
Здравствуйте, rus blood, Вы писали: RB>У тебя однопоточное приложение? Все таки странно, что в DllMain потребовалась инициализация com, по идее это должно было быть в одном потоке с функцией main, где com уже инициализировано...
Приложение многопоточное, но библиотечные функции выполняются
в основном потоке программы.
Однако инициализация COM при линковании происходит раньше вызова
этой же инициализации из main()... Ну и соответственно
ATLASSERT(SUCCEEDED(hRes)) в main дает ошибку.
Но какого черта этот COM ваще нужен (в случае библиотеки)?
Для меня тоже загадка.