WorkflowView.AddDesignerMessageFilter(WorkflowDesignerMessageFilter) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
public:
void AddDesignerMessageFilter(System::Workflow::ComponentModel::Design::WorkflowDesignerMessageFilter ^ designerMessageFilter);
public void AddDesignerMessageFilter (System.Workflow.ComponentModel.Design.WorkflowDesignerMessageFilter designerMessageFilter);
member this.AddDesignerMessageFilter : System.Workflow.ComponentModel.Design.WorkflowDesignerMessageFilter -> unit
Public Sub AddDesignerMessageFilter (designerMessageFilter As WorkflowDesignerMessageFilter)
매개 변수
- designerMessageFilter
- WorkflowDesignerMessageFilter
예제
다음 예제에서는 WorkflowDesignerLoader가 만들어지고 WorkflowView 개체가 워크플로 디자인 화면과 연결됩니다. 메시지 알림을 검색하기 위해 WorkflowDesignerMessageFilter가 만들어지고 WorkflowView 개체에 추가됩니다.
이 코드 예제는 WorkflowViewWrapper.cs 파일에 있는 Outlook Workflow Wizard SDK 샘플의 일부입니다. 자세한 내용은 Outlook Workflow Wizard 샘플합니다.
public WorkflowViewWrapper()
{
this.loader = new Loader();
// Create a Workflow Design Surface
this.surface = new DesignSurface();
this.surface.BeginLoad(this.loader);
// Get the Workflow Designer Host
this.Host = this.surface.GetService(typeof(IDesignerHost)) as IDesignerHost;
if (this.Host == null)
return;
// Create a Sequential Workflow by using the Workflow Designer Host
SequentialWorkflow = (SequentialWorkflowActivity)Host.CreateComponent(typeof(SequentialWorkflowActivity));
SequentialWorkflow.Name = "CustomOutlookWorkflow";
// Create a Workflow View on the Workflow Design Surface
this.workflowView = new WorkflowView(this.surface as IServiceProvider);
// Add a message filter to the workflow view, to support panning
MessageFilter filter = new MessageFilter(this.surface as IServiceProvider, this.workflowView);
this.workflowView.AddDesignerMessageFilter(filter);
// Activate the Workflow View
this.Host.Activate();
this.workflowView.Dock = DockStyle.Fill;
this.Controls.Add(workflowView);
this.Dock = DockStyle.Fill;
}
Public Sub New()
Me.loaderValue = New Loader()
' Create a Workflow Design Surface
Me.surface = New DesignSurface()
Me.surface.BeginLoad(Me.loaderValue)
' Get the Workflow Designer Host
If Me.surface.GetService(GetType(IDesignerHost)) IsNot Nothing AndAlso TypeOf Me.surface.GetService(GetType(IDesignerHost)) Is IDesignerHost Then
Me.Host = CType(Me.surface.GetService(GetType(IDesignerHost)), IDesignerHost)
Else
Return
End If
' Create a Sequential Workflow by using the Workflow Designer Host
SequentialWorkflow = CType(Host.CreateComponent(GetType(SequentialWorkflowActivity)), SequentialWorkflowActivity)
SequentialWorkflow.Name = "CustomOutlookWorkflow"
' Create a Workflow View on the Workflow Design Surface
Me.workflowView = New WorkflowView(CType(Me.surface, IServiceProvider))
' Add a message filter to the workflow view, to support panning
Dim filter As MessageFilter = New MessageFilter(CType(Me.surface, IServiceProvider), Me.workflowView)
Me.workflowView.AddDesignerMessageFilter(filter)
' Activate the Workflow View
Me.Host.Activate()
Me.workflowView.Dock = DockStyle.Fill
Me.Controls.Add(workflowView)
Me.Dock = DockStyle.Fill
End Sub
이전 코드에서 만든 MessageFilter
개체는 WorkflowDesignerMessageFilter 클래스에서 파생됩니다. 이 클래스의 메서드를 재정의하면 WorkflowView 개체에서 사용자 인터페이스 이벤트가 발생할 때마다 메시지 필터에 알립니다.
internal sealed class MessageFilter : WorkflowDesignerMessageFilter
{
private bool mouseDown;
private IServiceProvider serviceProvider;
private WorkflowView workflowView;
public MessageFilter(IServiceProvider provider, WorkflowView view)
{
this.serviceProvider = provider;
this.workflowView = view;
}
protected override bool OnMouseDown(MouseEventArgs eventArgs)
{
// Allow other components to process this event by not returning true.
this.mouseDown = true;
return false;
}
protected override bool OnMouseMove(MouseEventArgs eventArgs)
{
// Allow other components to process this event by not returning true.
if (this.mouseDown)
{
this.workflowView.ScrollPosition = new Point(eventArgs.X, eventArgs.Y);
}
return false;
}
protected override bool OnMouseUp(MouseEventArgs eventArgs)
{
// Allow other components to process this event by not returning true.
this.mouseDown = false;
return false;
}
protected override bool OnMouseDoubleClick(MouseEventArgs eventArgs)
{
this.mouseDown = false;
return true;
}
protected override bool OnMouseEnter(MouseEventArgs eventArgs)
{
// Allow other components to process this event by not returning true.
this.mouseDown = false;
return false;
}
protected override bool OnMouseHover(MouseEventArgs eventArgs)
{
// Allow other components to process this event by not returning true.
this.mouseDown = false;
return false;
}
protected override bool OnMouseLeave()
{
// Allow other components to process this event by not returning true.
this.mouseDown = false;
return false;
}
protected override bool OnMouseWheel(MouseEventArgs eventArgs)
{
this.mouseDown = false;
return true;
}
protected override bool OnMouseCaptureChanged()
{
// Allow other components to process this event by not returning true.
this.mouseDown = false;
return false;
}
protected override bool OnDragEnter(DragEventArgs eventArgs)
{
return true;
}
protected override bool OnDragOver(DragEventArgs eventArgs)
{
return true;
}
protected override bool OnDragLeave()
{
return true;
}
protected override bool OnDragDrop(DragEventArgs eventArgs)
{
return true;
}
protected override bool OnGiveFeedback(GiveFeedbackEventArgs gfbevent)
{
return true;
}
protected override bool OnQueryContinueDrag(QueryContinueDragEventArgs qcdevent)
{
return true;
}
protected override bool OnKeyUp(KeyEventArgs eventArgs)
{
return true;
}
protected override bool OnShowContextMenu(Point menuPoint)
{
return true;
}
protected override bool OnKeyDown(KeyEventArgs eventArgs)
{
if (eventArgs.KeyCode == Keys.Delete)
{
ISelectionService selectionService = (ISelectionService)this.serviceProvider.GetService(typeof(ISelectionService));
if (selectionService != null && selectionService.PrimarySelection is CodeActivity)
{
CodeActivity codeActivityComponent = (CodeActivity)selectionService.PrimarySelection;
CompositeActivity parentActivity = codeActivityComponent.Parent;
if (parentActivity != null)
{
parentActivity.Activities.Remove(codeActivityComponent);
this.ParentView.Update();
}
}
}
return true;
}
}
Friend Class MessageFilter
Inherits WorkflowDesignerMessageFilter
Private mouseDown As Boolean
Private serviceProvider As IServiceProvider
Private workflowView As WorkflowView
Public Sub New(ByVal provider As IServiceProvider, ByVal view As WorkflowView)
Me.serviceProvider = provider
Me.workflowView = view
End Sub
Protected Overrides Function OnMouseDown(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = True
Return False
End Function
Protected Overrides Function OnMouseMove(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
' Allow other components to process this event by not returning true.
If (Me.mouseDown) Then
Me.workflowView.ScrollPosition = New Point(eventArgs.X, eventArgs.Y)
End If
Return False
End Function
Protected Overrides Function OnMouseUp(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = False
Return False
End Function
Protected Overrides Function OnMouseDoubleClick(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
Me.mouseDown = False
Return True
End Function
Protected Overrides Function OnMouseEnter(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = False
Return False
End Function
Protected Overrides Function OnMouseHover(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = False
Return False
End Function
Protected Overrides Function OnMouseLeave() As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = False
Return False
End Function
Protected Overrides Function OnMouseWheel(ByVal eventArgs As System.Windows.Forms.MouseEventArgs) As Boolean
Me.mouseDown = False
Return True
End Function
Protected Overrides Function OnMouseCaptureChanged() As Boolean
' Allow other components to process this event by not returning true.
Me.mouseDown = False
Return False
End Function
Protected Overrides Function OnDragEnter(ByVal eventArgs As System.Windows.Forms.DragEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnDragOver(ByVal eventArgs As System.Windows.Forms.DragEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnDragLeave() As Boolean
Return True
End Function
Protected Overrides Function OnDragDrop(ByVal eventArgs As System.Windows.Forms.DragEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnGiveFeedback(ByVal eventArgs As System.Windows.Forms.GiveFeedbackEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnQueryContinueDrag(ByVal eventArgs As System.Windows.Forms.QueryContinueDragEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnKeyUp(ByVal eventArgs As System.Windows.Forms.KeyEventArgs) As Boolean
Return True
End Function
Protected Overrides Function OnShowContextMenu(ByVal screenMenuPoint As System.Drawing.Point) As Boolean
Return True
End Function
Protected Overrides Function OnKeyDown(ByVal eventArgs As System.Windows.Forms.KeyEventArgs) As Boolean
If eventArgs.KeyCode = Keys.Delete Then
Dim selectionService As ISelectionService = CType(Me.serviceProvider.GetService(GetType(ISelectionService)), ISelectionService)
If selectionService IsNot Nothing AndAlso TypeOf selectionService.PrimarySelection Is CodeActivity Then
Dim codeActivityComponent As CodeActivity = CType(selectionService.PrimarySelection, CodeActivity)
Dim parentActivity As CompositeActivity = codeActivityComponent.Parent
If parentActivity IsNot Nothing Then
parentActivity.Activities.Remove(codeActivityComponent)
Me.ParentView.Update()
End If
End If
End If
Return True
End Function
End Class
설명
WorkflowDesignerMessageFilter는 WorkflowView로부터의 메시지를 처리하는 구성 요소입니다.
Strategy
디자인 패턴을 사용하면 WorkflowView가 WorkflowDesignerMessageFilter로 처리할 메시지를 전달합니다.
마우스 이벤트, 키보드 이벤트, paint 및 레이아웃 이벤트는 WorkflowDesignerMessageFilter와 연결된 WorkflowView로 전달됩니다.
적용 대상
.NET