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

原文地址:https://www.cnblogs.com/pengxinglove/p/1797515.html