Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Fert Россия  
Дата: 29.10.04 05:19
Оценка:
Есть, не моя, программа, написана на Borlande. У неё есть SDK, для написания плагинов, но в нём не предусмотрена возможность работы с Menu
Как мне в плагине(на MFC) перехватить переключение окон(они перевычисляют Меню), и добавить в нужных местах свои Меню, в том числе и контекстные

Заранее, спасибо!
Дмитрий Фризен.

31.10.04 22:07: Перенесено модератором из '.NET GUI' — AndrewVK
Учить Кнут'ом и Вирт'ом.
Re: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: GarryIV  
Дата: 29.10.04 08:37
Оценка:
Hello, Fert!

F> Есть, не моя, программа, написана на Borlande. У неё есть SDK,

F> для написания плагинов, но в нём не предусмотрена возможность работы с
F> Menu Как мне в плагине(на MFC) перехватить переключение
F> окон(они перевычисляют Меню), и добавить в нужных местах свои Меню, в
F> том числе и контекстные

И чтож ты хочешь от бедных дотнетчиков? Мы люди темные в Дебилдерах и МФЦ ничего не понимаем
Это тебе в WinAPI надо.

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Re[2]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Fert Россия  
Дата: 29.10.04 09:21
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Hello, Fert!


F>> Есть, не моя, программа, написана на Borlande. У неё есть SDK,

F>> для написания плагинов, но в нём не предусмотрена возможность работы с
F>> Menu Как мне в плагине(на MFC) перехватить переключение
F>> окон(они перевычисляют Меню), и добавить в нужных местах свои Меню, в
F>> том числе и контекстные

GIV>И чтож ты хочешь от бедных дотнетчиков? Мы люди темные в Дебилдерах и МФЦ ничего не понимаем

GIV>Это тебе в WinAPI надо.

GIV>WBR, Igor Evgrafov.


Извини не в ту дверь вошёл
Учить Кнут'ом и Вирт'ом.
Re[3]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 01.11.04 20:12
Оценка:
Здравствуйте, Fert, Вы писали:

F>Здравствуйте, GarryIV, Вы писали:


GIV>>Hello, Fert!


F>>> Есть, не моя, программа, написана на Borlande. У неё есть SDK,

F>>> для написания плагинов, но в нём не предусмотрена возможность работы с
F>>> Menu Как мне в плагине(на MFC) перехватить переключение
F>>> окон(они перевычисляют Меню), и добавить в нужных местах свои Меню, в
F>>> том числе и контекстные
В смысле переключение?
Может быть попробовать субклассировать окно, и как нить самому прорисовывать меню, какой нить CUSTOMDRAW.
Хотя все равно субклассировать придется в любом случае, как то же надо будет потом WM_COMMAND обработывать от своих пунктов меню.


GIV>>И чтож ты хочешь от бедных дотнетчиков? Мы люди темные в Дебилдерах и МФЦ ничего не понимаем

GIV>>Это тебе в WinAPI надо.

GIV>>WBR, Igor Evgrafov.


F>Извини не в ту дверь вошёл
Aml Pages Home
Re[4]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Fert Россия  
Дата: 02.11.04 05:32
Оценка:
Здравствуйте, Carc, Вы писали:

C>В смысле переключение?

C>Может быть попробовать субклассировать окно, и как нить самому прорисовывать меню, какой нить CUSTOMDRAW.
C>Хотя все равно субклассировать придется в любом случае, как то же надо будет потом WM_COMMAND обработывать от своих пунктов меню.

Я это уже понял делаю так:
BOOL CMyPlagin::InitInstance()
{
    ...
    CMyWnd* pWnd = new CMyWnd();   // class CMyWnd : public CWnd { ... }
    m_pMainWnd = pWnd;
    pWnd->SubclassWindow(CWnd::FindWindow("<classOfExeWindow>", NULL));
    return TRUE;
}

void CMyPlagin:ExitInstance()
{
    if ( m_pMainWnd )
       m_pMainWnd->UnsubclassWindow();
}

И это работает(входит/выходит)
Проблемы начинаются, когда я пытаюсь прикрутить свои менюшки, типа
    CMenu* pMenu = m_pMainWnd->GetMenu();
    CString szName;
    pMenu->GetMenuString(0, szName, MF_BYPOSITION);
    // szName == "" должно быть "File" ???????
    CMenu myMenu;
    myMenu.LoadMenu(IDR_MYMENU);
    pMenu->InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT)myMenu.m_hMenu, "MyMenu");

Входит, вижу и кликается но не выходит т.е. плагин выгружается нормально но ЕХЕ где-то уходит в Exception

Всего, Дмитрий.

PS Пишу по памяти и за мелкие очепятки в коде не судить(строго)
Учить Кнут'ом и Вирт'ом.
Re[5]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Андрей Россия  
Дата: 02.11.04 06:12
Оценка:
Здравствуйте, Fert, Вы писали:

skip

F>CMenu myMenu;
F>myMenu.LoadMenu(IDR_MYMENU);
F>pMenu->InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT)myMenu.m_hMenu, "MyMenu");


А это нормально, что ты создаешь свое меню локально, а потом его кому-то отдаешь? В деструкторе твоего объекта меню будет уничтожено (я имею ввиду виндовый объект, который HMENU описывается) — в результате хост твоего плагина и падает, имхо.
Re[6]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Fert Россия  
Дата: 02.11.04 08:02
Оценка:
Здравствуйте, Андрей, Вы писали:

А>Здравствуйте, Fert, Вы писали:


А>skip


А>
F>>CMenu myMenu;
F>>myMenu.LoadMenu(IDR_MYMENU);
F>>pMenu->InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT)myMenu.m_hMenu, "MyMenu");
А>


А>А это нормально, что ты создаешь свое меню локально, а потом его кому-то отдаешь? В деструкторе твоего объекта меню будет уничтожено (я имею ввиду виндовый объект, который HMENU описывается) — в результате хост твоего плагина и падает, имхо.


Да, я как-то упустил этот момент
Но почему GetMenuString не даёт строку
Учить Кнут'ом и Вирт'ом.
Re[6]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Fert Россия  
Дата: 03.11.04 05:43
Оценка:
Здравствуйте, Андрей, Вы писали:

Твоё последнее письмо слетело

И ещё GetMenuString(...) и GetMenuItemInfo(...) не возвращают имя менюшки

А также можно ли наследовать CMyWnd от CFrameWnd или CMDIFrameWnd

Спасибо!
Учить Кнут'ом и Вирт'ом.
Re[7]: Как к ЕХЕ(Borland) прикрутить плаган(MFC)?
От: Андрей Россия  
Дата: 03.11.04 08:25
Оценка:
Здравствуйте, Fert, Вы писали:

F>Твоё последнее письмо слетело


Я его сам удалил: я там ерунду написал

F>И ещё GetMenuString(...) и GetMenuItemInfo(...) не возвращают имя менюшки



Если ты под XP работаешь, то если GetMenuItemInfo вернула FALSE — вызови GetLastError() и посмотри результат
Хотя я более чем уверен, будет что-то вроде "Неверный параметр"

F>А также можно ли наследовать CMyWnd от CFrameWnd или CMDIFrameWnd


F>Спасибо!


Это ты у меня спрашиваешь? Я ведь понятия не имею, к какой проге ты плагин пишешь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.