|
|
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
MFC. У меня есть задача: приложение MFC. В нем есть диалог. Нужно при нажатии кнопки вызыввать фнукцию из dll, которая будет динамически создавать меню (класс производный от CMenu) и делать AppendMenu у себя в dll. Проблема: не получается отрисовать меню с помощью TrackPopupMenu. pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, iLeft, iRight, NULL/*pDlg*/); В самом exe всё работает нормально, так что дело не в классе. Я так понимаю это связано с тем, что не задан параметр относительно чего отрисовывать. Пробовал передать укзатель на диалог, но вылетает. Если ничего не указывать, то ничего вообще не показывает. Подскажите как решить проблему эту? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:18 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
а пробовал передавать указатель на контекст рисования? -------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:45 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
плюс ко всему, нужно ставить свойства типа OWNERDRAW, OWNERDRAW_FIXED -------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:46 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
Cerebrumа пробовал передавать указатель на контекст рисования? -------------------------------------------------------------- А причем тут контекст? Там в функции CWnd* требуется последним параметром... Значит надо от диалога СWnd* получить... Только как? Я так думаю, что через pDlg->FromHandle(pDlg->GetSafeHwnd()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:54 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
Cerebrumа пробовал передавать указатель на контекст рисования? -------------------------------------------------------------- А причем тут контекст? Там в функции CWnd* требуется последним параметром... Значит надо от диалога СWnd* получить... Только как? Я так думаю, что через pDlg->FromHandle(pDlg->GetSafeHwnd()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:59 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
Я чего-то не въехал, ты создаешь свой класс производный от CMenu, с произвольной отрисовкой, который располагается в библиотеке? Или же уже есть готовый и ты хочешь его Subclass'ить? -------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 15:05 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
Есть класс производный от CMenu и в exe и в dll. В exe есть кнопка. При нажатии на нее должно рядом появляться popup-menu. Оно должно создаваться в функции из dll, которая вызывается в момент нажатия кнопки. А дальше в exe есть обработчики на клик определенного пункта меню. Так вот проблема в том чтобы показать меню. Т.е. AppendMenu проходит и всё. Я так понял что проблема в TrackPopupMenu. Там есть параметр окно. Если я это делаю в диалоге exe, то просто пишу this и всё ок, а вот здесь не знаю как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 16:53 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
изначально я бы сделал так: в длл находиться AFX_EXT_CLASS CMyMenu : public CMenu, т.е. длл является поставщиком кода класса для конечного приложения. Приложение создает свой экземпляр этого класса при нажатии на кнопку или заранее(для этого на этапе проекта прилинковываем к нему длл.lib и вписываем хедер класса CMyMenu), на ваше усмотрение. Прописываем в карту сообщений обработку от нажатия кнопок моего меню и радуемся жизни. У вас скорее всего не получается вызвать меню потому что dll ничего не знает о цикле сообщений вашей программы, а хендл окна ей нужен чтобы возвращать события. Имхо так, если я не прав поправте. -------------------------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 18:02 |
|
||
|
Как получить контрол из другого приложения?
|
|||
|---|---|---|---|
|
#18+
eggheadЕсть класс производный от CMenu и в exe и в dll. В exe есть кнопка. При нажатии на нее должно рядом появляться popup-menu. Оно должно создаваться в функции из dll, которая вызывается в момент нажатия кнопки. А дальше в exe есть обработчики на клик определенного пункта меню. Так вот проблема в том чтобы показать меню. Т.е. AppendMenu проходит и всё. Я так понял что проблема в TrackPopupMenu. Там есть параметр окно. Если я это делаю в диалоге exe, то просто пишу this и всё ок, а вот здесь не знаю как. честно говоря не совсем уверен...но под MFC с ресурсами нуна аккуратно работать...Если у Вас шаред MFC то при загрузке вашей дэлеле треба сохранить хэндлер модуля...Далее, ПЕРЕД загрузкой самих ресурсов ИЗ дэлеле ОБЯЗАТЕЛЬНО нужно ПЕРЕКЛЮЧИТЬ контекст выполнения на Вашу дэлеле (т.е. используем сохранённый хэндлер модуля). Думаю это может иметь место быть, если Ваше меню без проблем создаёться в экзешнике, а в дэлеле не хочет (т.е. все те возможные проблемы о которых тут шла речь решены)... с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 18:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33972062&tid=2030553]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 432ms |

| 0 / 0 |
