2019年minigui开发中遇到的问题和对应学习方法

上传人:明*** 文档编号:107201958 上传时间:2019-10-18 格式:DOC 页数:19 大小:220.04KB
返回 下载 相关 举报
2019年minigui开发中遇到的问题和对应学习方法_第1页
第1页 / 共19页
2019年minigui开发中遇到的问题和对应学习方法_第2页
第2页 / 共19页
2019年minigui开发中遇到的问题和对应学习方法_第3页
第3页 / 共19页
2019年minigui开发中遇到的问题和对应学习方法_第4页
第4页 / 共19页
2019年minigui开发中遇到的问题和对应学习方法_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《2019年minigui开发中遇到的问题和对应学习方法》由会员分享,可在线阅读,更多相关《2019年minigui开发中遇到的问题和对应学习方法(19页珍藏版)》请在金锄头文库上搜索。

1、MINIGUI开发中遇到的问题和对应学习方法 篇一:MINIGUI开发中遇到的问题及解决方法 MINIGUI开发中遇到的问题及解决方法 MiniGui是基于消息机制的开发工具由于不具备可视化性这就要求开发人员熟悉其控件及消息机制首先要阅读其中的开发文档如: MINIGUIUSERMANUAL.pdf(了解其配置、编译及安装方法);MiniGUITechWhitePaper2.04C.pdf(了解控件及其用途); MINIGUIPROGGUIDEV2.04C.pdf(具体控件属性、消息等); 另外给出了控件的示例可以编译学习示例程序一般在mgsamples2.0.4文件夹中 在开发中遇到了一些问

2、题折腾了半天最后才发现是MiniGui的问题程序员开发时大多数是边做边学的遇到问题再查找解决方法这样印象更深刻下面把经常遇到甚至是低级幼稚的问题总结一下做个记录 1、不想修改的编辑框仍可以输入或输入的一个字符却显示两个等; 大多数可编辑的控件都有READONLY属性(不同控件前缀可能不同)该属性决定编辑框为只读属性用户不能修改编辑框中的内容但插入符可见因此如果不想让编辑框可编辑加上此属性就ok了 2、编辑框上不该有光标闪烁时却总是会闪烁; MiniGui有自己的消息循环机制常用的如MSGPAINT用于屏幕输出一般有以下情况时系统会收到MSGPAINT消息: 用户移动窗口或显示窗口时; 用Inv

3、alidateRect更新窗口的无效区域; 调用UpdateWindow重绘窗口; 覆盖程序窗口的对话框或消息框被消除; 下拉或弹出菜单被消除; 出现闪烁光标就要检查程序中是否有以上情况发生; 3、如何修改控件的背景颜色; MiniGui各控件的背景颜色是已经在MiniGUI.cfg的windowelementcolors段设置好的每个控件都会有以Register开头的函数根据该函数中WndClass.iBkColor对应的颜色序号在MiniGUI.cfg中查找进行修改即可但这种更改是全局性的如果只是临时更改可用SetWindowBkColor和SetWindowElementColorEx来

