在“XAML for Windows Embedded(Compact 2013)”项目

时间:2017-08-25 07:52:27

标签: c++ xaml silverlight windows-ce windows-embedded

我将c ++代码中的图像切换为“XAML for Windows Embedded(Compact 2013)”项目(也称为“Silverlight for Windows Embedded”)的一部分,如described in this answer.

我使用数字作为生成的文件PROJECTNAMEGenerated.rc2中列出的URI。它看起来像这样:

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"

如果我添加页面或其他图像,看起来数字会发生变化。

知道我如何获得可用于IXRBitmapImagePtr->SetUriSource(src);(或IXRBitmapImage.SetUriSource(src);)的健壮URI吗?

我还尝试将图像作为资源添加到应用程序中并加载它们:

    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 个答案:

答案 0 :(得分:0)

我找到了解决方案。

再次将资源添加到"标准"资源文件( AppName.rc )并给他们一个id(你不必复制文件,你可以使用原始路径)。

e.g:

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

然后你可以使用这个id:

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 for Windows Embedded Developer's Guide"说可以这样做(但我没有尝试过):

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

mybe你必须添加一个"#":

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