CWebBrowser control in CView doesn't paint correctly
jtc -- jtc@why.net Thursday, February 06, 1997 Environment: VC++ 4.2b, Win 95 I have a CView that has a Microsoft CWebBrowser control as its sole content. When a document is loaded everything looks fine, but when I resize the view, the scroll bars (and most controls in the HTML if any) aren't painted. Just about the only message that I have mapped is OnSize, to have the CWebBrowser control resize with the view. When the user finishes resizing, the content of the HTML is there, but the scroll bars are not painted. The areas are just grey (my window background color). The OnDraw method is empty since I don't have anything I need to paint. Forcing another repaint by dragging another window over it fixes the unpainted area. Is there some message I need to be responding to to handle these nonclient areas painting? int CWebbrowsView::OnCreate(LPCREATESTRUCT lpCreateStruct) { BOOL bResult; if (CView::OnCreate(lpCreateStruct) == -1) return -1; bResult = m_browser.Create (NULL, WS_VISIBLE, CRect (0, 0, 0, 0), this, IDC_HTML); if (bResult) return 0; else return -1; } void CWebbrowsView::OnSize(UINT nType, int cx, int cy) { CView::OnSize (nType, cx, cy); if ((nType != SIZE_MAXIMIZED) && (nType != SIZE_MINIMIZED)) { if (GetDlgItem (IDC_HTML)) { CRect rect; GetWindowRect (&rect); m_browser.SetWidth (rect.right - rect.left); m_browser.SetHeight (rect.bottom - rect.top); // m_browser.Invalidate (); // Invalidate (); } } } void CWebbrowsView::OnDraw(CDC* pDC) { } As shown above, even though they should already be invalid, I have tried invalidating the browser and view with no effect. I have also tried using a SetWindowPos call instead of the browsers SetWidth and SetHeight. The result was the same. When watching the window drag (wth full window drag) I can see the scrollbars flashing, but they are never there after the final paint. This seems like it would be so simple. Anyone have any ideas? Jason
Dave Lorde -- dlorde@cix.compulink.co.uk Saturday, February 08, 1997 In-Reply-To: <19970206153719625.AAA70@jason.anet-dfw.com> I've had a play around with this control, and the redrawing tends to be pretty messy. I found the best results using this way of sizing (below), and disabling background erase. There are other ways of doing it, but currently I prefer this: void CWebView::OnSize(UINT nType, int cx, int cy) { // Disable redraw until all messy sizing is finished SetRedraw(FALSE); CMDIChildWnd::OnSize(nType, cx, cy); if (m_WebBrowser.m_hWnd) { m_WebBrowser.SetWindowPos(&wndTop, 0, 0, cx, cy, SWP_SHOWWINDOW); } // Force immediate redraw of view and child control SetRedraw(TRUE); RedrawWindow(0, 0, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN |RDW_NOERASE); } BOOL CWebView::OnEraseBkgnd(CDC* pDC) { // The control does the background return TRUE; } Your mileage may vary ;-) Dave Dave
Become an MFC-L member | Вернуться в корень Архива |