Seltsame Werte von Document.Window.Size im WebBrowser nach optical_zoom command

11/07/2009 - 07:52 von Wolfgang | Report spam
Hallo zusammen,

ich benutze .net 2.0 WebBrowser mit c#.

Es wird die Methode aufgerufen:
_axIWebBrowser2.ExecWB(
NativeMethods.OLECMDID.OLECMDID_OPTICAL_ZOOM,
NativeMethods.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
ref setZoomFactor,
ref getZoomFaktor );

wobei _axIWebBrowser2 ist das com-object im webbrowser.
Das wiederum erhalte ich durch:
protected override void AttachInterfaces(object nativeActiveXObject)
{
_axIWebBrowser2 = (UnsafeNativeMethods.IWebBrowser2)nativeActiveXObject;
base.AttachInterfaces(nativeActiveXObject);
}

ok, so weit so gut, aber nach Aufruf des execWB-Commands um zu zoomen, das
size property
von WebBrowser.Document.Window hat Werte die ich nicht verstehe.

Vor allem, die Werten werden kleiner oder größer auch wenn ich nur in eine
Richtung zoome.
Ich finde einfach die Logik nicht wie sich die Size Werte àndern.

ich habe verschiedene Wege versucht die Höhe des Dokumentenfensters zu
erhalten z.B.
IHTMLDocument2 pDoc2 = Browser.AxIWebBrowser.Document as IHTMLDocument2;
IHTMLElement pElem = pDoc2.body;
IHTMLElement2 pBodyElem = pElem as IHTMLElement2;

int bodyWidth = pBodyElem.scrollWidth;
int bodyHeight = pBodyElem.scrollHeight;

die Werte stimmen immer überein, aber wie gesagt, ich verstehe nicht was sie
aussagen.

Nebenbei, was ich dabei festgestellt habe:
int scrollTop = pBodyElem.scrollTop ist immer 0.

getestet wurde Auf Vista64 mit IE8 und WinXP mit IE7

Ich brauche diese Werte, da ich das Fenster manuell scrollen muss.

Hat irgendjemand ne Idee was die Size Werte nach dem zoomen für eine
Bedeutung haben
oder wie ich die richtigen Werte bekomme?

thx schon mal im vorraus

Grüße
Wolfgang

ps. may be this is the wrong newsgroup, if so please give me a hint which
one is the right one!
 

Lesen sie die antworten

#1 Frank Dzaebel
11/07/2009 - 10:53 | Warnen spam
Hallo Wolfgang,

ich benutze .net 2.0 WebBrowser mit c#.
getestet wurde Auf Vista64 mit IE8 und WinXP mit IE7
Ich brauche diese Werte, da ich das Fenster manuell scrollen muss.
Hat irgendjemand ne Idee was die Size Werte nach dem zoomen für eine
Bedeutung haben



Folgender Quellcode funktioniert bei mir (Width/Height jw. ok) .

(Beachte ggf., dass hier nur managed Interop-Wrapper
benutzt werden, ohne AttachInterfaces und Zugriff über
NativeMethods o.à.)

// Verweis zufügen: %windir%/System32/SHDocVw.dll
// using SHDocVw;

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("http://www.Dzaebel.NET");
}

private void button1_Click(object sender, EventArgs e)
{
object setZoomFactor = 50; // nur 25er Schritte!
object getZoomFaktor = IntPtr.Zero;
InternetExplorer ie = webBrowser1.ActiveXInstance
as InternetExplorer;

Size sizeVorher = webBrowser1.Document.Window.Size;
ie.ExecWB( OLECMDID.OLECMDID_OPTICAL_ZOOM,
OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
ref setZoomFactor, ref getZoomFaktor);

Size sizeNachher = webBrowser1.Document.Window.Size;
double sizeFactor = (int)getZoomFaktor / 100.0;
if (SizeStimmt(sizeVorher.Width, sizeNachher.Width * sizeFactor))
MessageBox.Show("Width ok");
if (sizeVorher.Height == sizeNachher.Height * sizeFactor)
MessageBox.Show("Height ok");
}

private bool SizeStimmt(int vorher, double nachher)
{
return Math.Abs(vorher-nachher) < 1;
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen