1

次のクラスを使用して新しいウィンドウを構築しようとしています。ただし、CWindow::m_hwnd 変数を使用して新しく生成されたウィンドウの名前を取得しようとしているときに、深刻な問題が発生しています。親の HWND を保持する CWindowImpl::Create() 関数に変数を渡す必要があると思いますが、それを取得する方法がわかりません。

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>,

ありがとう!

4

1 に答える 1

1

ちょっと時間がかかりましたが、 GetActiveWindow() を使用して解決できました

于 2012-05-06T12:07:02.820 に答える