最近在工作中用到了SOUI库,其中需要实现这么一个需求—-整合soui-sys-resource.dll里面的资源到主工程中,最终生成一个单文件版的可执行程序。经过一番摸索后,最终成功实现o(∩∩)o,特意在此留下足迹,希望能够帮助到入坑的小伙伴啦(*^_^*)
第一步:将soui-sys-resource工程中的资源文件夹拷贝到主工程之中
因为
soui-sys-resource
工程其实就是生成了一个纯资源DLL,因此,直接将工程中的theme_sys_res
文件夹拷贝到自己的SOUI工程的uires文件之中即可,如图所示:
第二步:将theme_sys_res文件夹下的所有资源文件的相对路径添加到uires.idx文件之中,并设置其对应的资源类型及名称
由于这个是默认资源,因此只需要参照SOUI开发团队提供的theme_sys_res.rc2文件改就可以啦(^__^)。
- 在uires.idx文件之中的
<LAYOUT>
节点下追加以下内容:
<!--默认界面资源-->
<file name="SYS_XML_EDITMENU" path="theme_sys_res\sys_xml_editmenu.xml" />
<file name="SYS_XML_MSGBOX" path="theme_sys_res\sys_xml_msgbox.xml" />
- 在此文件之中的
<PNG>
节点下添加以下内容:
<!--界面库默认资源-->
<file name="SYS_BORDER" path="theme_sys_res\sys_border.png" />
<file name="SYS_CHECKBOX" path="theme_sys_res\sys_checkbox.png" />
<file name="SYS_RADIO" path="theme_sys_res\sys_radio.png" />
<file name="SYS_FOCUS_CHECKBOX" path="theme_sys_res\sys_focus_checkbox.png" />
<file name="SYS_FOCUS_RADIO" path="theme_sys_res\sys_focus_radio.png" />
<file name="SYS_SCROLLBAR" path="theme_sys_res\sys_scrollbar.png" />
<file name="SYS_TREE_CHECKBOX" path="theme_sys_res\sys_tree_checkbox.png" />
<file name="SYS_TREE_TOGGLE" path="theme_sys_res\sys_tree_toggle.png" />
<file name="SYS_HEADER" path="theme_sys_res\sys_header.png" />
<file name="SYS_SPLIT_VERT" path="theme_sys_res\sys_split_vert.png" />
<file name="SYS_SPLIT_HORZ" path="theme_sys_res\sys_split_horz.png" />
<file name="SYS_PROG_BKGND" path="theme_sys_res\sys_prog_bkgnd.png" />
<file name="SYS_PROG_BAR" path="theme_sys_res\sys_prog_bar.png" />
<file name="SYS_VERT_PROG_BKGND" path="theme_sys_res\sys_vert_prog_bkgnd.png" />
<file name="SYS_VERT_PROG_BAR" path="theme_sys_res\sys_vert_prog_bar.png" />
<file name="SYS_SLIDER_THUMB" path="theme_sys_res\sys_slider_thumb.png" />
<file name="SYS_TAB_PAGE" path="theme_sys_res\sys_tab_page.png" />
<file name="SYS_BTN_MINIMIZE" path="theme_sys_res\sys_btn_minimize.png" />
<file name="SYS_BTN_RESTORE" path="theme_sys_res\sys_btn_restore.png" />
<file name="SYS_BTN_CLOSE" path="theme_sys_res\sys_btn_close.png" />
<file name="SYS_BTN_MAXIMIZE" path="theme_sys_res\sys_btn_maximize.png" />
<file name="SYS_MENU_CHECK" path="theme_sys_res\sys_menu_check.png" />
<file name="SYS_MENU_ARROW" path="theme_sys_res\sys_menu_arrow.png" />
<file name="SYS_MENU_SEP" path="theme_sys_res\sys_menu_sep.png" />
<file name="SYS_MENU_BORDER" path="theme_sys_res\sys_menu_border.png" />
<file name="SYS_MENU_SKIN" path="theme_sys_res\sys_menu_skin.png" />
<file name="SYS_ICONS" path="theme_sys_res\sys_icons.png" />
<file name="SYS_WND_BKGND" path="theme_sys_res\sys_wnd_bkgnd.png" />
第三步:在UIDEF资源
(通常是init.xml
)中添加各个默认资源文件的属性,以便被SOUI的Skin引擎正确解析
这次需要添加的信息可以从
theme_sys_res\sys_xml_skin.xml
上获得,如下图所示:
- 直接将
sys_xml_skin.xml
中的<skin>
下的内容拷贝到UIDEF资源
(通常是init.xml
)下的<skin>
标签下即可
<!--默认界面资源-->
<imglist name="_skin.sys.checkbox" src="PNG:SYS_CHECKBOX" states="8" />
<imglist name="_skin.sys.radio" src="PNG:SYS_RADIO" states="8" />
<imglist name="_skin.sys.focuscheckbox" src="PNG:SYS_FOCUS_CHECKBOX"/>
<imglist name="_skin.sys.focusradio" src="PNG:SYS_FOCUS_RADIO"/>
<button name="_skin.sys.btn.normal" colorBorder="#7D9EBC" colorUp="#FEFEFE" colorDown="#C6E2FD" colorUpHover="#FEFEFE" colorDownHover="#DBEDFE" colorUpPush="#C6E2FD" colorDownPush="#FEFEFE"/>
<scrollbar name="_skin.sys.scrollbar" src="PNG:SYS_SCROLLBAR" margin="3" hasgripper="0"/>
<imgframe name="_skin.sys.border" src="PNG:SYS_BORDER" states="2" margin-x="2" margin-y="2"/>
<imglist name="_skin.sys.dropbtn" src="PNG:SYS_DROPBTN" states="3"/>
<imglist name="_skin.sys.tree.toggle" src="PNG:SYS_TREE_TOGGLE" states="6"/>
<imglist name="_skin.sys.tree.checkbox" src="PNG:SYS_TREE_CHECKBOX" states="9"/>
<imglist name="_skin.sys.tab.page" src="PNG:SYS_TAB_PAGE" states="3"/>
<imgframe name="_skin.sys.header" src="PNG:SYS_HEADER" margin-x="3" margin-y="3" states="4"/>
<imgframe name="_skin.sys.split.vert" src="PNG:SYS_SPLIT_VERT" top="20" bottom="10"/>
<imgframe name="_skin.sys.split.horz" src="PNG:SYS_SPLIT_HORZ" left="20" right="10"/>
<imgframe name="_skin.sys.prog.bkgnd" src="PNG:SYS_PROG_BKGND" margin-x="5"/>
<imgframe name="_skin.sys.prog.bar" src="PNG:SYS_PROG_BAR" margin-x="3"/>
<imgframe name="_skin.sys.vert.prog.bkgnd" src="PNG:SYS_VERT_PROG_BKGND" margin-y="5"/>
<imgframe name="_skin.sys.vert.prog.bar" src="PNG:SYS_VERT_PROG_BAR" margin-y="3"/>
<imglist name="_skin.sys.slider.thumb" src="PNG:SYS_SLIDER_THUMB" states="4"/>
<imglist name="_skin.sys.btn.close" src="PNG:SYS_BTN_CLOSE" states="3" />
<imglist name="_skin.sys.btn.minimize" src="PNG:SYS_BTN_MINIMIZE" states="3" />
<imglist name="_skin.sys.btn.maximize" src="PNG:SYS_BTN_MAXIMIZE" states="3" />
<imglist name="_skin.sys.btn.restore" src="PNG:SYS_BTN_RESTORE" states="3" />
<imglist name="_skin.sys.menu.check" src="PNG:SYS_MENU_CHECK" states="3" />
<imglist name="_skin.sys.menu.arrow" src="PNG:SYS_MENU_ARROW" states="2" />
<imgframe name="_skin.sys.menu.sep" src="PNG:SYS_MENU_SEP" left="25"/>
<imgframe name="_skin.sys.menu.border" src="PNG:SYS_MENU_BORDER" margin-x="2" margin-y="2"/>
<imgframe name="_skin.sys.menu.skin" src="PNG:SYS_MENU_SKIN" states="2" left="25" top="2" bottom="2"/>
<imglist name="_skin.sys.icons" src="PNG:SYS_ICONS" states="12"/>
<imgframe name="_skin.sys.wnd.bkgnd" src="PNG:SYS_WND_BKGND" left="5" right="5" top="40" bottom="40"/>
最后,为了避免出现资源冲突,将SOUI工程中自动加载soui-sys-resource.dll
里面的资源文件代码注释即可,如图所示:
整合完成o(∩_∩)o……
参考资料:
- 《第四篇:SOUI资源文件组织》