• 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 资源文件,与显示图片,为我们制作图片按钮提供了信心。

  • 相关阅读:
    668. Kth Smallest Number in Multiplication Table
    658. Find K Closest Elements
    483. Smallest Good Base
    475. Heaters
    454. 4Sum II
    441. Arranging Coins
    436. Find Right Interval
    410. Split Array Largest Sum
    392. Is Subsequence
    378. Kth Smallest Element in a Sorted Matrix
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1797515.html
Copyright © 2020-2023  润新知