قبل از خواندن این مقاله، خواندن قسمت مقدمه را به شدت توصیه می کنم:
در این مقاله قصد داریم با کنترل دکمه در C++/UWP آشنا شویم.
کنترل دکمه
کنترل دکمه به کاربر اجازه می دهد تا اقداماتی را انجام دهد. آنها عمدتا دارای دو ویژگی، محتوا و رویداد کلیک هستند. ویژگی های محتوا برای تنظیم عنوان دکمه و رویداد کلیک برای راه اندازی رویداد استفاده می شود.
محتوا
ویژگی Content برای تنظیم عنوان دکمه استفاده می شود. ما نمیتوانیم متن را مستقیماً اختصاص دهیم (در VB یا C#، میتوانیم مستقیماً مقدار متن را اختصاص دهیم)، در عوض از رابط Inspectable برای اختصاص متن استفاده میکنیم.
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-button-control/Images/Content.jpg)
قابل بازرسی
IInspectable رابط پایه برای تمام کلاس های زمان اجرا ویندوز است. این رابط برای نمایش ویژگیهای COM به زبانهای دیگر مانند C++، C#، JavaScript و غیره استفاده میشود. برای تبدیل رشته به IInspectable، باید از کلاس PropertyValue استفاده کنیم.
PropertyValue
PropertyValue برای تبدیل نوع داده (مانند string، int، float) به IInspectable استفاده می شود.
![](http://pezhvak24.ir/dl/10kcor/cscd/article/learn-universal-windows-programming-via-modern-cpp-button-control/Images/Property.jpg)
در اینجا کد نمونه ای است که متن محتوا را اختصاص می دهد.
رویداد کلیک کنید
کلیک روی دکمه در رویداد RoutedEventHandler انجام می شود و تابع RoutedEventHandler به عنوان آرگومان (تابع برگشت به تماس) ارسال می شود. RoutedEventHandler دارای دو پارامتر ورودی است، یکی Sender، پارامتر فرستنده IIinspectable و سپس RoutedEventHandler به عنوان آرگومان دوم .
سابق
- BtnClick.Click(&App::BtnClick);
- void App::BtnClick(IInspectable const & sender,const RoutedEventArgs &args)
- {
- }
در برنامه نمونه زیر، کاربر روی دکمه کلیک می کند و یک کادر پیام نمایش داده می شود.
- #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::Media;
- using namespace Windows::UI::Xaml::Navigation;
- using namespace Windows::UI::Popups;
- using namespace Windows::Storage;
- struct App:ApplicationT<App>
- {
- public:
- virtual ~App() = default;
- static void OnLaunched(LaunchActivatedEventArgs const&);
- static void BtnClick(IInspectable const & sender, const RoutedEventArgs &args);
- };
- void App::OnLaunched(LaunchActivatedEventArgs const&)
- {
- Button BtnClick;
- IInspectable captionText = PropertyValue::CreateString(L"Click Me");
- BtnClick.Content(captionText);
- //To change background and Foreground of the color
- BtnClick.Background(SolidColorBrush(Colors::Red()));
- BtnClick.Foreground(SolidColorBrush((Colors::Yellow())));
- BtnClick.Click(&App::BtnClick);
- Window window = Window::Current();
- window.Content(BtnClick);
- window.Activate();
- }
- void App::BtnClick(IInspectable const & sender,const RoutedEventArgs &args)
- {
- MessageDialog msgDlg(L"Button Click Event",L"C++/UWP");
- msgDlg.ShowAsync();
- }
- 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-button-control/Images/output.jpg)