Получите надежные исходные 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
Я определяю).
1 ответ
Я нашел решение.
Снова добавьте ваши ресурсы в "стандартный" файл ресурсов (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");