Здравствуйте, EugenyAL, Вы писали:
EAL>Некоторые контейнеры позволяют отображать пользоватльские страницы свойств контрола( такие как контейнерsы MFC,VB/VBA) , другие нет( например Visual FoxPro). Некоторые контролы (например старый добрый Microsof DataGrid) добавляют в меню (при щелчке на котрол правой кнопкой выскакивает меню) пункт с помощю которого можно добрать до содержимого Property Page.
Это проблемы не контейнеров, а криво написанных контролов.
EAL>Каким образом можно добавить свой пункт меню это меню?
Если добавить пункт Properties на ATL, то в rgs файл добавляется verb:
'Version' = s '1.0'
'verb'
{
'0' = s '&Properties...,0,2'
}
А в контрол следующий код:
STDMETHOD(DoVerb)(LONG iVerb,LPMSG lpmsg, IOleClientSite *pActiveSite,
LONG lindex, HWND hwndParent, LPCRECT lprcPosRect)
{
if (iVerb == 0)
return IOleObjectImpl<CMyCtrl>::DoVerb(OLEIVERB_PROPERTIES, lpmsg, pActiveSite,
lindex, hwndParent, lprcPosRect);
return IOleObjectImpl<CMyCtrl>::DoVerb(iVerb, lpmsg, pActiveSite,
lindex, hwndParent, lprcPosRect);
}
Можно еще посмотреть
Q275862
EAL>(И вообще как можно получить хэндл главного окна контейнера. Я предполагаю что через IOleInPlaceFrame, но при попытке запросить
EAL>этот интерфейс через IOleInPlaceSite возвращается E_FAIL)
Если в ATL, то через m_spInPlaceSite->GetWindow().