2012-05-06 2 views
1

im пытается создать новое окно, используя следующий класс. однако у меня возникают серьезные проблемы при попытке получить имя нового сгенерированного окна, используя переменную CWindow :: m_hwnd. я предполагаю, что я должен передать переменную функции CWindowImpl :: Create(), которая содержит HWND моего родителя, но я не знаю, как ее получить.Как создать новое окно с использованием класса CWindowImpl

STDMETHODIMP CVMNExporter::SetSite(IUnknown *pUnkSite) { 
    HRESULT hr; 
    if(FAILED(hr = ATL::IObjectWithSiteImpl<CVMNExporter>::SetSite(pUnkSite))) 
     return hr; 
    // We are rnning from a web browser 
    CONNECTION_CALLBACK = JSCRIPT_DISPID; 
    EXPORTING_CALLBACK = JSCRIPT_DISPID; 
    MERGING_CALLBACK = JSCRIPT_DISPID; 
    ABORTING_CALLBACK = JSCRIPT_DISPID; 

    AddRef(); 
    if(NULL == Create(0)) {// Creates the hidden window 
     Release(); 
     return HRESULT_FROM_WIN32(GetLastError()); 
    } 
    ATLTRACE("TEST - SetSite(): this: %d, window: %d", this, m_hWnd); 
    m_dwApartmentMode = HWND_APARTMENT; 
    SendMessage(WM_EXPORTER_APARTMENT_SETUP, 0, 0); 
    return S_OK; } 

CVMNExporter реализует следующие интерфейсы:

 public ATL::IObjectSafetyImpl<CVMNExporter, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>, 
     public ATL::IObjectWithSiteImpl<CVMNExporter>, 
     public ATL::CWindowImpl<CVMNExporter, ATL::CWindow, ATL::CFrameWinTraits>, 

спасибо!

+0

'CWindowImpl :: Create' создает вам окно, и вы будете иметь свой' HWND' доступна с там. Если вы хотите предоставить дескриптор родительского окна, вам нужно сначала получить его с вашего сайта. Вам нужно будет запросить его с помощью 'IOleWindow :: GetWindow' или аналогичного метода. –

ответ

1

Ну что мне потребовалось некоторое время, но ему удалось решить с помощью GetActiveWindow()

Смежные вопросы