2017-02-13 11 views
0

При программировании с помощью DirectX используются методы, отличные от UWP, и такие возможности, как WinMain и WinProc? У меня есть старшая книга на win32 для Directx, но она полностью отличается от UWP.В Directx с UWP можно использовать win32?

+0

UWP использует 'запись WinMain' как и любое приложение Windows Desktop. И поскольку DirectX на десятилетие старше UWP, вы, безусловно, можете писать приложения для Windows Desktop с DirectX. Почему вы предполагаете иначе? Во всяком случае, трудно сказать, что вы на самом деле здесь. – IInspectable

+0

Я читал, что WinMain и WinProc ушли в UWP. Редактировать:. Я пытаюсь понять, не пустая трата времени, чтобы выучить win32, для новых проектов. – johnny

+0

Я не уверен, какую магию вы относите к предоставленной пользователем точке входа. Это просто символ, и это может быть что угодно. Как это бывает, точка входа UWP по-прежнему такая же, как для любого приложения Win32, но в зависимости от языковой проекции вы можете не видеть ее как таковой. Разве это трата для изучения Windows API? Я бы сказал: Нет, никогда. UWP - это Win32, просто с множеством COM. – IInspectable

ответ

2

DirectX 11 поддерживается Универсальной платформой Windows (UWP), а основной API такой же, как и в классических настольных приложениях Win32. Большие различия в библиотеках утилиты, потому что вы не можете использовать устаревшую библиотеку D3DX в UWP и использовать 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.

Начальная точка и основное назначение приложения используются в UWP при использовании языковых расширений C++/CX или с использованием языковых прогнозов C++/WinRT. Тем не менее, вы можете легко изолировать это и просто сосредоточиться на swapchain DirectX и рендеринге, который является таким же как в Windows, так и в 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

Это научит меня покупать книгу за $ 2.02 в Goodwill. Я забыл о UWP, когда купил его, но потом он был слишком лат. All Sales Final в магазине сбережений. Это хорошая причина. – johnny