欢迎来到天天文库
浏览记录
ID:22752827
大小:200.00 KB
页数:19页
时间:2018-10-31
《ucgui窗体管理及消息处理机制分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、UCGUI技术文集UCGUI专业网站:www.ucgui.comUCGUI窗体管理及消息处理机制分析----多对话框/模态窗体/透明窗体支持分析作者:ucgui日期:2005-09-08[v1.0.0.02005-06-30完成]来源:http://www.ucgui.com版本:v1.0.0.1版本修改说明时间v1.0.0.0ü实现UCGUI中多对话框支持。2005-06-30v1.0.0.1ü增加UCGUI中各种基本消息介绍 。ü增加窗体消息LOOP机制介绍。ü增加对话框结构说明及其消息LOOP处理移到M ainTask函数中由用户处理的原因剖析,并详细分析了对话框中按钮的
2、点击消息传送到用户自定义对话框回调函数中处理的传递流程。ü增加外部输入设备消息处理机制介绍。如滑动操作外设MOUSE及触摸屏输入消息(WM_TOUCH)的处理机制,及按键式操作外设消息(WM_KEY)处理机制。ü增加一种更简单的多对话框支持的方法及说明。ü增加模态对话框实现原理分析。ü增加透明窗体实现原理分析。2005-09-08问题的提出:Ø[求助]关于对话框处理程序中,想在OK按钮按下后想弹出一个消息框,该怎么做?直接加在程序中好像不行,如何让消息框弹出后成为模态窗体呢?请版主帮帮忙。Ø[解析]在UCGUI中,对话框只支持单个对话框窗体,不支持多个独立的对话框,现在我们从其
3、源码来分析一下它为什么支持单个对话框窗体以及如何改进它以支持多个独立对话框,要讲解这个问题我们必须首先理解UCGUI中的窗体消息LOOP,没有消息LOOP窗体就是死水一潭,不能接受任何外界的输入,只是一个画在那里的图画而已。Ø[声明]本文中提到的源码均为UCGUI3.24版源码,新版UCGUI源码会有改动,请下载本文示例代码来结合阅读本文。摘要:本文主要介绍了UCGUI中的对话框的消息处理机制,并指出在现有UCGUI上如何增加多窗体支持,并在分析解决问题时着重介绍了其输入设备消息WM_TOUTCH及WM_KEY两类消息处理方法,19UCGUI专业论坛UCGUI技术文集UCGUI
4、专业网站:www.ucgui.com并同时初步指出一种在UCGUI中实现模态对话框以及透明窗体的原理说明,不还有窗体重画消息WM_PAINT消息处理原理。一、各种基本消息介绍及处理流程----对话框内部消息流转及外部消息LOOP分析.UCGUI是采用的消息驱动的,它专门有对外的一套收集消息的接口,我在模似器中,就是通过LCD模拟显示屏窗口的MOUSE消息,将MOUSE消息传入到这个接口中,以驱动UCGUI中的窗体的。UCGUI中的消息驱动其实与WINDOWS的是类似的,几种基本的消息与WINDOWS是一样的,但UCGUI的更简单且消息更少,对于一些消息的处理得也很简化,没有WI
5、NDOWS那么多的消息种类及复杂处理。在WINDOWS中,如我们处理按钮控件的点击事件的是在WM_COMMAND消息中,通过按钮的标志ID来区分不同的按钮,所以按钮标志ID必须不同的,否则无法区别开(除非不在父窗体的WM_COMMAND消息中处理)。UCGUI中一些基本的消息如下:ØWM_CREATE---窗体创建消息,每创建一个窗体完后都会向该窗体发送此消息,如WM_CreateWindowAsChild创建完窗体均会发一此消息,但在UCGUI中对于此消息的很少处理,如果用户想在对话框之后做些初始化操作或是创建其它子窗体的动作,可以处理此消息,不过对话框一般有专门的初始化消息
6、WM_INIT_DIALOG,它是在创建对话框后发送的。ØWM_SHOW-----显示窗体消息,此消息在UCGUI中各控件窗体内均未作处理,如果你通过消息发送函数来发送这类没有在UCGUI中各窗体中处理的消息,是没有有什么响应的,不要感到奇怪。要显示窗体一般是通过WM_ShowWindow()函数实现的,这个函数做的也就是改变窗体显示标志[WM_SF_ISVIS],并使窗体矩形区域无效[WM_InvalidateWindow()]以产生重画消息。ØWM_SET_ENABLE---设置窗体不能使用消息,UCGUI中有一种复选框为不可改变的,但是这个功能也不完全,如果你对着UCGU
7、I中的按钮使用WM_DisableWindow()来设置其无效,按钮照样还是可以使用,不过要改进这些小毛病还是很容易的,这里只是提醒大家UCGUI中很多没有实现的小地方,不要到时候使用时感到很奇怪,感觉到奇怪时最好去看看源码,看看源码中是否实现了此功能,不要郁闷。ØWM_PAINT----窗体重画消息,当窗体所在区域全部或是部分区域无效时,系统将会发出该重画消息,将无效区域重画,但UCGUI中的处理比较简单,都是将窗体全部区域重画;如果用户自己想在窗体上画上一些信息,一般都在在该消息当中画,
此文档下载收益归作者所有