4、设置背景色和前景色 4、LISTVIEW创建及但不显示问题; 由于listview是MiniGui的扩展功能这样在配置时要把EXTlib中的LISTVIEWcontrol选中具体: 在libminigui2.0.4linux下执行makemenuconfig选中Extlibraryoptions中的Listviewcontrol编译修改makefile文件把extlib下的文件编译进去(一般情况下makefile已经包含了)并保证已经把编译好的libmgext2.0.so.4.0.0拷贝到你的文件系统的lib下; 在工程中如S7000的MiniGUIMain中增加 if(InitMiniGUI

5、Ext() return2; 这样就可以使用这个控件了 5、再次查看Listview内容时第一行数据不显示; 用listview控件时先把控件中的内容删除即发送LVMDELALLITEM然后再添加数据以免数据显示混乱; 6、button上不能同时显示文字和图片; 在button.c中画图和画字是在btnPaintContent中而BSBITMAP和BSTEXT同在同一个switch只能画一种情况解决方法:把图和字放在不同的函数中并且在画字的函数中不进行switch否则仍画不出字; 7、button上的图片不能满button显示 修改drawbitmapbutton函数中关于画图时图片的位置处理

6、; 8、SKIN实现chkbutton动态换图 Skin源码功能简单不能实现动态更换字的颜色字体换图等一方面是skin结构问题一方面是缺少相应功能为了实现动态换图进行了如下更改可见SKINS7000宏 chkbutton文件修改 增加sichkbuttont根据flag取相应的bmpindex; 增加DECLBUTTON取sichkbuttont类型的typedata; chkbuttondrawbg:改变画图方式根据item的大小位置进行缩放增加chkbuttongetbmp获取bmpindex; 增加chkbuttonsetbmp设置需要的bmp; chkbuttonops中增加chkbu

7、ttongetbmp和chkbuttonsetbmp; skin文件修改 增加skingetchkbtbmp获取bmpindex; 增加skinsetchkbtbmp设置bmpindex; 由于refreshitem刷新的是item的rchittest根据需要修改成刷新item大小的区域; 9、skin修改nrmlabel背景图和字的颜色 skin.h文件修改 增加silabelbmpt两个bmpindex; sinrmlabelt增加silabelbmptflag(color)和bmpflag根据flag和bmpflag的值设置相应的color和bmpindex; skin.c文件修改 增加

8、skingetlabelcolor获取bmpindex; 增加skinsetlabelcolor设置bmpindex和color根据flag和bmpflag的值设置相应的color和bmpindex; 由于refreshitem刷新的是item的rchittest根据需要修改成刷新item大小的区域; label.c文件修改 setlabel:增加根据flag和bmpflag的值设置相应的color和bmpindex;nrmlabelops中增加nrmlabeldrawbg用于画图和画字; 去掉nrmlabeldrawattached的调用; 篇二:学习MiniGui之窗口创建篇 最近在学习M

9、iniGui将一些分析的结果贴出来供大家参考同时欢迎大家的指正图形编程中窗口是一个重要的概念窗口其实是一个矩形框应用程序可以使用其从而达到输出结果和接受用户输入的效果窗口系统(WindowSystem)界于操作系统层次之上它是一个软件系统负责把显示屏幕分隔为不同的部分来帮助用户管理和控制不同的显示环境它提供基于窗口的工作模式在Linux上面X就是一个典型的窗口系统吧 在MiniGui中有三种窗口类型:主窗口对话框和控件窗口主窗口作为应用程序的主界面或开始界面子窗口通常是控件窗口也可以是自定义窗口类这里的控件窗口说白了就是一些窗口上面的控件比如按钮编辑框等对话框其实就是主窗口只不过一般为了完成特

10、殊用途所以在此加以区分 下面我们一起来看看这三种窗口类型的创建吧首先看CreateMainWindow函数它创建一个主窗口:由于代码比较长这里就不全部贴出了主要是说说关键的部分 CreateMainWindow函数通过接受PMAINWINCREATE类型的参数而创建一个窗口并返回其句柄关于PMAINWINCREATE结构的具体成员变量大家可以去查看源码下面主要对函数内部做个简单介绍 1.声明一个PMAINWIN类型并分配空间该变量用来存放创建的主窗口的信息 2.说下面的代码之前先说说托管(Hosting)窗口和被托管(Hosted)窗口吧我们知道 MiniGui内部实现了消息机制即当有键盘输入

11、事件发生时就往消息队列中发送键盘消息而一般是主窗口会不停的从消息队列中取出消息来处理或者自己响应或者忽略或者派发给其他的窗口那么这里就有一个问题消息队列是每个主窗口都有一个呢还是所有的主窗口都使用同一个消息队列在MiniGui中有个特殊的主窗口HWNDDESKTOP它是所有窗口的父窗口直观的说就是整个桌面的窗口当一个主窗口在创建的时候可以指定新建一个消息队列也可以使用别的主窗口的消息队列如果是后者假设主窗口A在创建时指定使用主窗口B的消息队列那么A就被称为被托管窗口而B则被称为托管窗口所以很明显CreateInfo.hHosting就是用来指明托管窗口的来看下面的代码这里对MiniGUI的两种

12、运行模式进行了区分126行是MiniGUIThreads模式在这种模式下如果托管窗口为HWNDDESKTOP则判断当前线程是否已经有了消息队列如果没有则掉InitThreadInfo来新建一个消息队列否则使用已经有的消息队列;如果托管窗口不为HWNDDESKTOP则返回hHosting所在的主窗口的消息队列这就保证了同一个线程的所有窗口使用同一个消息队列2731行是非MiniGUIThreads模式 下新的主窗口使用HWNDDESKTOP的消息队列托管主窗口如果为空则使用HWNDDESKTOP否则设置为pHosting所在的主窗口 3.下面的几行是对pWin进行初始化的操作第1行赋值消息处理回

13、调函数第9行 初始化pZorderNode成员 4.初始化结束之后就开始发送消息通知自身来真正的绘制窗口了14行发送本窗口 的MSGSIZECHANGING和MSGCHANGESIZE消息会调用本窗口消息回调函数中的相应处理部分第6行是发送MSGADDNEWMAINWIN消息给HWNDDESKTOP窗口HWNDDESKTOP窗口主要负责初始化Clip区和Invalid区并且把当前窗口添加到sgMainWinZOrder链表里这个链表记录的是所有窗口的叠加顺序在显示和隐藏窗口的时候叠加顺序很重要它会决定屏幕上些窗口会受影响而需要重绘第9行发送MSGCREATE消息给窗口窗口接受到此消息一般进行子

14、窗口的初始化和创建如果创建失败了则通知HWNDDESKTOP窗口销毁该主窗口 接下来我们看对话框的创建过程对话框分为模态和非模态对话框非模态对话框的创建过程和主窗口的创建过程差不多其中也调用了CreateMainWindow函数之后还调用了CreateWindowEx创建对话框上的控件模态对话框就是显示之后用户不能再切换到其他主窗口进行工作的对话框而只能在关闭之后才能使用其他的主窗口通过DialogBoxIndirectParam创建一开始的步骤与非模态对话框类似以下的代码是其不同的部分:第7行hOwner是待创建对话框的托管主窗口这里其实是把它disable掉了第11行是处理MSGINITDIALOG消息第1821行是消息处理的循环机制这里可以看到这就是为什么模态对话框一定要等到关闭之后才可以使用其它的主窗口这里还需要注意一点由于是从对话框的托管主窗口是HWNDDESKTOP窗口因此他们共用一个消息队列此时对话框可能接受到发送给托管主窗口的消息而由于在第7行中已经将托管主窗口的dwStyle设置为WSDISABLE了因此在这些消息处理流程里面可以做相应的处理(例如当窗口被设置为WSDISABLE时忽略该消息)2528行当窗口关闭时进行的收尾工作第31行enable托管主窗口第23行判断了当前对话框是否是激活窗口如果是的话当它关闭时它的托管主窗口应该被激活(3435L) 篇

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号