15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Problem with Web Browser Control on a CFrameWnd

Ramon J. Garcia -- ramon.garcia@protec.es
Monday, March 24, 1997

Environment: Win 95, VC++ 4.2b w/ Cross Compiler 4.0b

I have a problem with the Microsoft Web Browser Control: if I put it on a
resizable dialog all works fine, but if I put it on a dialog associated
with a CFormView and I try to resize the view with the mouse browser
scrollbars don4t refresh properly. It seems like if it repaints the
scrollbars, but next, something happens that make them dissappear. I've
tried to investigate 
through MFC source code to see what could be happening, but I didn4t
succeded.

Below is an extract of my code, my frame-window class is a simple
CMDIChildWnd.

void CMyFormView::OnInitialUpdate() 
{
CFormView::OnInitialUpdate();

// Show the page
m_web.Navigate(((CMyHtmlDocument *)GetDocument())->GetFilename(), 0, 0, 0,
0);

// Resize the frame
GetParentFrame()->RecalcLayout(TRUE);
ResizeParentToFit(FALSE);
}

void CMyFormView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

// Resize WebControl
if (m_web.GetSafeHwnd())
	{
	m_web.SetWidth(cx-40);
	m_web.SetHeight(cy-40);
	}
}

I've looked through Microsoft Knowledge Base and MSDN for a sample. The
former has one called IEZOOM.EXE (Article ID: Q156693), a SDI application
based on CFormView, but it doesn4t work properly.

Is this a MFC bug? or, is there a trick to resize this control?

Any help would be appreciate!

Thank you for your help.

+--------------------------------+--------------------------------+
| Ramon J. Garcia                | PROTEC, S.A.                   |
| Development Department         | Dr. Esquerdo, 66               |
|                                | 28007 Madrid, Spain            |
|                                |           Tlf: +34 1 573 08 08 |
|                                |           Fax: +34 1 574 88 39 |
| E-mail: Ramon.Garcia@protec.es | http://www.protec.es           |
+--------------------------------+--------------------------------+



Philip T. Carey -- ptcarey@netcom.com
Tuesday, March 25, 1997

[Mini-digest: 3 responses]

I have found that if you trigger a timer as the last task in your 
OnUpdate code, and then respond to that timer with your call to 
Navigate, that the refresh problem is solved. Although this is 
definitely strange and seems unnecessarily complex, it does seem to 
work. I would be interested to find a better solution too, but this 
should work.

-PC


Ramon J. Garcia wrote:
> 
> Environment: Win 95, VC++ 4.2b w/ Cross Compiler 4.0b
> 
> I have a problem with the Microsoft Web Browser Control: if I put it on a
> resizable dialog all works fine, but if I put it on a dialog associated
> with a CFormView and I try to resize the view with the mouse browser
> scrollbars don4t refresh properly. It seems like if it repaints the
> scrollbars, but next, something happens that make them dissappear. I've
> tried to investigate
> through MFC source code to see what could be happening, but I didn4t
> succeded.
> 
> Below is an extract of my code, my frame-window class is a simple
> CMDIChildWnd.
> 
> void CMyFormView::OnInitialUpdate()
> {
> CFormView::OnInitialUpdate();
> 
> // Show the page
> m_web.Navigate(((CMyHtmlDocument *)GetDocument())->GetFilename(), 0, 0, 0,
> 0);
> 
> // Resize the frame
> GetParentFrame()->RecalcLayout(TRUE);
> ResizeParentToFit(FALSE);
> }
> 
> void CMyFormView::OnSize(UINT nType, int cx, int cy)
> {
> CFormView::OnSize(nType, cx, cy);
> 
> // Resize WebControl
> if (m_web.GetSafeHwnd())
>         {
>         m_web.SetWidth(cx-40);
>         m_web.SetHeight(cy-40);
>         }
> }
> 
> I've looked through Microsoft Knowledge Base and MSDN for a sample. The
> former has one called IEZOOM.EXE (Article ID: Q156693), a SDI application
> based on CFormView, but it doesn4t work properly.
> 
> Is this a MFC bug? or, is there a trick to resize this control?
> 
> Any help would be appreciate!
> 
> Thank you for your help.
> 
> +--------------------------------+--------------------------------+
> | Ramon J. Garcia                | PROTEC, S.A.                   |
> | Development Department         | Dr. Esquerdo, 66               |
> |                                | 28007 Madrid, Spain            |
> |                                |           Tlf: +34 1 573 08 08 |
> |                                |           Fax: +34 1 574 88 39 |
> | E-mail: Ramon.Garcia@protec.es | http://www.protec.es           |
> +--------------------------------+--------------------------------+
-----From: "Ramon J. Garcia" 

Environment: Win 95, VC++ 4.2b w/ Cross Compiler 4.0b

I have a problem with the Microsoft Web Browser Control: if I put it on a
resizable dialog all works fine, but if I put it on a dialog associated
with a CFormView and I try to resize the view with the mouse browser
scrollbars don4t refresh properly. It seems like if it repaints the
scrollbars, but next, something happens that make them dissappear. I've
tried to investigate 
through MFC source code to see what could be happening, but I didn4t
succeded.

