在C ++ / winrt中注册Window-closing事件

时间:2018-05-02 18:52:49

标签: c++-winrt

如何在C ++ / winrt中捕获并可能取消窗口关闭事件?我已经看到过这个:

void OnClosing(object sender, ClosingEventArgs e)
{
e.Cancel = !_allowClose;
}

(在参考的例子中拼写为' _e.Cancel'但是我假设这是一个错字)。在C ++ / winrt中,我希望上面的内容可以转换为:

void OnClosing(winrt::Windows::Foundation::IInspectable const & sender, winrt::Windows::Foundation::IInspectable const &  args)
{
args.Cancel(!_allowClose);
}

但是_allowClose没有定义,.Cancel不是args的成员(必须指定args类型),而且最重要的是我不知道如何注册这个事件处理程序。当然这个应用程序中只有一个窗口,但我需要拦截任何通过cntl-Q或关闭框关闭该窗口的尝试,以便在程序中执行某些操作并可选择取消关闭。谢谢。 [更新]我被告知在winrt中没有WindowClosing事件,这是一种耻辱。根据文档,有一个WindowClosed事件(以下是剪切和粘贴):

struct WindowClosedEventHandler : winrt::Windows::Foundation::IUnknown
{
   WindowClosedEventHandler(std::nulptr_t = nullptr) noexcept {}
   template <typename L> WindowClosedEventHandler(L lambda);
   template <typename F> WindowClosedEventHandler(F* function);
   template <typename O, typename M> WindowClosedEventHandler(O* object, M 
   method);
   void operator()(winrt::Windows::UI::Xaml::WindowClosedEventHandler const& 
   sender) const;
   };

但我不知道如何注册此活动。到目前为止更好的事情是在收盘前让我知道的事件,允许取消 - 但即使这样也会有所帮助。知道窗口,唯一的窗口正在关闭似乎至关重要。

1 个答案:

答案 0 :(得分:0)

WinRT中没有Window Closing事件。你必须考虑WPF

我很确定我找到了你所指的示例代码,很明显_allowClose被定义为该代码中的全局代码,而不是该类的一些隐藏属性。它确实是第一行。