Страницы свойств в ActiveX
От: EugenyAL  
Дата: 20.03.06 05:57
Оценка:
Здравствуйте!
Вопрос со страницами свойств.
Некоторые контейнеры позволяют отображать пользоватльские страницы свойств контрола( такие как контейнерsы MFC,VB/VBA) , другие нет( например Visual FoxPro). Некоторые контролы (например старый добрый Microsof DataGrid) добавляют в меню (при щелчке на котрол правой кнопкой выскакивает меню) пункт с помощю которого можно добрать до содержимого Property Page.

Каким образом можно добавить свой пункт меню это меню?

(И вообще как можно получить хэндл главного окна контейнера. Я предполагаю что через IOleInPlaceFrame, но при попытке запросить
этот интерфейс через IOleInPlaceSite возвращается E_FAIL)

Заранее спасибо.
Re: Страницы свойств в ActiveX
От: algol Россия about:blank
Дата: 20.03.06 10:08
Оценка:
Здравствуйте, 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().
Re: Страницы свойств в ActiveX
От: EugenyAL  
Дата: 21.03.06 02:09
Оценка:
Спасибо за помощь , теперь все работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.