2017-02-13 103 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

相關問題