Creating A Simple Web Browser Using DotNet

In the following example, we will create a simple Web Browser using the WebBrowser DotNet control provided by System.Windows.Forms

First, we create a simple MAXScript rollout and add a dotNetControl called wb which uses the System.Windows.Forms.WebBrowser control.

Then we open the rollout as a dialog - the WebBrowser will be, of course, empty.

EXAMPLE

rollout webbrowser_rollout "Web Test" width:600 height:600
(
dotNetControl wb "System.Windows.Forms.WebBrowser" pos:[10,10] width:580 height:580
)
createdialog webbrowser_rollout

At this point, we would like to set a default URL for the browser to open at. To see what properties are available in the WebBrowser control, we can call show Properties() on the control:

CODE

showPropertieswebbrowser_rollout.wb

RESULT

.AccessibilityObject : <System.Windows.Forms.AccessibleObject>, read-only
.AccessibleDefaultActionDescription : <System.String>
.AccessibleDescription : <System.String>
.AccessibleName : <System.String>
.AccessibleRole : <System.Windows.Forms.AccessibleRole>
.ActiveXInstance : <System.Object>, read-only
.AllowDrop : <System.Boolean>
.AllowNavigation : <System.Boolean>
.AllowWebBrowserDrop : <System.Boolean>
.Anchor : <System.Windows.Forms.AnchorStyles>
.AutoScrollOffset : <System.Drawing.Point>
.AutoSize : <System.Boolean>
.BackColor : <System.Drawing.Color>
.BackgroundImage : <System.Drawing.Image>
.BackgroundImageLayout : <System.Windows.Forms.ImageLayout>
.BindingContext : <System.Windows.Forms.BindingContext>
.Bottom : <System.Int32>, read-only
.Bounds : <System.Drawing.Rectangle>
.CanFocus : <System.Boolean>, read-only
.CanGoBack : <System.Boolean>, read-only
.CanGoForward : <System.Boolean>, read-only
.CanSelect : <System.Boolean>, read-only
.Capture : <System.Boolean>
.CausesValidation : <System.Boolean>
.CheckForIllegalCrossThreadCalls : <System.Boolean>, static
.ClientRectangle : <System.Drawing.Rectangle>, read-only
.ClientSize : <System.Drawing.Size>
.CompanyName : <System.String>, read-only
.Container : <System.ComponentModel.IContainer>, read-only
.ContainsFocus : <System.Boolean>, read-only
.ContextMenu : <System.Windows.Forms.ContextMenu>
.ContextMenuStrip : <System.Windows.Forms.ContextMenuStrip>
.Controls : <System.Windows.Forms.Control+ControlCollection>, read-only
.Created : <System.Boolean>, read-only
.Cursor : <System.Windows.Forms.Cursor>
.DataBindings : <System.Windows.Forms.ControlBindingsCollection>, read-only
.DefaultBackColor : <System.Drawing.Color>, read-only, static
.DefaultFont : <System.Drawing.Font>, read-only, static
.DefaultForeColor : <System.Drawing.Color>, read-only, static
.DisplayRectangle : <System.Drawing.Rectangle>, read-only
.Disposing : <System.Boolean>, read-only
.Dock : <System.Windows.Forms.DockStyle>
.Document : <System.Windows.Forms.HtmlDocument>, read-only
.DocumentStream : <System.IO.Stream>
.DocumentText : <System.String>
.DocumentTitle : <System.String>, read-only
.DocumentType : <System.String>, read-only
.Enabled : <System.Boolean>
.EncryptionLevel : <System.Windows.Forms.WebBrowserEncryptionLevel>, read-only
.Focused : <System.Boolean>, read-only
.Font : <System.Drawing.Font>
.ForeColor : <System.Drawing.Color>
.Handle : <System.IntPtr>, read-only
.HasChildren : <System.Boolean>, read-only
.Height : <System.Int32>
.ImeMode : <System.Windows.Forms.ImeMode>
.InvokeRequired : <System.Boolean>, read-only
.IsAccessible : <System.Boolean>
.IsBusy : <System.Boolean>, read-only
.IsDisposed : <System.Boolean>, read-only
.IsHandleCreated : <System.Boolean>, read-only
.IsMirrored : <System.Boolean>, read-only
.IsOffline : <System.Boolean>, read-only
.IsWebBrowserContextMenuEnabled : <System.Boolean>
.LayoutEngine : <System.Windows.Forms.Layout.LayoutEngine>, read-only
.Left : <System.Int32>
.Location : <System.Drawing.Point>
.Margin : <System.Windows.Forms.Padding>
.MaximumSize : <System.Drawing.Size>
.MinimumSize : <System.Drawing.Size>
.ModifierKeys : <System.Windows.Forms.Keys>, read-only, static
.MouseButtons : <System.Windows.Forms.MouseButtons>, read-only, static
.MousePosition : <System.Drawing.Point>, read-only, static
.Name : <System.String>
.ObjectForScripting : <System.Object>
.Padding : <System.Windows.Forms.Padding>
.Parent : <System.Windows.Forms.Control>
.PreferredSize : <System.Drawing.Size>, read-only
.ProductName : <System.String>, read-only
.ProductVersion : <System.String>, read-only
.ReadyState : <System.Windows.Forms.WebBrowserReadyState>, read-only
.RecreatingHandle : <System.Boolean>, read-only
.Region : <System.Drawing.Region>
.Right : <System.Int32>, read-only
.RightToLeft : <System.Windows.Forms.RightToLeft>
.ScriptErrorsSuppressed : <System.Boolean>
.ScrollBarsEnabled : <System.Boolean>
.Site : <System.ComponentModel.ISite>, write-only
.Size : <System.Drawing.Size>
.StatusText : <System.String>, read-only
.TabIndex : <System.Int32>
.TabStop : <System.Boolean>
.Tag : <System.Object>
.Text : <System.String>
.Top : <System.Int32>
.TopLevelControl : <System.Windows.Forms.Control>, read-only
 .Url : <System.Uri>
.UseWaitCursor : <System.Boolean> .Version : <System.Version>, read-only .Visible : <System.Boolean> .WebBrowserShortcutsEnabled : <System.Boolean> .Width : <System.Int32> .WindowTarget : <System.Windows.Forms.IWindowTarget>

We can see that there is a property URL exposed by the control. We can assume that this is the property we have to set in order to access a web page.

We also see that the type of the value expected by the DotNet control is System.Uri. This means that we will have to convert the URL MAXScript String value to a dotNetObject value of the expected type:

CODE

webbrowser_rollout.wb.url = dotNetObject "System.Uri" "http://www.autodesk.com"

At this point, if your computer has Internet access, the Web Browser should display the Autodesk homepage:

A Web Browser requires at least an address text field so the user can enter other URLs. We can easily transform our first script into a more advanced Web Browser by adding a MAXScriptedittext control and some event handlers:

SCRIPT

rollout webbrowser_rollout "Web Test" width:600 height:600
(
edittext edt_url "URL:" text:"http://www.autodesk.com"
dotNetControl wb "System.Windows.forms.WebBrowser" pos:[10,22] width:580 height:570
fn openURL urlString = (
wb.url = dotNetObject "System.Uri" urlString )
on edt_url entered txt do openURL txt
on webbrowser_rollout open do openURL edt_url.text
)
createdialog webbrowser_rollout

Try typing in other URLs in the text field and see your Web Browser opening them...

See Also