public HtmlEditorControl(IMainFrameWindow mainFrameWindow, IStatusBar statusBar, MshtmlOptions options, ISpellingChecker spellingChecker, IInternetSecurityManager internetSecurityManager, CommandManager commandManager) { _commandManager = commandManager; // save reference to main frame window _mainFrameWindow = mainFrameWindow; _statusBar = statusBar; _spellingChecker = spellingChecker; // This call is required by the Windows.Forms Form Designer. InitializeComponent(); //initialize the data format handlers for this control DataFormatHandlerFactory = new HtmlEditorMarshallingHandler(this); MarshalImagesSupported = true; MarshalFilesSupported = true; MarshalUrlSupported = true; MarshalHtmlSupported = true; MarshalTextSupported = true; // The version host service provider tells MSHTML what feature versions are available (e.g. VML 1.0). VersionHostServiceProvider = new VersionHostServiceProvider(new DisableVmlVersionHost()); // initialize the html editor if (_editorCache == null) { _internetSecurityManager = new InternetSecurityManagerShim(internetSecurityManager); // If mainFrameWindow == null, then we are pre-caching mshtml and don't want it to steal focus _mshtmlEditor = new MshtmlEditor(this, options, (mainFrameWindow == null)); } else { _mshtmlEditor = _editorCache.Editor; _internetSecurityManager = _editorCache.SecurityManager; _internetSecurityManager.SecurityManager = internetSecurityManager; _editorCache = null; _mshtmlEditor.Active = true; _mshtmlEditor.MshtmlControl.ProtectFocus = false; _mshtmlEditor.ClearContextMenuHandlers(); _mshtmlEditor.SetServiceProvider(this); _mshtmlEditor.UpdateOptions(options, true); } _mshtmlOptions = options; this.DefaultBlockElement = _mshtmlOptions.UseDivForCarriageReturn ? (DefaultBlockElement)new DivDefaultBlockElement() : new ParagraphDefaultBlockElement(); PostEditorEvent += new MshtmlEditor.EditDesignerEventHandler(HtmlEditorControl_PostEditorEvent); HandleClear += new HtmlEditorSelectionOperationEventHandler(TryMoveIntoNextTable); // Hook the editor into the stream of the security manager so we // can allow our own objects (smart content, image resizing) to load in the editor _internetSecurityManager.HandleProcessUrlAction = HandleProcessUrlAction; // Automation uses this to find the editor to automate it _mshtmlEditor.Name = "BorderControl"; // subscribe to key events _mshtmlEditor.DocumentComplete += new EventHandler(_mshtmlEditor_DocumentComplete); _mshtmlEditor.DocumentEvents.GotFocus += htmlEditor_GotFocus; _mshtmlEditor.DocumentEvents.LostFocus += htmlEditor_LostFocus; _mshtmlEditor.DocumentEvents.KeyDown += new HtmlEventHandler(DocumentEvents_KeyDown); _mshtmlEditor.DocumentEvents.KeyUp += new HtmlEventHandler(DocumentEvents_KeyUp); _mshtmlEditor.DocumentEvents.KeyPress += new HtmlEventHandler(DocumentEvents_KeyPress); _mshtmlEditor.DocumentEvents.MouseDown += new HtmlEventHandler(DocumentEvents_MouseDown); _mshtmlEditor.DocumentEvents.MouseUp += new HtmlEventHandler(DocumentEvents_MouseUp); _mshtmlEditor.DocumentEvents.SelectionChanged += new EventHandler(DocumentEvents_SelectionChanged); _mshtmlEditor.DisplayChanged += new EventHandler(_mshtmlEditor_DisplayChanged); _mshtmlEditor.DocumentEvents.Click += new HtmlEventHandler(DocumentEvents_Click); _mshtmlEditor.CommandKey += new KeyEventHandler(_mshtmlEditor_CommandKey); _mshtmlEditor.DropTargetHandler = new MshtmlEditor.DropTargetUIHandler(_mshtmlEditor_GetDropTarget); _mshtmlEditor.BeforeShowContextMenu += new EventHandler(_mshtmlEditor_BeforeShowContextMenu); _mshtmlEditor.MshtmlControl.DLControlFlagsChanged += new EventHandler(_mshtmlControl_DLControlFlagsChanged); _mshtmlEditor.TranslateAccelerator += new HtmlEditDesignerEventHandler(_mshtmlEditor_TranslateAccelerator); InitDamageServices(); // notify subclasses that the editor has been created OnEditorCreated(); }
/// <summary> /// Clean up any resources being used. /// </summary> public virtual void Dispose() { _internetSecurityManager.ReleaseInnerSecurityManager(); PostEditorEvent -= new MshtmlEditor.EditDesignerEventHandler(HtmlEditorControl_PostEditorEvent); HandleClear -= new HtmlEditorSelectionOperationEventHandler(TryMoveIntoNextTable); if (components != null) { components.Dispose(); } // detach behaviors DetachBehaviors(); // dispose drag and drop manager if (mshtmlEditorDragAndDropTarget != null) { mshtmlEditorDragAndDropTarget.Dispose(); mshtmlEditorDragAndDropTarget = null; } if (_dataFormatHandlerFactory != null) { _dataFormatHandlerFactory.Dispose(); _dataFormatHandlerFactory = null; } if (_damageServices != null) _damageServices.Dispose(); // dispose link navigator if (linkNavigator != null) linkNavigator.Dispose(); if (_mshtmlEditor != null) { _mshtmlEditor.DocumentComplete -= new EventHandler(_mshtmlEditor_DocumentComplete); _mshtmlEditor.DocumentEvents.GotFocus -= htmlEditor_GotFocus; _mshtmlEditor.DocumentEvents.LostFocus -= htmlEditor_LostFocus; _mshtmlEditor.DocumentEvents.KeyDown -= new HtmlEventHandler(DocumentEvents_KeyDown); _mshtmlEditor.DocumentEvents.KeyUp -= new HtmlEventHandler(DocumentEvents_KeyUp); _mshtmlEditor.DocumentEvents.KeyPress -= new HtmlEventHandler(DocumentEvents_KeyPress); _mshtmlEditor.DocumentEvents.MouseDown -= new HtmlEventHandler(DocumentEvents_MouseDown); _mshtmlEditor.DocumentEvents.MouseUp -= new HtmlEventHandler(DocumentEvents_MouseUp); _mshtmlEditor.DocumentEvents.SelectionChanged -= new EventHandler(DocumentEvents_SelectionChanged); _mshtmlEditor.DisplayChanged -= new EventHandler(_mshtmlEditor_DisplayChanged); _mshtmlEditor.DocumentEvents.Click -= new HtmlEventHandler(DocumentEvents_Click); _mshtmlEditor.CommandKey -= new KeyEventHandler(_mshtmlEditor_CommandKey); _mshtmlEditor.BeforeShowContextMenu -= new EventHandler(_mshtmlEditor_BeforeShowContextMenu); _mshtmlEditor.DropTargetHandler = null; _mshtmlEditor.PreHandleEvent -= new HtmlEditDesignerEventHandler(OnPreHandleEvent); _mshtmlEditor.MshtmlControl.DLControlFlagsChanged -= new EventHandler(_mshtmlControl_DLControlFlagsChanged); _mshtmlEditor.TranslateAccelerator -= new HtmlEditDesignerEventHandler(_mshtmlEditor_TranslateAccelerator); if (ShouldCacheEditor()) { _mshtmlEditor.Active = false; _editorCache = new CachedEditorAndSecurityManager { Editor = _mshtmlEditor, SecurityManager = _internetSecurityManager }; } else { _mshtmlEditor.Dispose(); _mshtmlEditor = null; } } }