一种不使用XAML关闭DirectX Metro应用程序的方法
A way to close DirectX Metro application without XAML
我正在启动我的DirectX 11.1 Metro(没有XAML)应用程序,如下所示:
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
// Some additional initializations
//...
auto frameworkViewSource = ref new MyFrameworkViewSource();
Windows::ApplicationModel::Core::CoreApplication::Run(frameworkViewSource);
}
运行函数如下:
virtual void Run()
{
while(!m_windowClosed)
{
CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
DoWork();
}
}
然后我试图调用退出函数(在用户请求退出的情况下):
Quit()
{
// Uninit variables
//...
Windows::ApplicationModel::Core::CoreApplication::Exit();
}
,
Windows::ApplicationModel::Core::CoreApplication::Exit();
无效。结果,我在DoWork()函数中崩溃了,因为变量未初始化,但应用程序未退出,while循环仍在继续。
此外,如果我从退出函数调用CoreWindow::GetForCurrentThread()->Close(),调试器永远不会命中OnWindowClosed事件处理程序:
m_window->Closed += ref new TypedEventHandler<CoreWindow^, CoreWindowEventArgs^>(this, &MyFrameworkView::OnWindowClosed);
void MyFrameworkView::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args)
{
m_windowClosed = true;
}
问题是:如果我计划在菜单中有"退出"项目,我如何正确退出游戏?
简短的回答:你不能。
长篇大论:Windows Store应用程序模型不允许应用程序以编程方式关闭,无论它们是使用DirectX, XAML还是JavaScript。相反,用户必须使用一种标准手势或动作(从顶部向下滑动或ALT+F4)关闭。应用程序只能在崩溃时以编程方式退出。
相关文章:
- 关闭||运算符优化
- C++在变量给定的指定时间内关闭电脑
- 如何在directx/c++中进行平移/缩放操作
- 确保流程关闭
- Qt Q串行端口未编程设备未关闭
- 如何正确关闭升压线程
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 我的二进制搜索程序只是关闭了
- Directx 11 - CompileFromFile() is not compiling
- 在不知道套接字的情况下关闭网络连接
- 字节数组初始化会导致 DirectX 崩溃
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- 防止组合框被关闭
- 按回车键后输出屏幕关闭
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 通过安装信号处理程序关闭多线程应用程序
- 自定义对话框(源自QDialog)不会关闭(Android)
- 关闭了垂直同步,但在我的DirectX 9应用程序中仍然可以获得60FPS
- 一种不使用XAML关闭DirectX Metro应用程序的方法