上一篇介绍了ToolForm的操作机制, 这一篇看一下菜单项的操作.
看ImageMenus.cs会发现如下代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18private void MenuImageCrop_Click(object sender, System.EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
if (!AppWorkspace.ActiveDocumentWorkspace.Selection.IsEmpty)
{
AppWorkspace.ActiveDocumentWorkspace.ExecuteFunction(new CropToSelectionFunction());
}
}
}
private void MenuImageResize_Click(object sender, System.EventArgs e)
{
if (AppWorkspace.ActiveDocumentWorkspace != null)
{
AppWorkspace.ActiveDocumentWorkspace.PerformAction(new ResizeAction());
}
}
有些菜单项是ExecuteFunction, 有些菜单项是PerformAction. 各种Action和Function如下图所示
)
)
ResizeAction继承DocumentWorkspaceAction, CropToSelectionFunction继承HistoryFunctiont
另外AppWorkspace也能执行Action1
2
3
4private void MenuFileOpen_Click(object sender, System.EventArgs e)
{
AppWorkspace.PerformAction(new OpenFileAction());
}
OpenFileAction继承AppWorkspaceAction, 另外有些Action不继承其他类.
它们之间的区别是什么?
DocumentWorkspaceAction与AppWorkspaceAction的区别, 一个是作用的对象不同, 另一个是DocumentWorkspaceAction还能够撤销(命令模式+备忘录模式). 如下所示
1 | internal abstract class AppWorkspaceAction |
那HistoryFunction呢? HistoryFunction与DocumentWorkspaceAction有什么不同1
2public HistoryMemento Execute(IHistoryWorkspace historyWorkspace);
public abstract HistoryMemento OnExecute(IHistoryWorkspace historyWorkspace);
从前面2张图片对比, 从名称上看, HistoryFunction貌似更多在和layer和selection打交道.






