WinRT 将RESX的Designer cs改造给RESW资源文件使用

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

众所周知,Windows 8 WinRT开发中Visual Studio工程模板中的RESW资源文件没有像RESX资源文件那样,具有自动生成的属性定义。而RESX资源文件的属性定义是通过其背后的xxx.Designer.cs文件,我们要实现的就是把RESX资源文件的Designer.cs改造给RESW资源文件使用,这样RESW资源文件的字符串也可以通过一个静态类型来直接访问了。

 

 

 

步骤一就是定义RESX资源文件,在任何非WinRT工程中都是可以定义RESX资源文件的。定义好了RESX资源文件后,全选RESX资源文件编辑中的内容,复制,并粘贴到WinRT的RESW资源文件编辑窗口中,这样RESW资源文件就有了和RESX一样的数据内容。

 

image

 

步骤二是在全选RESX资源文件后的xxx.Designer.cs类型的内容,并粘贴到WinRT工程中。

 

接下来开始对RESX资源文件的Designer.cs进行改造,因为它是无法直接通过WinRT工程的编译的。

 

 

 

RESX资源文件的Designer.cs其实是通过初始化一个ResourceManager类型,然后通过GetString方法来定义所有属性,而在WinRT中,推荐使用的类型是ResourceLoader,但是ResourceManager类型本身仍然存在,可以继续使用,但是需要做一些修正才能通过编译,找到Designer.cs中的ResourceManager属性,它的定义类似这样:

 
  

internal static global::System.Resources.ResourceManager ResourceManager

  

{

  

    get

  

    {

  

        if (object.ReferenceEquals(resourceMan, null))

  

        {

  

            global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Mgen.WpfApp.Resource", typeof(Resource).Assembly);

  

            resourceMan = temp;

  

        }

  

        return resourceMan;

  

    }

  

}

 
 

 

 

其中这句:

 
  

new global::System.Resources.ResourceManager("Mgen.WpfApp.Resource", typeof(Resource).Assembly);

 
 

 

 

把第一个参数改为RESW的文件名称,不需要加上命名空间,比如Resources.resw就改成Resources。

 

第二个参数无法通过编译的,因为在WinRT中Type类型没有Assembly属性,我们需要System.Reflection命名空间内的扩展方法来获取类型的TypeInfo,然后再获取它的Assembly对象。因此需要在最上方命名空间引用上加入:

 
  

using System.Reflection;

 
 

 

 

所以这句代码最终改成:

 
  

new global::System.Resources.ResourceManager("Resources", typeof(Resource).GetTypeInfo().Assembly);

 
 

 

 

关于GetTypeInfo,可以参考另一篇文章:.NET 4.5(C#):TypeInfo类型和反射中的成员枚举

 

关于ResourceManager和RESX文件,可以参考:.NET(C#):浅谈程序集清单资源和RESX资源

 

 

 

最后就可以通过静态类型来访问RESW的资源数据了,类似这样:

 
  

async private void Button_Click_1(object sender, RoutedEventArgs e)

  

{

  

    await new Windows.UI.Popups.MessageDialog(Resource.a).ShowAsync();

  

}

 
 

 

 

当然如果RESW资源变化后,读者必须重新再复制RESW资源内容到RESX编辑器中,然后再把RESX的Designer.cs内容更新到修改后的RESW的Designer.cs中。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
Qt调用Windows Runtime (WinRT) API时,需要特别处理,因为WinRTWindows 8及更高版本中的一部分,而Qt默认并不是直接支持的。要在.pro文件中正确地包含WinRT头文件和库,你需要采取一些额外步骤。 首先,确保安装了Windows SDK,并且配置了Qt的构建系统以便能够链接到WinRT库。你可以按照以下步骤操作: 1. **添加WinRT依赖**: - 打开你的`.pro`文件,在`QMAKE_EXTRA_TARGETS`中添加`winrt`或`uwp`目标,这取决于你是在创建Windows Store应用还是普通的桌面应用: ```pro QMAKE_EXTRA_TARGETS += winrt ``` 2. **启用WinRT支持**: - 设置`winrt`模块,允许Qt找到并链接到必要的库: ```pro winrt { QT += winrt } ``` 3. **指定WinRT头文件目录**: - 添加`INCLUDEPATH`,指向包含WinRT头文件的路径,例如: ```pro INCLUDEPATH += $$([WINRT]includePath) ``` 这里`[WINRT]includePath`是一个条件变量,它会根据Windows SDK的设置自动填充正确的路径。 4. **链接WinRT库**: - 添加`LIBS`,链接到WinRT运行库: ```pro LIBS += [WINRT]runtime.lib ``` `[WINRT]runtime.lib`也是条件变量,链接正确的WinRT库。 5. **编译前的准备**: - 确保已经设置了WinSDK路径,可以在环境变量`VSINSTALLDIR`或`VCToolsInstallDir`下找到,有时也需要手动配置`QMAKE_MSVC201X_SDK_PATH`。 6. **生成项目**: - 使用`qmake`更新项目的配置,然后通过`jom`或`ninja`等构建工具编译,或者在Qt Creator中构建。 注意:在实际项目中,可能还需要处理Visual Studio解决方案的管理,包括添加WinRT项目作为外部依赖等。如果使用的是Qt Creator,可能会有特定向导帮助设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值