powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить контрол из другого приложения?
9 сообщений из 9, страница 1 из 1
Как получить контрол из другого приложения?
    #33970679
egghead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFC.
У меня есть задача: приложение MFC. В нем есть диалог. Нужно при нажатии кнопки вызыввать фнукцию из dll, которая будет динамически создавать меню (класс производный от CMenu) и делать AppendMenu у себя в dll.
Проблема: не получается отрисовать меню с помощью TrackPopupMenu.
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, iLeft, iRight, NULL/*pDlg*/); В самом exe всё работает нормально, так что дело не в классе.
Я так понимаю это связано с тем, что не задан параметр относительно чего отрисовывать. Пробовал передать укзатель на диалог, но вылетает. Если ничего не указывать, то ничего вообще не показывает. Подскажите как решить проблему эту?
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971123
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а пробовал передавать указатель на контекст рисования?

--------------------------------------------------------------
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971130
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плюс ко всему, нужно ставить свойства типа OWNERDRAW, OWNERDRAW_FIXED

--------------------------------------------------------------
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971174
Cerebrumа пробовал передавать указатель на контекст рисования?

--------------------------------------------------------------

А причем тут контекст?
Там в функции CWnd* требуется последним параметром... Значит надо от диалога СWnd* получить...
Только как? Я так думаю, что через pDlg->FromHandle(pDlg->GetSafeHwnd())
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971203
Cerebrumа пробовал передавать указатель на контекст рисования?

--------------------------------------------------------------

А причем тут контекст?
Там в функции CWnd* требуется последним параметром... Значит надо от диалога СWnd* получить...
Только как? Я так думаю, что через pDlg->FromHandle(pDlg->GetSafeHwnd())
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971231
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чего-то не въехал, ты создаешь свой класс производный от CMenu, с произвольной отрисовкой, который располагается в библиотеке? Или же уже есть готовый и ты хочешь его Subclass'ить?
--------------------------------------------------------------
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33971736
egghead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть класс производный от CMenu и в exe и в dll.
В exe есть кнопка. При нажатии на нее должно рядом появляться popup-menu. Оно должно создаваться в функции из dll, которая вызывается в момент нажатия кнопки. А дальше в exe есть обработчики на клик определенного пункта меню. Так вот проблема в том чтобы показать меню. Т.е. AppendMenu проходит и всё. Я так понял что проблема в TrackPopupMenu. Там есть параметр окно. Если я это делаю в диалоге exe, то просто пишу this и всё ок, а вот здесь не знаю как.
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33972062
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
изначально я бы сделал так:
в длл находиться AFX_EXT_CLASS CMyMenu : public CMenu, т.е. длл является поставщиком кода класса для конечного приложения. Приложение создает свой экземпляр этого класса при нажатии на кнопку или заранее(для этого на этапе проекта прилинковываем к нему длл.lib и вписываем хедер класса CMyMenu), на ваше усмотрение. Прописываем в карту сообщений обработку от нажатия кнопок моего меню и радуемся жизни.
У вас скорее всего не получается вызвать меню потому что dll ничего не знает о цикле сообщений вашей программы, а хендл окна ей нужен чтобы возвращать события. Имхо так, если я не прав поправте.
--------------------------------------------------------------
...
Рейтинг: 0 / 0
Как получить контрол из другого приложения?
    #33972174
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eggheadЕсть класс производный от CMenu и в exe и в dll.
В exe есть кнопка. При нажатии на нее должно рядом появляться popup-menu. Оно должно создаваться в функции из dll, которая вызывается в момент нажатия кнопки. А дальше в exe есть обработчики на клик определенного пункта меню. Так вот проблема в том чтобы показать меню. Т.е. AppendMenu проходит и всё. Я так понял что проблема в TrackPopupMenu. Там есть параметр окно. Если я это делаю в диалоге exe, то просто пишу this и всё ок, а вот здесь не знаю как.

честно говоря не совсем уверен...но под MFC с ресурсами нуна аккуратно работать...Если у Вас шаред MFC то при загрузке вашей дэлеле треба сохранить хэндлер модуля...Далее, ПЕРЕД загрузкой самих ресурсов ИЗ дэлеле ОБЯЗАТЕЛЬНО нужно ПЕРЕКЛЮЧИТЬ контекст выполнения на Вашу дэлеле (т.е. используем сохранённый хэндлер модуля).

Думаю это может иметь место быть, если Ваше меню без проблем создаёться в экзешнике, а в дэлеле не хочет (т.е. все те возможные проблемы о которых тут шла речь решены)...

с уважением
(круглый)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как получить контрол из другого приложения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]