Below is an extract of my code, my frame-window class is a simple
CMDIChildWnd.

void CMyFormView::OnInitialUpdate() 
{
CFormView::OnInitialUpdate();

// Show the page
m_web.Navigate(((CMyHtmlDocument *)GetDocument())->GetFilename(), 0, 0, 0,
0);

// Resize the frame
GetParentFrame()->RecalcLayout(TRUE);
ResizeParentToFit(FALSE);
}

void CMyFormView::OnSize(UINT nType, int cx, int cy) 
{
CFormView::OnSize(nType, cx, cy);

// Resize WebControl
if (m_web.GetSafeHwnd())
	{
	m_web.SetWidth(cx-40);
	m_web.SetHeight(cy-40);
	}
}

I've looked through Microsoft Knowledge Base and MSDN for a sample. The
former has one called IEZOOM.EXE (Article ID: Q156693), a SDI application
based on CFormView, but it doesn4t work properly.

Is this a MFC bug? or, is there a trick to resize this control?

Any help would be appreciate!

Thank you for your help.

+--------------------------------+--------------------------------+
| Ramon J. Garcia                | PROTEC, S.A.                   |
| Development Department         | Dr. Esquerdo, 66               |
|                                | 28007 Madrid, Spain            |
|                                |           Tlf: +34 1 573 08 08 |
|                                |           Fax: +34 1 574 88 39 |
| E-mail: Ramon.Garcia@protec.es | http://www.protec.es           |
+--------------------------------+--------------------------------+


-----From: "Eric Rosenquist" 

On 24 Mar 97 at 10:46, Ramon J. Garcia wrote:

> Environment: Win 95, VC++ 4.2b w/ Cross Compiler 4.0b
> 
> I have a problem with the Microsoft Web Browser Control: if I put it on a
> resizable dialog all works fine, but if I put it on a dialog associated
> with a CFormView and I try to resize the view with the mouse browser
> scrollbars don4t refresh properly. It seems like if it repaints the
> scrollbars, but next, something happens that make them dissappear. I've
> tried to investigate 
> through MFC source code to see what could be happening, but I didn4t
> succeded.

I found I had to set the CLIPCHILDREN style for the dialog that the 
CFormView is based on.

> void CMyFormView::OnSize(UINT nType, int cx, int cy) 
> {
> CFormView::OnSize(nType, cx, cy);
> 
> // Resize WebControl
> if (m_web.GetSafeHwnd())
> 	{
> 	m_web.SetWidth(cx-40);
> 	m_web.SetHeight(cy-40);
> 	}
> }
> 
> Is this a MFC bug? or, is there a trick to resize this control?

This seems to work fine for me:

void CMyFormView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);

	// Resize WebControl
	if (m_web.GetSafeHwnd()) {
		m_web.MoveWindow(0, 0, cx, cy);
	}
}

I'm using MoveWindow to move the control's child window rather than 
the SetWidth/SetHeight defined by the control.  I'm not sure what they'd 
do in this environment.

One other thing I noticed was that I had to set the focus to the control 
in my view's OnActivateView() if my view was becoming the active one.  
Otherwise it would stop responding to mouse and keyboard actions.

Eric
---------------------------------------------------------------------
Eric Rosenquist, Strata Software Limited   http://www.strataware.com/
mailto:rosenqui@strataware.com   Tel: 613-591-1922  Fax: 613-591-3485
Quote: Who would have guessed reading and writing would pay off!
         -- Homer Simpson
---------------------------------------------------------------------



Peter A. Vanvliet -- pvanvlie@neosoft.com
Thursday, April 03, 1997

Here's the solution that works for me.

void CWWWView::OnSize(UINT nType, int cx, int cy) 
{
    CView::OnSize(nType, cx, cy);
    if (m_bCreated)
    {
        SetRedraw(FALSE);
        m_Browser.MoveWindow(0, 0, cx, cy);
        SetRedraw(TRUE);
        RedrawWindow(0, 0, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN
|RDW_NOERASE);
    }
}



-------------------------------------------------------------------------
On Mon, 24 Mar 1997 10:46:25 +0100 Ramon J. Garcia 
wrote:
Environment: Win 95, VC++ 4.2b w/ Cross Compiler 4.0b

I have a problem with the Microsoft Web Browser Control: if I put it on a
resizable dialog all works fine, but if I put it on a dialog associated
with a CFormView and I try to resize the view with the mouse browser
scrollbars don4t refresh properly. It seems like if it repaints the
scrollbars, but next, something happens that make them dissappear. I've
tried to investigate 
through MFC source code to see what could be happening, but I didn4t
succeded.



Peter.


**********************************************************
****      Peter A. Vanvliet (pvanvlie@neosoft.com)      ****
****  http://www.nanocorp.com/vanvliet/peter/peter.htm  ****
****    Engineering Consultant, NanoSoft Corporation    ****
****                   Houston, Texas                   ****
 **********************************************************
****     Learn more about an alternative tax system     ****
****              http://www.catspals.org/              ****
 **********************************************************





Become an MFC-L member | Вернуться в корень Архива |