قبل از خواندن این مقاله، خواندن قسمت های قبلی مجموعه را به شدت توصیه می کنم.
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل دکمه)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (StackPanel)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CheckBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (رادیو دکمه)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (Combobox)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (Border)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (CommandBar)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (کنترل SplitView)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (AutoSuggestBox)
- آموزش برنامه نویسی جهانی ویندوز از طریق C++ مدرن (ContentDialog)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (گرید کنترل)
- آموزش برنامه نویسی ویندوز جهانی از طریق C++ مدرن (RelativePanel)
کنترل ProgressBar
ProgressBar نشان می دهد که برخی از عملیات در پس زمینه در حال انجام است. فقط نشانگر گرافیکی را در رابط کاربری گرافیکی به روز کنید، به عنوان مثال: یک پوشه را در پوشه دیگر کپی کنید. سیستم عامل ویندوز در یک پنجره بازشو نشان می دهد که چه اتفاقی می افتد.
در این مقاله قصد دارم نحوه پیاده سازی کنترل ProgressBar در مدرن C++/WinRT را توضیح دهم.
ProgressBar به دو نوع تقسیم می شود.
- سبک تکراری (الگو)
- ProgressBar بر اساس مقدار پر می شود.
Progress Bar Repeating Style
برای پیاده سازی سبک تکرار، مقدار IsIndeterminate را درست تنظیم کنید. خودشه. این نشانگر را مانند زیر نمایش می دهد.
- ProgressBar pBar;
- pBar.IsIndeterminate(true);
- pBar.Foreground(SolidColorBrush(Colors::Red()));
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-progressbar/Images/Progress1.gif)
ProgressBar بر اساس مقدار پر می شود
این ویژگی درصد را به عنوان وضعیت (پر کردن مقدار) بر اساس مقدار نشان می دهد. برای استفاده از این ویژگی، باید سه ویژگی مهم را مطابق زیر تنظیم کنیم.
خواص
- حداقل - حداقل مقدار برای مقدار نوار
- حداکثر - حداکثر مقدار برای نوار.
- مقدار - مقدار نشاندهنده مقدار پر کردن فعلی است (چند درصد تکمیل شده است)
نکته - ویژگی مقدار باید در محدوده حداقل و حداکثر باشد.
- ProgressBar pBar;
- pBar.Minimum(0);
- pBar.Maximum(100);
- pBar.Value(value);
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-progressbar/Images/Fill.png)
بیایید یک مثال ساده را ببینیم
مفهوم: اگر کار پسزمینه (پسزمینه: روی دکمه کلیک کنید) 40% تکمیل شده است، درصد را به صورت RedColor نشان دهید. اگر 80% تکمیل شد، آن را با رنگ زرد و اگر 100% کامل شد، رنگ سبز را در کنترل ProgressBar نشان دهید.
- #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;
- ProgressBar pBar;
- int value = 20;
- IInspectable CreateInspectable(hstring strCaption)
- {
- return PropertyValue::CreateString(strCaption);
- }
- void BtnClick(IInspectable const & sender, const RoutedEventArgs &args)
- {
- Button btnTag = sender.as<Button>();
- pBar.ShowError(false);
- auto demo = btnTag.Tag();
- IPropertyValue tagId = btnTag.Tag().as<IPropertyValue>();
- if(tagId.GetInt16() == 1)
- {
- value += 10;
- if (value > 100)
- value = 0;
- }
- else if (tagId.GetInt16() == 2)
- {
- value -= 10;
- if (value < 0)
- value = 0;
- }
- else if (tagId.GetInt16() == 3)
- {
- pBar.ShowError(true);
- }
- if (value <= 40)
- pBar.Foreground(SolidColorBrush(Colors::Red()));
- else if (value <= 80)
- pBar.Foreground(SolidColorBrush(Colors::Yellow()));
- else if (value <= 100)
- pBar.Foreground(SolidColorBrush(Colors::Green()));
- pBar.Value(value);
- }
- 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"Increase");
- BtnIncrease.Content(captionText);
- BtnIncrease.Click({ this,&App::BtnClick });
- BtnIncrease.Margin(CreateThickness(20, 10, 0, 0));
- BtnIncrease.Tag(PropertyValue::CreateInt32(1));
- captionText = PropertyValue::CreateString(L"Decrease");
- BtnDecrease.Content(captionText);
- BtnDecrease.Click({ this,&App::BtnClick });
- BtnDecrease.Margin(CreateThickness(20, 10, 0, 0));
- BtnDecrease.Tag(PropertyValue::CreateInt32(2));
- auto txtheader = CreateTextBlock(L"ProgressBar 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(txtarticleheader);
- sContentPanel.Children().Append(btnPanel);
- sContentPanel.Orientation(Orientation::Vertical);
- sContentPanel.VerticalAlignment(VerticalAlignment::Top);
- pBar.Minimum(0);
- pBar.Maximum(100);
- pBar.Value(value);
- pBar.Height(100);
- pBar.Margin(CreateThickness(5, 20, 10, 0));
- pBar.IsIndeterminate(false);
- pBar.Foreground(SolidColorBrush(Colors::Red()));
- StackPanel mainPanel;
- mainPanel.Children().Append(sContentPanel);
- mainPanel.Children().Append(txtheader);
- mainPanel.Children().Append(pBar);
- Window window = Window::Current();
- window.Content(mainPanel);
- window.Activate();
- }
- };
- int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
- {
- Application::Start([](auto &&) {make<App>(); });
- return 0;
- }
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-progressbar/Images/PBaroutput.gif)
کد نمونه در اینجا آورده شده است .
نتیجه
امیدوارم نحوه استفاده از کنترل ProgressBar را متوجه شده باشید.