2016-08-16 11 views
0

いくつかの.curファイルがDLLファイルに埋め込まれているため、UWP C++プロジェクトで読み込んで使用したいと考えています。これはすべて可能ですか?UWPのdllからリソースをロードする方法は?

私は、Win32ではLoadImageまたはLoadCursorを使用できますが、そのAPIはUWPでは使用できないことを知っています。 LoadPackagedLibraryを使用してDLLを読み込むことはできますが、そこからカーソルを取得する方法はわかりません。

+0

UWPカント利用のWin32 DLL – lindexi

+0

私はそれはあなたが何を意味するのかである場合は、リソースが含まれているUWP DLLを作成することができますか? – mnovakovic

答えて

0

これを行うには、CoreCursor APIを使用することができます。

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は、あなたがXAMLを使用したりしていないかどうかに応じて、(CoreIndependentInputSourceなど)ICorePointerInputSourceまたはICoreWindowかもしれません。

リソースをDLLに含めることができるかどうか、またはそれらを.exe自体に含める必要があるかどうかは、100%肯定的ではありません。

+0

ICoreCursorFactoryとRoGetActivationFactoryを使っても問題ありませんか?私はそれらが変わることができるプライベートAPIであり、おそらくポータブル/安全ではないような気がしますか? – mnovakovic

+0

これらはプライベートAPIではありません。彼らは一般に公開されており、使用するのに完全に安全です。実際には、それはC++/CXと。NETはカバーの背後にあります。 – Sunius

2

私はいくつかの.curファイルをDLLファイルに埋め込んでおり、UWP C++プロジェクトで読み込んで使用したいと思います。これはすべて可能ですか?

私の経験から、現在は不可能です。ここに私の説明は、次のとおりです。

.CURファイルを使用してカーソルカスタム設定方法については、前にいくつかの議論があります。このarticleはUWPアプリのために古くなっ

ネイティブリソースライブラリにカスタムカーソルを定義し、CoreWindow.PointerCursorプロパティを使用してカーソルを設定する

私たちはステップのほとんどが同じで、DLL(ユニバーサル・Windowsの場合)プロジェクトにカスタムカーソルを作成する必要があるが、は上記記事にカスタムカーソルパーツを作成参照してください。

その後、カスタムカーソルを設定するには、次のコードを使用して、私たちのC++ UWPアプリに.rcファイル既存のアイテムを追加します。

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

私はにリソースファイルをパッケージ化しようとしましたWindowsランタイムコンポーネントは、参照として追加されていますが、リソースを正しく認識できません。

私たちはこのような特別な要件のために私たちのuwpアプリケーションでリソースを統合する必要があります。

私のサンプルを参照してください:https://github.com/Myfreedom614/UWP-Samples/tree/master/UWPCreateCurCPPAPP1/UWPCreateCurCPPAPP1

関連する問題