ошибка при создании view-окна, наследованного от CAxWindow
От: Аноним  
Дата: 14.08.09 04:44
Оценка:
Требуется создать своё view-окно с интернет-браузером.
Сделал всё почти 1 в 1, как в примере TabBrowser к wtl, но view-окно почему-то не создаётся...
Вот код:
#define ID_BROWSER 1    // DispEvent ID

class browser_view : public CWindowImpl<browser_view, CAxWindow>
                   , public IDispEventSimpleImpl<ID_BROWSER, browser_view, &DIID_DWebBrowserEvents2>
{
public:
    DECLARE_WND_SUPERCLASS(_T("BrowserViewWindow"), CAxWindow::GetWndClassName())

    // Message map and handlers
    BEGIN_MSG_MAP(browser_viewtest)
            MESSAGE_HANDLER(WM_CREATE, OnCreate)
            MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
            MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
    END_MSG_MAP()
    ...
    LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
    {
        LRESULT lRet = DefWindowProc(uMsg, wParam, lParam); // <<< !!!

        // Connect events
        CComPtr<IWebBrowser2> spWebBrowser2;
        HRESULT hRet = QueryControl(IID_IWebBrowser2, (void**)&spWebBrowser2);
        if (SUCCEEDED(hRet))
        {
            if (FAILED(DispEventAdvise(spWebBrowser2, &DIID_DWebBrowserEvents2)))
                    ATLASSERT(FALSE);
        }

        // Set host flag to indicate that we handle themes
        CComPtr<IAxWinAmbientDispatch> spHost;
        hRet = QueryHost(IID_IAxWinAmbientDispatch, (void**)&spHost);
        if (SUCCEEDED(hRet))
        {
            const DWORD _DOCHOSTUIFLAG_THEME = 0x40000;
            hRet = spHost->put_DocHostFlags(DOCHOSTUIFLAG_NO3DBORDER | _DOCHOSTUIFLAG_THEME);
            ATLASSERT(SUCCEEDED(hRet));
        }

        return lRet;
    }
    ...
};

Вызов функции LRESULT lRet = DefWindowProc(uMsg, wParam, lParam); возвращает -1
А в output тут же идёт ошибка:
Control creation failed for 'browser'
Error code: 0x800401f3 — Invalid class string

Все последующие Query* фейлятся.

При этом, оригинальный пример замечательно работает. На вызове DefWindowProc видно, что подгружается куча dll'ек.
В чём может быть проблема?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.