قبل از خواندن این مقاله، خواندن قسمت های قبلی مجموعه را به شدت توصیه می کنم.
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل دکمه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Stackpanel)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CheckBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (رادیو دکمه)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (Combobox)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Border)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CommandBar)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل SplitView)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (AutoSuggestBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (ContentDialog)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل شبکه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (RelativePanel)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (ProgressBar)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (DispatcherTimer)
در این مقاله قصد دارم نحوه پیاده سازی ProgressRing Control در مدرن C++/WinRT را توضیح دهم.
کنترل ProgressRing
ProgressRing مشابه کنترل ProgressBar است. این نشان می دهد که عملیاتی در پس زمینه در حال انجام است. ProgressBar حاوی نشانگر مقدار برای نشان دادن درصد کامل کار است در حالی که ProgressRing فقط پیشرفت نامشخص را با نمایش حلقه متحرک نشان می دهد.
این کنترل بیشتر در بارگذاری پسزمینه محتوا در وب یا پایگاه داده استفاده میشود. رابط کاربری زیر کنترل ProgressRing را نشان می دهد (فقط نشان دهنده بارگیری داده ها است).
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-progressring/Images/Ring.gif)
Property - IsActive
فقط یک ویژگی اصلی دارد - IsActive را درست تنظیم کنید و انیمیشن شروع می شود. IsActive را به عنوان false تنظیم کنید و انیمیشن متوقف می شود.
فقط یک ویژگی اصلی دارد - IsActive را درست تنظیم کنید و انیمیشن شروع می شود. IsActive را به عنوان false تنظیم کنید و انیمیشن متوقف می شود.
توجه داشته باشید
- true - کنترل متحرک است و برای کاربر قابل مشاهده است
- false - کنترل پنهان است و انیمیشن متوقف شده است.
بیایید یک مثال ساده را ببینیم
مفهوم - اضافه کردن دو دکمه - شروع و توقف. اگر کاربر دکمه Start را فشار دهد، انیمیشن شروع می شود. و با فشار دادن دکمه Stop، انیمیشن متوقف می شود. در اینجا کد همان است.
- #include "pch.h"
- using namespace winrt;
- using namespace Windows::ApplicationModel;
- using namespace Windows::ApplicationModel::Activation;
- using namespace Windows::Foundation;
- using namespace Windows::UI;
- using namespace Windows::UI::Xaml;
- using namespace Windows::UI::Xaml::Controls;
- using namespace Windows::UI::Xaml::Controls::Primitives;
- using namespace Windows::UI::Xaml::Interop;
- using namespace Windows::UI::Xaml::Navigation;
- using namespace Windows::UI::Xaml::Media;
- using namespace Windows::Media;
- using namespace Windows::Media::Core;
- using namespace Windows::Storage;
- using namespace Windows::Storage::Pickers;
- struct App :ApplicationT<App>
- {
- TextBlock txtStatus;
- ProgressRing proRing;
- IInspectable CreateInspectable(hstring strCaption)
- {
- return PropertyValue::CreateString(strCaption);
- }
- void BtnClick(IInspectable const & sender, const RoutedEventArgs &args)
- {
- Button btnTag = sender.as<Button>();
- auto demo = btnTag.Tag();
- IPropertyValue tagId = btnTag.Tag().as<IPropertyValue>();
- if (tagId.GetInt16() == 1)
- {
- proRing.IsActive(true);
- }
- else if (tagId.GetInt16() == 2)
- {
- proRing.IsActive(false);
- }
- }
- TextBlock CreateTextBlock(hstring text)
- {
- TextBlock txtBlock;
- txtBlock.Text(text);
- txtBlock.FontFamily(FontFamily(L"Segoe UI Semibold"));
- txtBlock.TextAlignment(TextAlignment::Left);
- txtBlock.FontSize(35);
- txtBlock.Foreground(SolidColorBrush(Colors::Brown()));
- txtBlock.Margin(CreateThickness(10, 10, 0, 0));
- return txtBlock;
- }
- Thickness CreateThickness(int left, int top, int right, int bottom)
- {
- Thickness thick;
- thick.Left = left;
- thick.Top = top;
- thick.Right = right;
- thick.Bottom = bottom;
- return thick;
- }
- void OnLaunched(LaunchActivatedEventArgs const&)
- {
- Button BtnIncrease, BtnDecrease, BtnError;
- auto captionText = PropertyValue::CreateString(L"Start");
- BtnIncrease.Content(captionText);
- BtnIncrease.Click({ this,&App::BtnClick });
- BtnIncrease.Margin(CreateThickness(20, 10, 0, 0));
- BtnIncrease.Tag(PropertyValue::CreateInt32(1));
- captionText = PropertyValue::CreateString(L"Stop");
- BtnDecrease.Content(captionText);
- BtnDecrease.Click({ this,&App::BtnClick });
- BtnDecrease.Margin(CreateThickness(20, 10, 0, 0));
- BtnDecrease.Tag(PropertyValue::CreateInt32(2));
- auto txtheader = CreateTextBlock(L"ProgressRing Sample(Modern C++/WinRT)");
- txtheader.FontSize(25);
- StackPanel btnPanel;
- btnPanel.Orientation(Orientation::Horizontal);
- btnPanel.Children().Append(BtnIncrease);
- btnPanel.Children().Append(BtnDecrease);
- StackPanel sContentPanel;
- sContentPanel.Children().Append(btnPanel);
- sContentPanel.Orientation(Orientation::Vertical);
- sContentPanel.VerticalAlignment(VerticalAlignment::Top);
- proRing.IsActive(true);
- proRing.Width(100);
- proRing.Height(100);
- proRing.Margin(CreateThickness(20, 10, 0, 0));
- proRing.Background(SolidColorBrush(Colors::Yellow()));
- proRing.VerticalAlignment(VerticalAlignment::Center);
- proRing.HorizontalAlignment(HorizontalAlignment::Left);
- StackPanel mainPanel;
- mainPanel.Children().Append(sContentPanel);
- mainPanel.Children().Append(txtheader);
- mainPanel.Children().Append(proRing);
- Window window = Window::Current();
- window.Content(mainPanel);
- window.Activate();
- }
- };
- int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
خروجی