如何在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;
};
但我不知道如何注册此活动。到目前为止更好的事情是在收盘前让我知道的事件,允许取消 - 但即使这样也会有所帮助。知道窗口,唯一的窗口正在关闭似乎至关重要。
答案 0 :(得分:0)
WinRT中没有Window Closing事件。你必须考虑WPF。
我很确定我找到了你所指的示例代码,很明显_allowClose被定义为该代码中的全局代码,而不是该类的一些隐藏属性。它确实是第一行。