zoukankan      html  css  js  c++  java
  • SWE 开发心得—8.11

    开发SWE的心得

    key:
    1.xamlsrc.SetFile (动态加载XAML文件,而不是以资源的形式)
    2.XAML文件当中有IMAGE 控件,但图片不能够显示(我所知道的有两种解决方案)


    开发环境:
    VS2005,VS2008
    建议使用VS2008,听说VS2010更加好,

    界面制作:
    使用BLEND X(2,3,4,...) 制作好界面,然后保存。
    使用VS200X(5,8)创建创建一个空的智能WIN32项目。


    1.加载XAML文件,加载成功之后,要注意此XAML文件还是在原来的存储位置,并没有移到当前工程目录下,也

    就是其只一个份,没有二份,这使用得与BLEND保持了同步。
    这个特点也提醒我们:当我们加载其它工程的源文件的时候,在使用#include的时候,要注意写清楚路径,当出现

    不能打开"xxx.h"文件的时候,要知道是有可能是路径不对。建议先将代码源文件COPY到当前工程目录上,然后再

    加载.


    SWE 其对于XAML是怎么样处理的呢.
    其是动态加载还是静态加载的呢。

    之前看到人家使用DirectUI的时候,其是程序运行之后,然后加载UI文件,之后进行解析。对于UI 部分的修改

    ,不需要重新编译。

    SWE其的处理机制与DirectUI有所不同,首先其是将XAML当作一种资源,这样其在编译的时候,资源编译器

    (RC.EXE)其将XAML编译成了二进制保存在程序的数据段当中,这就是为什么编译连接之后变成一个EXE,且这个

    EXE运行不受路径的影响.

    (其实这不全面,SWE其也能够实现DirectUI的特点,下面有所介绍,
    说的真的,这是在写此文的时候,才突然意识到,==>这也就是我的随笔,段与段之间有可能没有联系,我突然想到

    了,就要马上写下来,原因之一:在写的过程当中能够深入思考,原因之二:不写下来过会儿就forget)

    这种机制给我们带来了什么影响呢。
    1.如果我们想改变程序UI的结构,我只能运行的时候通过代码修改,且不能静态的修改XAML文件。如果修改了

    XAML文件且想得到XAML文件的效果,那么就是重新编译一次.

    2. SWE其将XAML作为资源,==>我们就应该以资源的角度来看待与使用,资源一个很重要特点:其保存在EXE的数据

    段当中。

    如 XRXamlSource 结构( xaml runtime xaml source)
    当我们已经加载了XAML作为资源的时候
    我们就使用
    XRXamlSource.SetResource(hInstance,TEXT("XAML"),MAKEINTRESOURCE(IDR_XAML1));

    当我们没有加载XAML作为资源,那么我们应该怎么样做呢.
    XRXamlSource::SetFile(filename); XRXamlSource其有一个SetFile的方法,此方法其有什么用处了。
    此方法其能够实现DirectUI特点:动态加载,但要注意路径。
    其作法如下:
    1.将XAML(S)文件COPY到目标设备nand flash目录 其路径应该:
    \NAND FLASH\Page.xaml
    2.XRXamlSource.SetFile("\\NAND FLASH\\Page.xaml");
    就是这么简单,刚开始错误的写成了
    xamlsrc.SetFile(L"F:\\C++2008_wince\\TestSWESimple\\TestSWESimple\\Page.xaml");
    出现的错误是:找不到目标文件。
    其为什么会找不到文件呢,是因为我们运行的EXE是在WINCE 6.0 目标设备上,而不是PC上,所以找不文件。
    TIPS:以后出现找“找不到目标文件”之类的错误,要思考是否是目录不对呀。


    XAML文件当中有IMAGE 控件,但图片不能够显示。
    这问题的原因与上面SetFile的”找不到目标文件"是一样的.
    也就是设计与运行环境不同而制造成的。这与将XAML文件作为资源与还不作为资源是没有关系的。

    其有两种办法:
    1.手动地将此控件<Image Source ="Image/xxx.png" ... />的图片xxx.png,复制到目标设备上,如\NAND

    FLASH\Image 目录下,然后将此控件的图片源路径修改为
    <Image Source="\NAND FLASH\Image\xxx.png" ... />
    优点:与EXE 分开,减少EXE的大小且能够在不重新编译的情况下替换图片。
    不足:  制作完界面之后,又要修改界面,一来麻烦(我有一个项目,其是使用图片作为控件,六十多张图片,要修改

    起来,那真是麻烦)二来不利于与美工同步工作。因为修改\NAND FLASH\Image\xxx.png 这样的路径在PC是

    无法显示的。

    MS的SWE 设计人员们其应该也考虑了这个问题,其提供了第二种方法:
    PAGE:http://msdn.microsoft.com/en-us/library/ee501817.aspx

    2.使用资源:
    首先 以资源的形式加载图片,
    然后 打开 资源文件 xx.rc.( 在XXX.RC上右键单击,选择查看代码),
    添加 如下代码. 以<Image Source ="Image/xxx.png" ... />为例
    Image/xxx.png  XAML_RESOURCE      DISCARDABLE  "xxx.png"

    (Image/xxx.png 其是在BLEND下为了方便管理图片,自己添加的一个文件夹,
    注意我们没有必要(突然想一下也许有必要,反正先以最简单的方式制作,之后熟练了,想怎么样就怎么样了)

    在VS当中添加此文件
    )

    如果是<Image Source ="yyy.png" ... /> (yyy.png在当前工程的目录下)
    yyy.png XAML_RESOURCE  DISCARDABLE  "yyy.png"

    如果yyy.png 没有在当前工程的目录下,如在D:下
    yyy.png XAML_RESOURCE  DISCARDABLE  "D:\\yyy.png"

    优点:不需要修改XAML文件且能够与美工保持同步
    不足:  EXE文件太大(听话太大了影响加载速度,有时还不能够加载,其实我们一般不要担心这个问题,
     原因:我们程序一般也不会太大,如果真的很大的话,我们可以可以就资源单独出来制作纯资源 

    DLL(MSDN 上有,我只是制作过WINCE 6.0 非SWE项目的时候,使用过这种技术,希望哪位工程师提能一个

    DEMO))


    (一个小笑话:我在用BLEND 2 制作好界面,界面当中包含图片,其使用格式如下<Image

    Source="images/xxx.png" .../>。然后我在VS2005的工程当中也添加一个Images文件夹且将相关图片添加此目录下

    ,结果其没有显示,原因与解决方法在此文章当中)

    (小插曲:我总是喜欢将当前工程所需要的文件先COPY 到当前工程下来,然后再进行加载,以求能够成功加载,

    如将background_帮助_2.png这张图片复制到当前工程目录下来,然后再加载,结果如下:
    BACKGROUD_帮助_2.PNG      XAML_RESOURCE           "backgroud_帮助_2.PNG"

    其实这完成没有必要且还有很大的负作用,我们可以直接的加载,得到的结果如下:
    BACKGROUD_照片.PNG        XAML_RESOURCE           "D:\\backgroud_照片.PNG"
    (tips:BACKGROUD_照片.PNG 在D:盘下)
    ==> 只要提供了访问路径就可以了
    )

    小结:解决了加载APP.XAML 资源文件,与显示图片,为我们制作图片按钮提供了信心。

  • 相关阅读:
    HolidayFileDisPersonViewList.js中的一些基础
    保存会话数据的两种技术,Cookie,Session
    web服务器调用Servlet的过程
    XML基础
    HttpServletRequest,HttpServletResponse
    金蝶handler中 collection 代码片段理解
    Rancher 容器云平台搭建
    Docker的安装及镜像加速配置
    MYSQL 合并行
    Spring Ioc 容器核心概览
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1797515.html
Copyright © 2011-2022 走看看