diff --git a/Tutorial/GacUI_Controls/GacUI_Controls.sln b/Tutorial/GacUI_Controls/GacUI_Controls.sln
index 486f3246..00870450 100644
--- a/Tutorial/GacUI_Controls/GacUI_Controls.sln
+++ b/Tutorial/GacUI_Controls/GacUI_Controls.sln
@@ -27,6 +27,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalculatorAndStateMachine",
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Animation", "Animation\Animation.vcxproj", "{2D3277A7-05CC-4F4C-B12D-DAEDA13B4E5E}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MenuVisibility", "MenuVisibility\MenuVisibility.vcxproj", "{AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -113,6 +115,14 @@ Global
{2D3277A7-05CC-4F4C-B12D-DAEDA13B4E5E}.Release|Win32.Build.0 = Release|Win32
{2D3277A7-05CC-4F4C-B12D-DAEDA13B4E5E}.Release|x64.ActiveCfg = Release|x64
{2D3277A7-05CC-4F4C-B12D-DAEDA13B4E5E}.Release|x64.Build.0 = Release|x64
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Debug|Win32.Build.0 = Debug|Win32
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Debug|x64.ActiveCfg = Debug|x64
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Debug|x64.Build.0 = Debug|x64
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Release|Win32.ActiveCfg = Release|Win32
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Release|Win32.Build.0 = Release|Win32
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Release|x64.ActiveCfg = Release|x64
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/Main.cpp b/Tutorial/GacUI_Controls/MenuVisibility/Main.cpp
new file mode 100644
index 00000000..ccf5a37e
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/Main.cpp
@@ -0,0 +1,19 @@
+#define GAC_HEADER_USE_NAMESPACE
+#include "UI/Source/Demo.h"
+
+using namespace vl::collections;
+using namespace vl::stream;
+using namespace vl::reflection::description;
+using namespace demo;
+
+void GuiMain()
+{
+ {
+ FileStream fileStream(L"../UIRes/MenuVisibility.bin", FileStream::ReadOnly);
+ auto resource = GuiResource::LoadPrecompiledBinary(fileStream);
+ GetResourceManager()->SetResource(L"Resource", resource);
+ }
+ demo::MainWindow window;
+ window.MoveToScreenCenter();
+ GetApplication()->Run(&window);
+}
\ No newline at end of file
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj b/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj
new file mode 100644
index 00000000..54978761
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj
@@ -0,0 +1,172 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+
+ {96c559ca-9718-4bec-a053-28a0ab6a8ca2}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 15.0
+ {AE7EDFDA-A4D8-4992-87D6-BA1085B801F8}
+ Win32Proj
+ MenuVisibility
+ 10.0.16299.0
+
+
+
+ Application
+ true
+ v141
+ Unicode
+
+
+ Application
+ false
+ v141
+ true
+ Unicode
+
+
+ Application
+ true
+ v141
+ Unicode
+
+
+ Application
+ false
+ v141
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ ..\..\..\Import;$(IncludePath)
+
+
+ true
+ ..\..\..\Import;$(IncludePath)
+
+
+ false
+ ..\..\..\Import;$(IncludePath)
+
+
+ false
+ ..\..\..\Import;$(IncludePath)
+
+
+
+ NotUsing
+ Level3
+ Disabled
+ true
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION
+ true
+
+
+ Windows
+ true
+
+
+
+
+ NotUsing
+ Level3
+ Disabled
+ true
+ _DEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION
+ true
+
+
+ Windows
+ true
+
+
+
+
+ NotUsing
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION
+ true
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+ NotUsing
+ Level3
+ MaxSpeed
+ true
+ true
+ true
+ NDEBUG;_WINDOWS;%(PreprocessorDefinitions);VCZH_DEBUG_NO_REFLECTION
+ true
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj.filters b/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj.filters
new file mode 100644
index 00000000..c088a620
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/MenuVisibility.vcxproj.filters
@@ -0,0 +1,41 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+ {a068f608-da49-4b1d-be39-4c58d283fb92}
+
+
+
+
+ Source Files
+
+
+ UI
+
+
+
+
+ Resource Files
+
+
+
+
+ UI
+
+
+ UI
+
+
+
\ No newline at end of file
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Resource.xml b/Tutorial/GacUI_Controls/MenuVisibility/UI/Resource.xml
new file mode 100644
index 00000000..e6a35888
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Resource.xml
@@ -0,0 +1,75 @@
+
+
+
+ Source
+ ..\..\UIRes\MenuVisibility.bin
+ GacUI.h
+ GacUIReflection.h
+ Demo
+
+
+
+
+
+
+
+
+
+ <_>composeType:MinSize
+ <_>composeType:Percentage percentage:1.0
+
+
+ <_>composeType:Percentage percentage:1.0
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+
\ No newline at end of file
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/Demo.h b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/Demo.h
new file mode 100644
index 00000000..7566a5bb
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/Demo.h
@@ -0,0 +1,15 @@
+/***********************************************************************
+!!!!!! DO NOT MODIFY !!!!!!
+
+GacGen.exe Resource.xml
+
+This file is generated by Workflow compiler
+https://github.com/vczh-libraries
+***********************************************************************/
+
+#ifndef VCZH_WORKFLOW_COMPILER_GENERATED_DEMO
+#define VCZH_WORKFLOW_COMPILER_GENERATED_DEMO
+
+#include "DemoPartialClasses.h"
+
+#endif
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.cpp b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.cpp
new file mode 100644
index 00000000..5c53c471
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.cpp
@@ -0,0 +1,424 @@
+/***********************************************************************
+!!!!!! DO NOT MODIFY !!!!!!
+
+GacGen.exe Resource.xml
+
+This file is generated by Workflow compiler
+https://github.com/vczh-libraries
+***********************************************************************/
+
+#include "Demo.h"
+/* CodePack:BeginIgnore() */
+#ifndef VCZH_DEBUG_NO_REFLECTION
+/* CodePack:ConditionOff(VCZH_DEBUG_NO_REFLECTION, DemoReflection.h) */
+#include "DemoReflection.h"
+#endif
+/* CodePack:EndIgnore() */
+
+#if defined( _MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wparentheses-equality"
+#elif defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wparentheses-equality"
+#endif
+
+#define GLOBAL_SYMBOL ::vl_workflow_global::Demo::
+#define GLOBAL_NAME ::vl_workflow_global::Demo::Instance().
+#define GLOBAL_OBJ &::vl_workflow_global::Demo::Instance()
+#define USERIMPL(...)
+
+/***********************************************************************
+Global Variables
+***********************************************************************/
+
+BEGIN_GLOBAL_STORAGE_CLASS(vl_workflow_global_Demo)
+ vl_workflow_global::Demo instance;
+ INITIALIZE_GLOBAL_STORAGE_CLASS
+ FINALIZE_GLOBAL_STORAGE_CLASS
+END_GLOBAL_STORAGE_CLASS(vl_workflow_global_Demo)
+
+namespace vl_workflow_global
+{
+/***********************************************************************
+Global Functions
+***********************************************************************/
+
+ Demo& Demo::Instance()
+ {
+ return Getvl_workflow_global_Demo().instance;
+ }
+
+/***********************************************************************
+Closures
+***********************************************************************/
+
+ //-------------------------------------------------------------------
+
+ __vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__::__vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__(::demo::MainWindowConstructor* __vwsnctorthis_0)
+ :__vwsnthis_0(::vl::__vwsn::This(__vwsnctorthis_0))
+ {
+ }
+
+ void __vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__::operator()(::vl::presentation::compositions::GuiGraphicsComposition* sender, ::vl::presentation::compositions::GuiItemEventArgs* arguments) const
+ {
+ auto checked = ::vl::__vwsn::This(::vl::__vwsn::Unbox<::vl::Ptr<::vl::presentation::controls::list::TextItem>>(::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(__vwsnthis_0->checkList)->GetItems()).Obj())->Get(::vl::__vwsn::This(arguments)->itemIndex)).Obj())->GetChecked();
+ auto menuItem = ::vl::__vwsn::Ensure(::vl::__vwsn::RawPtrCast<::vl::presentation::controls::GuiToolstripButton>(::vl::__vwsn::Unbox<::vl::presentation::controls::GuiControl*>(::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(::vl::__vwsn::This(__vwsnthis_0->menuItems)->GetToolstripSubMenu())->GetToolstripItems()).Obj())->Get(::vl::__vwsn::This(arguments)->itemIndex))));
+ ::vl::__vwsn::This(menuItem)->SetVisible(checked);
+ }
+}
+
+/***********************************************************************
+Class (::demo::MainWindowConstructor)
+***********************************************************************/
+
+namespace demo
+{
+ void MainWindowConstructor::__vwsn_initialize_instance_(::demo::MainWindow* __vwsn_this_)
+ {
+ (this->self = __vwsn_this_);
+ (this->__vwsn_precompile_27 = ::vl::__vwsn::This(this->self)->GetBoundsComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_27)->SetPreferredMinSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(640); __vwsn_temp__.y = static_cast<::vl::vint>(480); return __vwsn_temp__; }());
+ }
+ {
+ ::vl::__vwsn::This(this->self)->SetClientSize([&](){ ::vl::presentation::Size __vwsn_temp__; __vwsn_temp__.x = static_cast<::vl::vint>(640); __vwsn_temp__.y = static_cast<::vl::vint>(480); return __vwsn_temp__; }());
+ }
+ {
+ ::vl::__vwsn::This(this->self)->SetText(::vl::WString(L"MenuVisibility", false));
+ }
+ (this->__vwsn_precompile_0 = new ::vl::presentation::compositions::GuiTableComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }());
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowsAndColumns(static_cast<::vl::vint>(2), static_cast<::vl::vint>(1));
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(0), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::MinSize; return __vwsn_temp__; }());
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetRowOption(static_cast<::vl::vint>(1), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }());
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->SetColumnOption(static_cast<::vl::vint>(0), [&](){ ::vl::presentation::compositions::GuiCellOption __vwsn_temp__; __vwsn_temp__.composeType = ::vl::presentation::compositions::GuiCellOption::ComposeType::Percentage; __vwsn_temp__.percentage = static_cast(1.0); return __vwsn_temp__; }());
+ }
+ (this->__vwsn_precompile_1 = new ::vl::presentation::compositions::GuiCellComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_1)->SetSite(static_cast<::vl::vint>(0), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1));
+ }
+ {
+ (this->__vwsn_precompile_2 = new ::vl::presentation::controls::GuiToolstripMenuBar(::vl::presentation::theme::ThemeName::MenuBar));
+ }
+ (this->__vwsn_precompile_14 = ::vl::__vwsn::This(this->__vwsn_precompile_2)->GetBoundsComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_14)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(0); __vwsn_temp__.top = static_cast<::vl::vint>(0); __vwsn_temp__.right = static_cast<::vl::vint>(0); __vwsn_temp__.bottom = static_cast<::vl::vint>(0); return __vwsn_temp__; }());
+ }
+ {
+ (this->menuItems = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuBarButton));
+ }
+ {
+ ::vl::__vwsn::This(this->menuItems)->SetText(::vl::WString(L"Items", false));
+ }
+ (this->__vwsn_precompile_3 = ::vl::__vwsn::This(this->menuItems)->EnsureToolstripSubMenu());
+ {
+ (this->__vwsn_precompile_4 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_4)->SetText(::vl::WString(L"Item 1", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_4));
+ }
+ {
+ (this->__vwsn_precompile_5 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_5)->SetText(::vl::WString(L"Item 2", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_5));
+ }
+ {
+ (this->__vwsn_precompile_6 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_6)->SetText(::vl::WString(L"Item 3", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_6));
+ }
+ {
+ (this->__vwsn_precompile_7 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_7)->SetText(::vl::WString(L"Item 4", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_7));
+ }
+ {
+ (this->__vwsn_precompile_8 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_8)->SetText(::vl::WString(L"Item 5", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_8));
+ }
+ {
+ (this->__vwsn_precompile_9 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_9)->SetText(::vl::WString(L"Item 6", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_9));
+ }
+ {
+ (this->__vwsn_precompile_10 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_10)->SetText(::vl::WString(L"Item 7", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_10));
+ }
+ {
+ (this->__vwsn_precompile_11 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_11)->SetText(::vl::WString(L"Item 8", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_11));
+ }
+ {
+ (this->__vwsn_precompile_12 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_12)->SetText(::vl::WString(L"Item 9", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_12));
+ }
+ {
+ (this->__vwsn_precompile_13 = new ::vl::presentation::controls::GuiToolstripButton(::vl::presentation::theme::ThemeName::MenuItemButton));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_13)->SetText(::vl::WString(L"Item 10", false));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_3)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_13));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->__vwsn_precompile_2)->GetToolstripItems()).Obj())->Add(::vl::__vwsn::Box(this->menuItems));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_1)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(this->__vwsn_precompile_2)->GetBoundsComposition()));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_1));
+ }
+ (this->__vwsn_precompile_15 = new ::vl::presentation::compositions::GuiCellComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_15)->SetSite(static_cast<::vl::vint>(1), static_cast<::vl::vint>(0), static_cast<::vl::vint>(1), static_cast<::vl::vint>(1));
+ }
+ {
+ (this->checkList = new ::vl::presentation::controls::GuiTextList(::vl::presentation::theme::ThemeName::TextList));
+ }
+ (this->__vwsn_precompile_17 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_17.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_17.Obj())->SetText(::vl::WString(L"Item 1", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_17));
+ }
+ (this->__vwsn_precompile_18 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_18.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_18.Obj())->SetText(::vl::WString(L"Item 2", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_18));
+ }
+ (this->__vwsn_precompile_19 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_19.Obj())->SetText(::vl::WString(L"Item 3", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_19));
+ }
+ (this->__vwsn_precompile_20 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_20.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_20.Obj())->SetText(::vl::WString(L"Item 4", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_20));
+ }
+ (this->__vwsn_precompile_21 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_21.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_21.Obj())->SetText(::vl::WString(L"Item 5", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_21));
+ }
+ (this->__vwsn_precompile_22 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_22.Obj())->SetText(::vl::WString(L"Item 6", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_22));
+ }
+ (this->__vwsn_precompile_23 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_23.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_23.Obj())->SetText(::vl::WString(L"Item 7", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_23));
+ }
+ (this->__vwsn_precompile_24 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_24.Obj())->SetText(::vl::WString(L"Item 8", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_24));
+ }
+ (this->__vwsn_precompile_25 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_25.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_25.Obj())->SetText(::vl::WString(L"Item 9", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_25));
+ }
+ (this->__vwsn_precompile_26 = ::vl::Ptr<::vl::presentation::controls::list::TextItem>(new ::vl::presentation::controls::list::TextItem()));
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetChecked(::vl::__vwsn::Parse(::vl::WString(L"true", false)));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_26.Obj())->SetText(::vl::WString(L"Item 10", false));
+ }
+ {
+ auto __vwsn_collection_ = ::vl::__vwsn::UnboxCollection<::vl::reflection::description::IValueList>(::vl::__vwsn::This(this->checkList)->GetItems());
+ ::vl::__vwsn::This(__vwsn_collection_.Obj())->Add(::vl::__vwsn::Box(this->__vwsn_precompile_26));
+ }
+ {
+ ::vl::__vwsn::This(this->checkList)->SetView(::vl::presentation::controls::TextListView::Check);
+ }
+ (this->__vwsn_precompile_16 = ::vl::__vwsn::This(this->checkList)->GetBoundsComposition());
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_16)->SetAlignmentToParent([&](){ ::vl::presentation::Margin __vwsn_temp__; __vwsn_temp__.left = static_cast<::vl::vint>(5); __vwsn_temp__.top = static_cast<::vl::vint>(5); __vwsn_temp__.right = static_cast<::vl::vint>(5); __vwsn_temp__.bottom = static_cast<::vl::vint>(5); return __vwsn_temp__; }());
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_15)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(::vl::__vwsn::This(this->checkList)->GetBoundsComposition()));
+ }
+ {
+ ::vl::__vwsn::This(this->__vwsn_precompile_0)->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_15));
+ }
+ {
+ ::vl::__vwsn::This(::vl::__vwsn::This(this->self)->GetContainerComposition())->AddChild(static_cast<::vl::presentation::compositions::GuiGraphicsComposition*>(this->__vwsn_precompile_0));
+ }
+ {
+ auto __vwsn_event_handler_ = LAMBDA(::vl_workflow_global::__vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__(this));
+ ::vl::__vwsn::EventAttach(::vl::__vwsn::This(this->checkList)->ItemChecked, __vwsn_event_handler_);
+ }
+ }
+
+ MainWindowConstructor::MainWindowConstructor()
+ : self(static_cast<::demo::MainWindow*>(nullptr))
+ , menuItems(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , checkList(static_cast<::vl::presentation::controls::GuiTextList*>(nullptr))
+ , __vwsn_precompile_0(static_cast<::vl::presentation::compositions::GuiTableComposition*>(nullptr))
+ , __vwsn_precompile_1(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr))
+ , __vwsn_precompile_2(static_cast<::vl::presentation::controls::GuiToolstripMenuBar*>(nullptr))
+ , __vwsn_precompile_3(static_cast<::vl::presentation::controls::GuiToolstripMenu*>(nullptr))
+ , __vwsn_precompile_4(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_5(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_6(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_7(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_8(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_9(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_10(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_11(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_12(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_13(static_cast<::vl::presentation::controls::GuiToolstripButton*>(nullptr))
+ , __vwsn_precompile_14(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr))
+ , __vwsn_precompile_15(static_cast<::vl::presentation::compositions::GuiCellComposition*>(nullptr))
+ , __vwsn_precompile_16(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr))
+ , __vwsn_precompile_17(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_18(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_19(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_20(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_21(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_22(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_23(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_24(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_25(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_26(::vl::Ptr<::vl::presentation::controls::list::TextItem>())
+ , __vwsn_precompile_27(static_cast<::vl::presentation::compositions::GuiBoundsComposition*>(nullptr))
+ {
+ }
+
+/***********************************************************************
+Class (::demo::MainWindow)
+***********************************************************************/
+
+ MainWindow::MainWindow()
+ : ::vl::presentation::controls::GuiWindow(::vl::presentation::theme::ThemeName::Window)
+ {
+ auto __vwsn_resource_ = ::vl::__vwsn::This(::vl::presentation::GetResourceManager())->GetResourceFromClassName(::vl::WString(L"demo::MainWindow", false));
+ auto __vwsn_resolver_ = ::vl::Ptr<::vl::presentation::GuiResourcePathResolver>(new ::vl::presentation::GuiResourcePathResolver(__vwsn_resource_, ::vl::__vwsn::This(__vwsn_resource_.Obj())->GetWorkingDirectory()));
+ ::vl::__vwsn::This(this)->SetResourceResolver(__vwsn_resolver_);
+ ::vl::__vwsn::This(this)->__vwsn_initialize_instance_(this);
+ }
+
+ MainWindow::~MainWindow()
+ {
+ this->FinalizeInstanceRecursively(static_cast<::vl::presentation::controls::GuiControlHost*>(this));
+ }
+
+}
+#undef GLOBAL_SYMBOL
+#undef GLOBAL_NAME
+#undef GLOBAL_OBJ
+#undef USERIMPL
+
+#if defined( _MSC_VER)
+#pragma warning(pop)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(__clang__)
+#pragma clang diagnostic pop
+#endif
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.h b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.h
new file mode 100644
index 00000000..1c5d33d1
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoPartialClasses.h
@@ -0,0 +1,127 @@
+/***********************************************************************
+!!!!!! DO NOT MODIFY !!!!!!
+
+GacGen.exe Resource.xml
+
+This file is generated by Workflow compiler
+https://github.com/vczh-libraries
+***********************************************************************/
+
+#ifndef VCZH_WORKFLOW_COMPILER_GENERATED_DEMOPARTIALCLASSES
+#define VCZH_WORKFLOW_COMPILER_GENERATED_DEMOPARTIALCLASSES
+
+#include "GacUI.h"
+
+#if defined( _MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wparentheses-equality"
+#elif defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wparentheses-equality"
+#endif
+
+namespace vl_workflow_global
+{
+ struct __vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__;
+}
+
+namespace demo
+{
+ class MainWindowConstructor;
+ class MainWindow;
+
+ class MainWindowConstructor : public ::vl::Object, public ::vl::reflection::Description
+ {
+ friend struct ::vl_workflow_global::__vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__;
+#ifndef VCZH_DEBUG_NO_REFLECTION
+ friend struct ::vl::reflection::description::CustomTypeDescriptorSelector;
+#endif
+ protected:
+ ::demo::MainWindow* self;
+ ::vl::presentation::controls::GuiToolstripButton* menuItems;
+ ::vl::presentation::controls::GuiTextList* checkList;
+ ::vl::presentation::compositions::GuiTableComposition* __vwsn_precompile_0;
+ ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_1;
+ ::vl::presentation::controls::GuiToolstripMenuBar* __vwsn_precompile_2;
+ ::vl::presentation::controls::GuiToolstripMenu* __vwsn_precompile_3;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_4;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_5;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_6;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_7;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_8;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_9;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_10;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_11;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_12;
+ ::vl::presentation::controls::GuiToolstripButton* __vwsn_precompile_13;
+ ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_14;
+ ::vl::presentation::compositions::GuiCellComposition* __vwsn_precompile_15;
+ ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_16;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_17;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_18;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_19;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_20;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_21;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_22;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_23;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_24;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_25;
+ ::vl::Ptr<::vl::presentation::controls::list::TextItem> __vwsn_precompile_26;
+ ::vl::presentation::compositions::GuiBoundsComposition* __vwsn_precompile_27;
+ void __vwsn_initialize_instance_(::demo::MainWindow* __vwsn_this_);
+ public:
+ MainWindowConstructor();
+ };
+
+ class MainWindow : public ::vl::presentation::controls::GuiWindow, public ::demo::MainWindowConstructor, public ::vl::reflection::Description
+ {
+ friend class ::demo::MainWindowConstructor;
+ friend struct ::vl_workflow_global::__vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__;
+#ifndef VCZH_DEBUG_NO_REFLECTION
+ friend struct ::vl::reflection::description::CustomTypeDescriptorSelector;
+#endif
+ public:
+ MainWindow();
+ ~MainWindow();
+ };
+
+}
+/***********************************************************************
+Global Variables and Functions
+***********************************************************************/
+
+namespace vl_workflow_global
+{
+ class Demo
+ {
+ public:
+
+ static Demo& Instance();
+ };
+
+/***********************************************************************
+Closures
+***********************************************************************/
+
+ struct __vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__
+ {
+ ::demo::MainWindowConstructor* __vwsnthis_0;
+
+ __vwsnf1_Demo_demo_MainWindowConstructor___vwsn_initialize_instance__(::demo::MainWindowConstructor* __vwsnctorthis_0);
+
+ void operator()(::vl::presentation::compositions::GuiGraphicsComposition* sender, ::vl::presentation::compositions::GuiItemEventArgs* arguments) const;
+ };
+}
+
+#if defined( _MSC_VER)
+#pragma warning(pop)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#endif
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp
new file mode 100644
index 00000000..9eed0636
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.cpp
@@ -0,0 +1,114 @@
+/***********************************************************************
+!!!!!! DO NOT MODIFY !!!!!!
+
+GacGen.exe Resource.xml
+
+This file is generated by Workflow compiler
+https://github.com/vczh-libraries
+***********************************************************************/
+
+#include "DemoReflection.h"
+
+#if defined( _MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wparentheses-equality"
+#elif defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wparentheses-equality"
+#endif
+
+/***********************************************************************
+Reflection
+***********************************************************************/
+
+namespace vl
+{
+ namespace reflection
+ {
+ namespace description
+ {
+#ifndef VCZH_DEBUG_NO_REFLECTION
+ IMPL_CPP_TYPE_INFO(demo::MainWindow)
+ IMPL_CPP_TYPE_INFO(demo::MainWindowConstructor)
+
+#define _ ,
+ BEGIN_CLASS_MEMBER(::demo::MainWindow)
+ CLASS_MEMBER_CONSTRUCTOR(::demo::MainWindow*(), NO_PARAMETER)
+ END_CLASS_MEMBER(::demo::MainWindow)
+
+ BEGIN_CLASS_MEMBER(::demo::MainWindowConstructor)
+ CLASS_MEMBER_CONSTRUCTOR(::vl::Ptr<::demo::MainWindowConstructor>(), NO_PARAMETER)
+ CLASS_MEMBER_METHOD(__vwsn_initialize_instance_, { L"__vwsn_this_" })
+ CLASS_MEMBER_FIELD(__vwsn_precompile_0)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_1)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_10)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_11)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_12)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_13)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_14)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_15)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_16)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_17)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_18)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_19)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_2)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_20)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_21)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_22)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_23)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_24)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_25)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_26)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_27)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_3)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_4)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_5)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_6)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_7)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_8)
+ CLASS_MEMBER_FIELD(__vwsn_precompile_9)
+ CLASS_MEMBER_FIELD(checkList)
+ CLASS_MEMBER_FIELD(menuItems)
+ CLASS_MEMBER_FIELD(self)
+ END_CLASS_MEMBER(::demo::MainWindowConstructor)
+
+#undef _
+ class DemoTypeLoader : public Object, public ITypeLoader
+ {
+ public:
+ void Load(ITypeManager* manager)
+ {
+ ADD_TYPE_INFO(::demo::MainWindow)
+ ADD_TYPE_INFO(::demo::MainWindowConstructor)
+ }
+
+ void Unload(ITypeManager* manager)
+ {
+ }
+ };
+#endif
+
+ bool LoadDemoTypes()
+ {
+#ifndef VCZH_DEBUG_NO_REFLECTION
+ if (auto manager = GetGlobalTypeManager())
+ {
+ return manager->AddTypeLoader(MakePtr());
+ }
+#endif
+ return false;
+ }
+ }
+ }
+}
+
+#if defined( _MSC_VER)
+#pragma warning(pop)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(__clang__)
+#pragma clang diagnostic pop
+#endif
diff --git a/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.h b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.h
new file mode 100644
index 00000000..5ce202bc
--- /dev/null
+++ b/Tutorial/GacUI_Controls/MenuVisibility/UI/Source/DemoReflection.h
@@ -0,0 +1,57 @@
+/***********************************************************************
+!!!!!! DO NOT MODIFY !!!!!!
+
+GacGen.exe Resource.xml
+
+This file is generated by Workflow compiler
+https://github.com/vczh-libraries
+***********************************************************************/
+
+#ifndef VCZH_WORKFLOW_COMPILER_GENERATED_DEMOREFLECTION
+#define VCZH_WORKFLOW_COMPILER_GENERATED_DEMOREFLECTION
+
+#include "Demo.h"
+#ifndef VCZH_DEBUG_NO_REFLECTION
+#include "GacUIReflection.h"
+#endif
+
+#if defined( _MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4250)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wparentheses-equality"
+#elif defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wparentheses-equality"
+#endif
+
+/***********************************************************************
+Reflection
+***********************************************************************/
+
+namespace vl
+{
+ namespace reflection
+ {
+ namespace description
+ {
+#ifndef VCZH_DEBUG_NO_REFLECTION
+ DECL_TYPE_INFO(::demo::MainWindow)
+ DECL_TYPE_INFO(::demo::MainWindowConstructor)
+#endif
+
+ extern bool LoadDemoTypes();
+ }
+ }
+}
+
+#if defined( _MSC_VER)
+#pragma warning(pop)
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#elif defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#endif
diff --git a/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin b/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin
new file mode 100644
index 00000000..bccf6d52
Binary files /dev/null and b/Tutorial/GacUI_Controls/UIRes/MenuVisibility.bin differ