From a6775bd324d8525ff1aa6be9d13a5d13cfbe5e28 Mon Sep 17 00:00:00 2001 From: kriastans Date: Fri, 20 Sep 2024 21:32:38 +0800 Subject: [PATCH] =?UTF-8?q?[update]=20=E5=AE=9E=E6=97=B6=E7=AC=94=E9=94=8B?= =?UTF-8?q?=E6=94=AF=E6=8C=81=EF=BC=8C=E6=9B=B4=E6=96=B0README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + Ink Canvas.sln | 64 ++++++++++ .../App.config | 6 + InkCanvasForClass.IccInkCanvas.Demo/App.xaml | 9 ++ .../App.xaml.cs | 15 +++ ...InkCanvasForClass.IccInkCanvas.Demo.csproj | 98 +++++++++++++++ .../MainWindow.xaml | 12 ++ .../MainWindow.xaml.cs | 25 ++++ .../Properties/AssemblyInfo.cs | 55 ++++++++ .../Properties/Resources.Designer.cs | 62 ++++++++++ .../Properties/Resources.resx | 117 ++++++++++++++++++ .../Properties/Settings.Designer.cs | 26 ++++ .../Properties/Settings.settings | 7 ++ .../IccInkCanvas.xaml | 12 ++ .../IccInkCanvas.xaml.cs | 25 ++++ .../InkCanvasForClass.IccInkCanvas.csproj | 83 +++++++++++++ .../Properties/AssemblyInfo.cs | 55 ++++++++ .../Properties/Resources.Designer.cs | 62 ++++++++++ .../Properties/Resources.resx | 117 ++++++++++++++++++ .../Properties/Settings.Designer.cs | 30 +++++ .../Properties/Settings.settings | 7 ++ .../MainWindow_cs/MW_InkCanvas.cs | 98 +++++++++++++++ README.md | 14 ++- docs/components/SegmentedButtons.md | 7 ++ 24 files changed, 1006 insertions(+), 4 deletions(-) create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/App.config create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/App.xaml create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/App.xaml.cs create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/InkCanvasForClass.IccInkCanvas.Demo.csproj create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml.cs create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/Properties/AssemblyInfo.cs create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.Designer.cs create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.resx create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.Designer.cs create mode 100644 InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.settings create mode 100644 InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml create mode 100644 InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml.cs create mode 100644 InkCanvasForClass.IccInkCanvas/InkCanvasForClass.IccInkCanvas.csproj create mode 100644 InkCanvasForClass.IccInkCanvas/Properties/AssemblyInfo.cs create mode 100644 InkCanvasForClass.IccInkCanvas/Properties/Resources.Designer.cs create mode 100644 InkCanvasForClass.IccInkCanvas/Properties/Resources.resx create mode 100644 InkCanvasForClass.IccInkCanvas/Properties/Settings.Designer.cs create mode 100644 InkCanvasForClass.IccInkCanvas/Properties/Settings.settings diff --git a/.gitignore b/.gitignore index ba87ac5..292e355 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,9 @@ /InkCanvasForClass.PowerPoint.InteropHelper/bin /InkCanvasForClass.PowerPoint.Vsto/obj /InkCanvasForClass.PowerPoint.Vsto/bin +/InkCanvasForClass.IccInkCanvas/obj +/InkCanvasForClass.IccInkCanvas/bin +/InkCanvasForClass.IccInkCanvas.Demo/obj +/InkCanvasForClass.IccInkCanvas.Demo/bin /.vs /.idea \ No newline at end of file diff --git a/Ink Canvas.sln b/Ink Canvas.sln index 5c68c00..4cb9c4f 100644 --- a/Ink Canvas.sln +++ b/Ink Canvas.sln @@ -13,6 +13,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClass.PowerPoin EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClass.PowerPoint.VstoPlugin", "InkCanvasForClass.PowerPoint.VstoPlugin\InkCanvasForClass.PowerPoint.VstoPlugin.csproj", "{8C593467-E54D-4FA7-881C-78F3CC48A867}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClass.IccInkCanvas", "InkCanvasForClass.IccInkCanvas\InkCanvasForClass.IccInkCanvas.csproj", "{43929D8F-5630-4786-B75D-E203EA3E992F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InkCanvasForClass.IccInkCanvas.Demo", "InkCanvasForClass.IccInkCanvas.Demo\InkCanvasForClass.IccInkCanvas.Demo.csproj", "{94E97F70-CACD-453B-8114-08DFFDDA5A46}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -182,6 +186,66 @@ Global {8C593467-E54D-4FA7-881C-78F3CC48A867}.x86 Debug|x64.Build.0 = Debug|Any CPU {8C593467-E54D-4FA7-881C-78F3CC48A867}.x86 Debug|x86.ActiveCfg = Debug|Any CPU {8C593467-E54D-4FA7-881C-78F3CC48A867}.x86 Debug|x86.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|ARM.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|ARM64.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|x64.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|x64.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|x86.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Debug|x86.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|Any CPU.Build.0 = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|ARM.ActiveCfg = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|ARM.Build.0 = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|ARM64.ActiveCfg = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|ARM64.Build.0 = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|x64.ActiveCfg = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|x64.Build.0 = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|x86.ActiveCfg = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.Release|x86.Build.0 = Release|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|Any CPU.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|ARM.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|ARM.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|ARM64.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|ARM64.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|x64.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|x64.Build.0 = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|x86.ActiveCfg = Debug|Any CPU + {43929D8F-5630-4786-B75D-E203EA3E992F}.x86 Debug|x86.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|ARM.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|ARM.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|ARM64.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|x64.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|x64.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|x86.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Debug|x86.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|Any CPU.Build.0 = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|ARM.ActiveCfg = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|ARM.Build.0 = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|ARM64.ActiveCfg = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|ARM64.Build.0 = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|x64.ActiveCfg = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|x64.Build.0 = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|x86.ActiveCfg = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.Release|x86.Build.0 = Release|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|Any CPU.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|ARM.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|ARM.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|ARM64.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|ARM64.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|x64.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|x64.Build.0 = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|x86.ActiveCfg = Debug|Any CPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46}.x86 Debug|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/InkCanvasForClass.IccInkCanvas.Demo/App.config b/InkCanvasForClass.IccInkCanvas.Demo/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas.Demo/App.xaml b/InkCanvasForClass.IccInkCanvas.Demo/App.xaml new file mode 100644 index 0000000..7e20ae3 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/InkCanvasForClass.IccInkCanvas.Demo/App.xaml.cs b/InkCanvasForClass.IccInkCanvas.Demo/App.xaml.cs new file mode 100644 index 0000000..ad12f36 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/App.xaml.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace InkCanvasForClass.IccInkCanvas.Demo { + /// + /// App.xaml 的交互逻辑 + /// + public partial class App : Application { + } +} diff --git a/InkCanvasForClass.IccInkCanvas.Demo/InkCanvasForClass.IccInkCanvas.Demo.csproj b/InkCanvasForClass.IccInkCanvas.Demo/InkCanvasForClass.IccInkCanvas.Demo.csproj new file mode 100644 index 0000000..5ce39ef --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/InkCanvasForClass.IccInkCanvas.Demo.csproj @@ -0,0 +1,98 @@ + + + + + Debug + AnyCPU + {94E97F70-CACD-453B-8114-08DFFDDA5A46} + WinExe + InkCanvasForClass.IccInkCanvas.Demo + InkCanvasForClass.IccInkCanvas.Demo + v4.7.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml b/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml new file mode 100644 index 0000000..31d139f --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml.cs b/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml.cs new file mode 100644 index 0000000..50a566a --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/MainWindow.xaml.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace InkCanvasForClass.IccInkCanvas.Demo { + /// + /// MainWindow.xaml 的交互逻辑 + /// + public partial class MainWindow : Window { + public MainWindow() { + InitializeComponent(); + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas.Demo/Properties/AssemblyInfo.cs b/InkCanvasForClass.IccInkCanvas.Demo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1bf9bc3 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("InkCanvasForClass.IccInkCanvas.Demo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("InkCanvasForClass.IccInkCanvas.Demo")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请设置 +//.csproj 文件中的 CultureYouAreCodingWith +//在 中。例如,如果你使用的是美国英语。 +//使用的是美国英语,请将 设置为 en-US。 然后取消 +//对以下 NeutralResourceLanguage 特性的注释。 更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(未在页面中找到资源时使用, + //或应用程序资源字典中找到时使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(未在页面中找到资源时使用, + //、应用程序或任何主题专用资源字典中找到时使用) +)] + + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.Designer.cs b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.Designer.cs new file mode 100644 index 0000000..644814d --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace InkCanvasForClass.IccInkCanvas.Demo.Properties { + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InkCanvasForClass.IccInkCanvas.Demo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.resx b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.Designer.cs b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.Designer.cs new file mode 100644 index 0000000..adfc472 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace InkCanvasForClass.IccInkCanvas.Demo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.settings b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas.Demo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml b/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml new file mode 100644 index 0000000..2cace9c --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml.cs b/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml.cs new file mode 100644 index 0000000..7a8f8f7 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/IccInkCanvas.xaml.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace InkCanvasForClass.IccInkCanvas { + /// + /// IccInkCanvas.xaml 的交互逻辑 + /// + public partial class IccInkCanvas : UserControl { + public IccInkCanvas() { + InitializeComponent(); + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas/InkCanvasForClass.IccInkCanvas.csproj b/InkCanvasForClass.IccInkCanvas/InkCanvasForClass.IccInkCanvas.csproj new file mode 100644 index 0000000..2a13bcd --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/InkCanvasForClass.IccInkCanvas.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {43929D8F-5630-4786-B75D-E203EA3E992F} + library + InkCanvasForClass.IccInkCanvas + InkCanvasForClass.IccInkCanvas + v4.7.2 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 4.0 + + + + + + + + IccInkCanvas.xaml + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + Designer + MSBuild:Compile + + + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas/Properties/AssemblyInfo.cs b/InkCanvasForClass.IccInkCanvas/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9039c3f --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("InkCanvasForClass.IccInkCanvas")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("InkCanvasForClass.IccInkCanvas")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +//若要开始生成可本地化的应用程序,请设置 +//.csproj 文件中的 CultureYouAreCodingWith +//在 中。例如,如果你使用的是美国英语。 +//使用的是美国英语,请将 设置为 en-US。 然后取消 +//对以下 NeutralResourceLanguage 特性的注释。 更新 +//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。 + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly:ThemeInfo( + ResourceDictionaryLocation.None, //主题特定资源词典所处位置 + //(未在页面中找到资源时使用, + //或应用程序资源字典中找到时使用) + ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置 + //(未在页面中找到资源时使用, + //、应用程序或任何主题专用资源字典中找到时使用) +)] + + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/InkCanvasForClass.IccInkCanvas/Properties/Resources.Designer.cs b/InkCanvasForClass.IccInkCanvas/Properties/Resources.Designer.cs new file mode 100644 index 0000000..13765ba --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本: 4.0.30319.42000 +// +// 对此文件的更改可能导致不正确的行为,如果 +// 重新生成代码,则所做更改将丢失。 +// +//------------------------------------------------------------------------------ + +namespace InkCanvasForClass.IccInkCanvas.Properties { + + + /// + /// 强类型资源类,用于查找本地化字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("InkCanvasForClass.IccInkCanvas.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas/Properties/Resources.resx b/InkCanvasForClass.IccInkCanvas/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/InkCanvasForClass.IccInkCanvas/Properties/Settings.Designer.cs b/InkCanvasForClass.IccInkCanvas/Properties/Settings.Designer.cs new file mode 100644 index 0000000..2e4493f --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace InkCanvasForClass.IccInkCanvas.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/InkCanvasForClass.IccInkCanvas/Properties/Settings.settings b/InkCanvasForClass.IccInkCanvas/Properties/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/InkCanvasForClass.IccInkCanvas/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs b/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs index 6d964cf..cd307b2 100644 --- a/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs +++ b/InkCanvasForClass/MainWindow_cs/MW_InkCanvas.cs @@ -2,11 +2,13 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; +using System.Linq; using System.Reflection; using System.Windows; using System.Windows.Controls; using System.Windows.Ink; using System.Windows.Input; +using System.Windows.Input.StylusPlugIns; using System.Windows.Media; using iNKORE.UI.WPF.Helpers; @@ -123,8 +125,104 @@ namespace Ink_Canvas { } } + class CustomDynamicRenderer : DynamicRenderer { + + private Point prevPoint; + + private List pointsList = new List(); + + private void ClearPointsList() { + pointsList.Clear(); + } + + private void PushPoint(StylusPoint point) { + pointsList.Add(point); + if (pointsList.Count > 15) { + pointsList.RemoveRange(0,pointsList.Count - 15); + } + } + + protected override void OnStylusDown(RawStylusInput rawStylusInput) { + prevPoint = new Point(double.NegativeInfinity, double.NegativeInfinity); + ClearPointsList(); + var pts = rawStylusInput.GetStylusPoints(); + if (pts.Count == 1) { + PushPoint(pts.Single()); + } else if (pts.Count > 1) { + PushPoint(pts[pts.Count-1]); + } + Trace.WriteLine(pointsList.Count); + base.OnStylusDown(rawStylusInput); + } + + protected override void OnStylusMove(RawStylusInput rawStylusInput) { + base.OnStylusMove(rawStylusInput); + var pts = rawStylusInput.GetStylusPoints(); + if (pts.Count == 1) { + PushPoint(pts.Single()); + } else if (pts.Count > 1) { + PushPoint(pts[pts.Count-1]); + } + Trace.WriteLine(pointsList.Count); + } + + protected override void OnDraw(DrawingContext drawingContext, + StylusPointCollection stylusPoints, + Geometry geometry, Brush fillBrush) { + try { + var sp = new StylusPointCollection(); + var n = pointsList.Count - 1; + var pressure = 0.1; + var x = 10; + if (n == 1) return; + if (n >= x) { + for (var i = 0; i < n - x; i++) { + var point = new StylusPoint(); + + point.PressureFactor = (float)0.5; + point.X = pointsList[i].X; + point.Y = pointsList[i].Y; + sp.Add(point); + } + + for (var i = n - x; i <= n; i++) { + var point = new StylusPoint(); + + point.PressureFactor = (float)((0.5 - pressure) * (n - i) / x + pressure); + point.X = pointsList[i].X; + point.Y = pointsList[i].Y; + sp.Add(point); + } + } + else { + for (var i = 0; i <= n; i++) { + var point = new StylusPoint(); + + point.PressureFactor = (float)(0.4 * (n - i) / n + pressure); + point.X = pointsList[i].X; + point.Y = pointsList[i].Y; + sp.Add(point); + } + } + + var da = DrawingAttributes.Clone(); + da.Width *= 0.75; + da.Height *= 0.75; + var stk = new Stroke(sp,da); + stk.Draw(drawingContext); + } + catch { } + + } + } + public class IccInkCanvas : InkCanvas { + + CustomDynamicRenderer customDynamicRenderer = new CustomDynamicRenderer(); + public IccInkCanvas() { + DynamicRenderer = customDynamicRenderer; + // 通过反射移除InkCanvas自带的默认 Delete按键事件 var commandBindingsField = typeof(CommandManager).GetField("_classCommandBindings", BindingFlags.NonPublic | BindingFlags.Static); diff --git a/README.md b/README.md index 21be75f..61f5657 100644 --- a/README.md +++ b/README.md @@ -157,16 +157,22 @@ ICC 可以支持 WPS,但目前无法同时支持 MSOffice 和 WPS。若要启 ## 子项目 **`InkCanvasForClass.IACoreHelper`**
-该项目实现了基于 .NET Framework 4.7.2 和 x86 运行环境的墨迹识别库 IACore 的封装 +该项目实现了基于 .NET Framework 4.7.2 和 x86 运行环境的墨迹识别库 IACore 的封装。 **`InkCanvasForClass.PowerPoint.InteropHelper`**
-该项目将 ICC 的 PPT 适配功能给单独提取了出来,并下方 ZPH 的部分功能到本项目上面 +该项目将 ICC 的 PPT 适配功能给单独提取了出来,并下放 ZPH 的部分功能到本项目上面。 **`InkCanvasForClass.PowerPoint.Vsto`**
-该项目实现了 ICC 对 PPT 的 VSTO 插件支持,可以缓解 Office 和 WPS 共存导致的 COM 接口被占用的问题(或者其他任何有关 COM 接口的疑难杂症,只要软件正常,文档不是被保护文档或兼容模式或只读文档,VSTO都能行) +该项目实现了 ICC 对 PPT 的 VSTO 插件支持,可以缓解 Office 和 WPS 共存导致的 COM 接口被占用的问题(或者其他任何有关 COM 接口的疑难杂症,只要软件正常,文档不是被保护文档或兼容模式或只读文档,VSTO都能行)。 **`InkCanvasForClassX`**
-该项目已废弃,皆在重写 ICC(💀bro以为自己能够摆脱 IC 的💩山) +该项目已废弃,皆在重写 ICC(💀bro以为自己能够摆脱 IC 的💩山)。 + +**`InkCanvasForClass.IccInkCanvas`**
+该项目将 ICC 魔改的 InkCanvas 控件给提取了出来,方便控件重用,减少 ICC 主程序代码量。封装选择V2、橡皮V2、实时笔锋、白板多页面管理、漫游管理、快捷键重写以及其他魔改。 + +**`InkCanvasForClass.IccInkCanvas.Demo`**
+IccInkCanvas 的 Demo 测试。 ## 开源许可 diff --git a/docs/components/SegmentedButtons.md b/docs/components/SegmentedButtons.md index e69de29..f71d812 100644 --- a/docs/components/SegmentedButtons.md +++ b/docs/components/SegmentedButtons.md @@ -0,0 +1,7 @@ +# SegmentedButtons + +## 定义 + +命名空间:`Ink_Canvas.Components` + +SegmentedButtons 提供了一组无单选框的按钮可供用户单选,并在选中时触发事件。 \ No newline at end of file