2016-08-16 5 views
0

Ich habe einige .cur-Dateien in eine DLL-Datei eingebettet und möchte sie in meinem UWP C++ - Projekt laden und verwenden. Ist das überhaupt möglich?Wie lade ich eine Ressource von einer DLL in UWP?

Ich weiß, dass ich in Win32 LoadImage oder LoadCursor verwenden kann, aber diese API ist nicht für UWP verfügbar. Ich kann eine DLL mit LoadPackagedLibrary laden, aber keine Ahnung, wie man den Cursor daraus holt.

+0

UWP kippe Verwendung win32 dll – lindexi

+0

Ich kann eine UWP DLL erstellen, die Ressourcen enthält, wenn es das ist, was Sie gemeint? – mnovakovic

Antwort

0

können Sie CoreCursor APIs verwenden, um dies zu tun:

template <typename T> 
HRESULT RestoreCursor(T* cursorOwner, uint32_t resourceId) 
{ 
    using namespace ABI::Windows::UI::Core; 
    using namespace Microsoft::WRL; 
    using namespace Microsoft::WRL::Wrappers; 

    ComPtr<ICoreCursorFactory> cursorFactory; 
    hr = RoGetActivationFactory(HStringReference(L"Windows.UI.Core.CoreCursor").Get(), __uuidof(ICoreCursorFactory), &cursorFactory); 
    if (FAILED(hr)) return hr; 

    ComPtr<ICoreCursor> cursor; 
    hr = cursorFactory->CreateCursor(CoreCursorType_Arrow, resourceId, &cursor); 
    if (FAILED(hr)) return hr; 

    return cursorOwner->put_PointerCursor(cursor.Get()); 
} 

T hier sein kann ICorePointerInputSource (wie CoreIndependentInputSource) oder ICoreWindow, je nachdem, ob Sie XAML verwenden oder nicht.

Ich bin nur nicht 100% positiv, ob Sie Ressourcen in DLL einschließen können, oder ob sie in der .exe selbst enthalten sein müssen.

+0

Sind Sie sicher, dass es in Ordnung ist, ICoreCursorFactory und RoGetActivationFactory einfach so zu verwenden? Ich habe das Gefühl, dass dies private APIs sind, die sich ändern können und wahrscheinlich nicht zu tragbar/sicher sind? – mnovakovic

+0

Das sind keine privaten APIs. Sie sind öffentlich und absolut sicher zu benutzen. Genau das ist es, was C++/CX und.NET macht hinter den Abdeckungen. – Sunius

2

Ich habe einige .cur-Dateien in eine DLL-Datei eingebettet, und ich möchte sie in meinem UWP C++ - Projekt laden und verwenden. Ist das überhaupt möglich?

Basierend auf meiner Erfahrung ist es derzeit unmöglich. Hier sind meine Erklärungen:

Über wie benutzerdefinierte einstellen Cursor .cur Datei verwenden, gibt es einige Diskussionen vor:

Diese article für UWP App ist veraltet , aber die Idee ist die gleiche: Definieren Sie einen benutzerdefinierten Cursor in einer nativen Ressourcenbibliothek und setzen Sie den Cursor mit CoreWindow.PointerCursor Eigenschaft

Wir brauchen einen benutzerdefinierten Cursor in einem DLL (Universal Windows) Projekt zu erstellen, sind die meisten Schritte sind die gleichen, bitte Erstellen Sie eine benutzerdefinierte CURSOR Teil in der oben Artikel sehen.

Dann fügen Sie das vorhandene Element RC-Datei in unserem C++ UWP App, verwenden Sie den folgenden Code benutzerdefinierten Cursor zu setzen:

Windows::UI::Core::CoreCursorType cursorType = Windows::UI::Core::CoreCursorType::Custom; 
CoreCursor ^* theCursor = new CoreCursor^(nullptr); 
*theCursor = ref new CoreCursor(cursorType, 101); //101 is the resource id number 
CoreWindow::GetForCurrentThread()->PointerCursor = *theCursor; 

enter image description here

Ich habe versucht, die Ressource-Datei in ein zu verpacken Windows Runtime Component, obwohl es als Referenz hinzugefügt wurde, kann die Ressource nicht korrekt erkannt werden.

Also müssen wir die Ressource in unserer uwp App für solche speziellen Anforderungen integrieren.

Bitte meine Probe sehen: https://github.com/Myfreedom614/UWP-Samples/tree/master/UWPCreateCurCPPAPP1/UWPCreateCurCPPAPP1

Verwandte Themen