Получите надежные исходные URI для изображений в проектах «XAML для Windows Embedded (Compact 2013)»

Я переключаю изображения в коде c ++ за часть проекта «XAML для Windows Embedded (Compact 2013)» (также известного как «Silverlight для Windows Embedded»), например описано в этом ответе.

Я использую числа в качестве URI, которые перечислены в сгенерированном файле PROJECTNAMEGenerated.rc2, Это выглядит так:

IDR_PROJ_APP             SLWE_XAML DISCARDABLE "XamlPack\\App.Compressed"IDR_PROJ_DISCLAIMERPAGE  SLWE_XAML DISCARDABLE "XamlPack\\DisclaimerPage.Compressed"IDR_PROJ_EASTEREGGPAGE   SLWE_XAML DISCARDABLE "XamlPack\\EasterEggPage.Compressed"IDR_PROJ_MAINPAGE        SLWE_XAML DISCARDABLE "XamlPack\\MainPage.Compressed"IDR_PROJ_MEASUREMENTPAGE SLWE_XAML DISCARDABLE "XamlPack\\MeasurementPage.Compressed"
105 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryChargerError.png"106 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryHigh.png"107 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\BatteryLow.png"108 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\disclaimer.png"109 XAML_RESOURCE DISCARDABLE "..\\Xaml\\Ressources\\easter.jpg"

И, похоже, цифры изменятся, если я добавлю страницу или другое изображение.

Любая идея, как получить надежный URI, который я могу использовать для IXRBitmapImagePtr->SetUriSource(src); (или же IXRBitmapImage.SetUriSource(src);)?

Я также попытался добавить изображения в качестве ресурсов в приложение и загрузить их так:

    BSTR src = TEXT("#IDB_BATTERY_HIGH_CHARGING");
IXRApplicationPtr app;
GetXRApplicationInstance(&app);
HINSTANCE instance = App::GetHInstance();
IWICBitmap* img = 0;
HRESULT res = app->LoadImageFromResource(instance,src, L"PNG", &img);
IXRBitmapImagePtr bitmapImage;
app->CreateObject(IID_IXRBitmapImage, &bitmapImage);
res = bitmapImage->SetSource(img);
m_pBatteryStateImage->SetSource(bitmapImage);

Это устанавливает другой образ — но неправильный (и всегда один и тот же, независимо от того, какой src Я определяю).

0

Решение

Я нашел решение.

Добавьте ваши ресурсы снова в «стандартный» файл ресурсов (AppName.rc) и дать им идентификатор (вам не нужно копировать файл, вы можете использовать оригинальный путь).

например.:

 IDB_ERROR  PNG                     "..\\Xaml\\Ressources\\Error.png"

Тогда вы можете использовать этот идентификатор:

int src = IDB_ERROR;
IXRApplicationPtr app;
GetXRApplicationInstance(&app);
HINSTANCE instance = App::GetHInstance();
IWICBitmap* img = 0;
HRESULT res = app->LoadImageFromResource(instance, MAKEINTRESOURCE(src), L"PNG", &img);
IXRBitmapImagePtr bitmapImage;
app->CreateObject(IID_IXRBitmapImage, &bitmapImage);
res = bitmapImage->SetSource(img);
m_pBatteryStateImage->SetSource(bitmapImage);

«Руководство разработчика по Silverlight для Windows Embedded» говорит, что это можно сделать так (но я не пробовал):

bitmapImage->SetUriSource(L"Assets/ninthAve.png");

И, возможно, вы должны добавить «#»:

bitmapImage->SetUriSource(L"#Assets/ninthAve.png");
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]