一.问题描述

Duilib一般通过加载写好的xml文件显示界面,xml中包含了各种资源图片以及显示属性等,最近使用时遇见两个问题,第一个就是没有设置duilib的主程序句柄,导致加载xml文件时找不到相对路径。第二个问题就是在一个程序中多个界面的xml只能放在同一个文件夹,不能一个xml一个文件夹这种方式

二.解决方法

问题1解决方法

在创建duilib窗口之前,设置主程序句柄,如下代码,在注释1,2,3中分别表示了主程序句柄的设置过程,这一步是必要的,因为代码中继承自duilib的通用窗口类WindowImplBase的GetSkinFolder函数指定的路径是相对于此处主程序模块的所在路径。

其实这里也可以不设置主程序路径,而在GetSkinFolder函数下指定xml文件的绝对路径即可。

但是还是第一种设置主程序句柄的方式比较方便。

bool CXCalculatorUI::CalcCreatDlg(int x, int y, int width, int height, HWND hwnd)
{//获取主程序句柄(代表主程序内存的基地址,hwnd表示的是一个窗口的句柄,即一个窗口资源的基地址),并在后续初始化使用,否则会出现找不到资源文件,导致断言失败HINSTANCE hInstance = GetModuleHandle(NULL);   //1 获取主程序句柄CPaintManagerUI::SetInstance(hInstance);       //2 在duilib中设置主程序句柄CWndShadow::Initialize(hInstance);             //3 初始化操作if (pCalcDlg != NULL){::ShowWindow(*pCalcDlg, SW_SHOW);return true;}pCalcDlg = new CMainFrame();if (pCalcDlg == NULL)return false;DWORD dwStyle = UI_WNDSTYLE_FRAME;dwStyle = dwStyle^WS_MAXIMIZEBOX;#if defined(WIN32) && !defined(UNDER_CE)pCalcDlg->Create(hwnd, _T("Calc计算"), UI_WNDSTYLE_CHILD, WS_EX_STATICEDGE | WS_EX_APPWINDOW, x, y, 0, 0);
#elsepDialog->Create(NULL, _T("PIN库计算"), dwStyle | WS_POPUP, NULL, 0, 0, 0, 0);
#endifreturn true;
}

问题2解决方法

假如一个程序包含多个duilib显示界面,每一个界面对应一个xml文件,此时多个xml文件应该共同放在一个目录之下,比如skin目录,而且xml文件必须放在当前skin目录,其他一些资源文件(图片,视频等)可以在skin目录下新建子目录存放。

为什么这样呢,通过调试代码发现,在duilib加载第一个xml并且创建显示界面的时,会读取该xml文件的所在目录,并以此目录为默认目录,在下次加载第二个xml文件并且创建时并不会重新刷新这个目录,而是在这个目录下继续查找第二个xml文件,如果此时单独指定第二个xml文件的路径并不会生效,而是以第一个加载的xml文件的坐在目录为准,所以,每个界面的xml文件必须保持在一个文件夹下。

这种方式也可以更改,修改一下duilib的源代码即可,但是感觉没必要,所有的xml文件放在一个目录下,比较方便维护,更整洁,更人性化,因此还是遵照这种方式。

duilib加载xml以及资源文件的路径问题相关推荐

  1. 页面加载速度-合并资源文件

    前言 一直觉得自己的博客站点页面加载很慢, 就想着去优化一下. 呐, 下图是一次文章页面的加载, 需要2.5s. 其中 js 文件就有18个. 众所周知, 浏览器对资源文件的并行下载数量是有限制的(不 ...

  2. idea 设置加载多个资源文件,显示本地图片

    idea 经常只会设置一个资源路径,这个路径就是项目的路径.但是当要加载的文件处于其他位置时,则需要增加虚拟路径的配置. 如图:第一个是项目路径 第二个是图片路径 转载于:https://www.cn ...

  3. IOS 解决WKWebView加载本地html资源文件异常处理

    wkwebView加载本地资源时,有时候无法加载全css等资源文件.导致无线显示.需要做一下特殊处理: WKWebViewConfiguration *config = [[WKWebViewConf ...

  4. SpringBoot2.x 同个文件的加载顺序,静态资源文件

    Spring Boot 默认会挨个从 META/resources > resources > static > public 里面找是否存在相应的资源,如果有则直接返回. 默认配置 ...

  5. 【Android 插件化】Hook 插件化框架 ( 加载插件包资源 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  6. 解决dom4j加载xml文件性能慢的问题

    解决dom4j加载xml文件性能慢的问题 参考文章: (1)解决dom4j加载xml文件性能慢的问题 (2)https://www.cnblogs.com/wulm/p/9863104.html 备忘 ...

  7. android xml 加载错误提示,加载uixml文件失败 打开wps时显示“加载XML文件失败1

    打开wps时显示"加载XML文件失败." 打开wps时显示"加载XML文件失败1 关闭所有打开的Word文档: 开始 → 运行 → 粘贴上面复制的命令 → 确定. 在打开 ...

  8. IDEA 加载xml文件失败,解决方案

    问题 在IDEA中,第在src/main路径下添加了xml,使用如下代码加载xml文件时: String path = JsoupDemo.class.getClassLoader().getReso ...

  9. Android动态加载XML文件及控件来简单实现QQ好友印象的功能

    在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态 ...

  10. Spring加载xml文件错误异常:Offending resource: class path resource [spring-context.xml];

    很少写单纯的java工程,在运行的时候,加载xml文件的时候报错,在此记录错误信息,备自己以后查阅,错误信息如下: Java HotSpot(TM) 64-Bit Server VM warning: ...

最新文章

  1. ajax请求多张图片数据库,ajax上传多文件,一次上传多张图片
  2. TensorFlow——在web.py、Django环境下TensorFlow(Keras、tf.keras)加载和使用多模型失败解决方案
  3. 学习记录-class与namespace的区别
  4. Ural_1353. Milliard Vasya's Function(DP)
  5. |洛谷|DFS|P1101 单词方阵
  6. 用CSS让文字居于div的底部
  7. 微信开发之网页授权获取用户基本信息
  8. 12年的电脑,太卡了,有什么办法解决吗?
  9. 多用户用linux会很卡顿吗,新手学Linux系统,解决Linux系统卡顿的方法
  10. asp td tr 高度_ASP.NET Core Blazor 初探之 Blazor Server
  11. nginx如何编译安装mysql_centos系统编译安装nginx+php环境另加独立mysql教程
  12. 分类问题的评估指标一览
  13. 如何使用PDF虚拟打印机打印文件
  14. 微信公众号自动回复添加文件
  15. python四分位数_python 计算箱线图、中位数、上下四分位数等
  16. asp+access实现增删改查
  17. 使用selenium自动爬取斗鱼直播平台的所有房间信息
  18. web -【在线聊天】
  19. 手推向量投影长度、投影向量
  20. 学习使用master.dbo.spt_values表

热门文章

  1. Oracle单实例开机自启动
  2. java json 替换属性值_替换JSONObject某个对象的值
  3. lua搭建ui_LTUI, 一个基于 lua 的跨平台字符终端 UI 界面库
  4. mysql_视图与变量
  5. 软件技术方案_广东省汕尾市海丰陈氏数字化网络化全县族谱统修工作方案(草案)...
  6. java web打印 闪退_tomcat闪退解决方案
  7. python中await async_asyncio中的async和await
  8. chr() 、ord()
  9. 【转载】Vue 2.x 实战之后台管理系统开发(二)
  10. SmtpClient SSL 发送邮件异常排查