2013-03-05 3 views
1

순수 WinApi 응용 프로그램에 WebKit을 COM 개체로 포함시킵니다. 그리고 WM_WINDOWPOSCHANGED 가져 와서 WebKit 창의 크기를 조정하고 싶습니다.WinApi로 WebKit COM 크기 조정

LRESULT CALLBACK CBrowserView::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    typedef LRESULT (CBrowserView::*PFNPROC)(WPARAM wParam, LPARAM lParam); 
    PFNPROC pfnProc; 
    switch (uMsg) 
    { 
     case WM_WINDOWPOSCHANGED: 
      pfnProc = &CBrowserView::DoWindowPosChanged; 
... 


// CBrowserView::DoWindowPosChanged 

LRESULT CBrowserView::DoWindowPosChanged(WPARAM wParam, LPARAM lParam) 
{ 
    _ASSERT(m_hWnd); 

    WINDOWPOS* pwp = (WINDOWPOS*)lParam; 
    { 
     if (pwp->cx != m_lClientWidth || pwp->cy != m_lClientHeight) 
     { 
      m_lClientWidth = pwp->cx; 
      m_lClientHeight = pwp->cy; 

      if (m_pIWebBrowser) 
      { 
       { 
        RECT rcClient; 
        rcClient.left = 0; 
        rcClient.top = 0; 
        rcClient.right = m_lClientWidth; 
        rcClient.bottom = m_lClientHeight; 

        HRESULT hr = m_pIWebBrowser->initWithFrame(rcClient, 0, 0); 
        if (FAILED(hr)) 
         return E_FAIL; 

        hr = m_pIWebBrowser->mainFrame(&m_mainWebFrame); 
        if (FAILED(hr)) 
         return E_FAIL; 

        BSTR urlBstr = SysAllocString(m_pszFile);; 
        WebKitToUrl(urlBstr, true); 
       } 
      } 
     } 
    } 

    return 0; 
} 

그러나 OnCreate 대화 상자에서이 클라이언트는이 클라이언트 영역을 채 웁니다. 크기 조정시 실패, m_pIWebBrowser-> initWithFrame (rcClient, 0, 0)은 E_FAIL을 반환합니다.

다른 방법으로 m_pIWebBrowser 크기를 설정할 수 있습니까?

답변

0

1 위젯 HWND를 찾아야합니다. 창 크기를 조정 |

은 ...
hr = m_pIWebBrowser->QueryInterface(IID_IWebViewPrivate, reinterpret_cast<void**>(&webViewPrivate)); 

if (FAILED(hr)) 
    return E_FAIL; 

hr = webViewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&m_hudWnd)); 
if (FAILED(hr) || !m_hudWnd) 
    return E_FAIL; 

if (webViewPrivate) 
{ 
    webViewPrivate->Release(); 
    webViewPrivate = NULL; 
} 

...

2

.. 사용의 standart WINAPI는 이동합니다.

LRESULT CBrowserView::DoWindowPosChanged(WPARAM wParam, LPARAM lParam) 
{ 
    _ASSERT(m_hWnd); 

    WINDOWPOS* pwp = (WINDOWPOS*)lParam; 
    { 
     if (pwp->cx != m_lClientWidth || pwp->cy != m_lClientHeight) 
     { 
      m_lClientWidth = pwp->cx; 
      m_lClientHeight = pwp->cy; 

      if (m_pIWebBrowser && m_hudWnd) 
      { 
       RECT rcClient; 
       rcClient.left = 0; 
       rcClient.top = 0; 
       rcClient.right = m_lClientWidth; 
       rcClient.bottom = m_lClientHeight; 

       ::MoveWindow(m_hudWnd, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom, TRUE); 
      } 
     } 
    } 
    return 0; 
}