2017-02-13 109 views
0

使用DirectX进行编程时,是否使用非UWP实践并使WinMain和WinProc成为可能?我有一本关于DirectX的win32旧书,但它与UWP完全不同。在DirectX与UWP,可以使用win32吗?

+0

UWP使用'WinMain'条目点,就像任何Windows桌面应用程序一样。由于DirectX比UWP早十年,所以您当然可以使用DirectX编写Windows桌面应用程序。你为什么会另有其他假设?无论如何,很难说,在这之后你真的是什么。 – IInspectable

+0

我读了WinMain,并且WinProc在UWP中消失了。编辑:。我试图看看为新项目学习win32是否浪费时间。 – johnny

+0

我不确定你用户提供的入口点属于哪种魔法。这只是一个象征,它可以是任何东西。实际上,UWP的入口点与任何Win32应用程序的入口点仍然相同,但取决于语言预测,您可能不会看到这一点。学习Windows API是浪费吗?我会说:不,从不。 UWP是Win32,只是用很多COM填充。 – IInspectable

回答

2

通用Windows平台(UWP)支持DirectX 11,核心API与传统Win32桌面应用程序中的相同。在实用程序库中有很大的区别,因为您不能在UWP中使用已弃用的D3DX库,并且使用CoreWindow代替Win32消息和WndProc

MSDN
Where is the DirectX SDK (2015 Edition)?
Living without D3DX

你应该看看this post在DirectX书的建议,还有DirectX Tool Kit tutorials

如果你的书够大了,谈论的Direct3D 9或Direct3D 10的,那么它是不是有用UWP。

“主应用程序的入口点和循环使用C++/CX语言扩展,或使用C++/WinRT语言突起时处于不同UWP。也就是说,你可以很容易地将它隔离开来,只关注DirectX交换链和渲染,这些在Win32 classic桌面和UWP应用程序中都是一样的。我在Direct3D VS Game templates这两个平台的结构相同。

对于C++/CX UWP的应用程序,该入口点是:

ref class ViewProvider sealed : public IFrameworkView 
{ 
    /* There is no WndProc. This class registers for events instead. */ 
} 

ref class ViewProviderFactory : IFrameworkViewSource 
{ 
public: 
    virtual IFrameworkView^ CreateView() 
    { 
     return ref new ViewProvider(); 
    } 
}; 

[Platform::MTAThread] 
int __cdecl main(Platform::Array<Platform::String^>^ argv) 
{ 
    auto viewProviderFactory = ref new ViewProviderFactory(); 
    CoreApplication::Run(viewProviderFactory); 
    return 0; 
} 

对于C++/WinRT的UWP的应用程序,该入口点是:

class ViewProvider final : 
    public winrt::implements<ViewProvider, IFrameworkView> 
{ 
    /* There is no WndProc. This class registers for events instead. */ 
} 

class ViewProviderFactory final : public 
    winrt::implements<ViewProviderFactory, IFrameworkViewSource> 
{ 
public: 
    IFrameworkView CreateView() 
    { 
     return winrt::make<ViewProvider>(); 
    } 
}; 

int WINAPI wWinMain(
    _In_ HINSTANCE hInstance, 
    _In_ HINSTANCE hPrevInstance, 
    _In_ LPWSTR lpCmdLine, 
    _In_ int  nCmdShow 
) 
{ 
    ViewProviderFactory viewProviderFactory; 
    CoreApplication::Run(viewProviderFactory); 
    return 0; 
} 
+0

这会教我在Goodwill购买2.02美元的书。当我买了它时,我忘记了UWP,但是在旧金山的商店销售总决赛已经太晚了。这是一个很好的原因。 – johnny

相关问题