如何使用 CWindowImpl 类创建新窗口

how to create a new window using the CWindowImpl class

本文关键字:窗口 新窗口 创建 何使用 CWindowImpl      更新时间:2023-10-16

im 尝试使用以下类构建一个新窗口。但是,在尝试使用 CWindow::m_hwnd 变量获取新生成的窗口名称时,我遇到了一些严重的问题。我的猜测是我应该将一个变量传递给 CWindowImpl::Create() 函数,该函数保存我父母的 HWND,但我不知道如何获取它。

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

谢谢!

好吧,我花了一些时间,但设法通过使用GetActiveWindow()解决了它