转载请说明出处
今天早上把整个软件的标题栏部分做得差不多了。
软件上各个按钮和控件的位置和大小都是按照原软件的大小和比例制作的,所有控件都可以动态响应。首先的任务把软件的整体界面效果制作出来,然后把剩下的小细节的动作一一实现,再者是把软件里面的各种动态效果渲染上去,‘最后便是把软件的实际功能编写完成。
目前遇到的最麻烦的问题就在于软件素材的获取,用工具提取出来的素材有1500多个,所有素材都在同一个文件夹里,没有规范的命名,所以为了找到对应的素材需要大费周折,实在不得已的情况还需要自己用PS把素材做出来,这着实浪费了许多时间。今天的任务就是把1500个素材整理分类,方便后面的界面开发的进行。
在制作标题栏的搜索功能时遇到问题,原来的软件背景如下
当单击编辑框时编辑框变为白色
并且,编辑框内嵌入了一个搜索按钮,整个编辑框的长度会随着软件的宽度的改变而自动改变。目前的问题是使用duilib做出来的编辑框在单击后可编辑区的白色和非编辑区的白色不一致,非编辑区的白色偏暗。并且如果使用绝对定位加入搜索按钮后,按钮无法跟随编辑框的长度的改变而自动改变位置,目前的想法是重载编辑框控件,重写DoPaint函数的代码,并且组合一个搜索按钮进去,动态修改按钮的位置。
刚才发现可编辑区的白色和非编辑区的白色不一致是由于背景图片的透明度与背景颜色参杂运算后造成的,在代码里当编辑框控件获取焦点时设置他的背景色为白色并且去掉背景图片,在失去焦点时设置背景色的透明度为0并且把背景图片再设置回去便解决了颜色不一致的问题。效果如下
搜索按钮自动定位的问题通过relativepos属性解决了,这是的搜索框已经和原版的完全一样了。但是此属性有个bug,就是窗体最小化并且恢复后会让有relativepos属性的控件发生错误的定位,于是问题转为了修复duilib的bug上,开工···
从上午9点到现在下午3点,调试了6个小时,终于发现并修复了duilib导致relativepos位置错乱的bug,问题出在UIManager.cpp的MessageHandler函数WM_PAINT消息处理上,窗体最小化和最大化时都会获取客户区的大小并传给子控件使其位移,但是最小化时获取的窗体大小是错误的,所以导致了relativepos位置错乱,处理方法很简单,在处理WM_PAINT消息时先用IsIconic函数判断此时窗体是否最小化,只有非最小化时才调整子控件位置。
这样,就可以完整的搜索框了。这是此项目中修复的第一个bug,mark一下。赶快去睡个觉,累死了~~
下午把整个图片素材大致整理了一下,一共1695个素材,分类放到文件夹里
.7.14 19:20 Redrain