有时如果我们在应用中需要提供一个滚动的信息提示条(类似于页面上的跑马灯marquee),其实也很容易做到,类似于我们前面做的菜单,下面我们也讨论一下吧。
跑马灯包括的数据结构如下:
struct_IGMarquee...{
constAEEVTBL(IGMarquee)*pvt;
uint32m_nRefs;
IShell*m_pIShell;
IDisplay*m_pIDisplay;
IModule*m_pIModule;
booleanm_isActive;
AEERectm_Rect;
uint16lenText;
uint16posText;
AECHAR*m_pText;
uint16m_delay;
IImage*m_pImageBk;
RGBVALm_color;
};
一个背景m_pImageBk,一个字体颜色m_color,然后就是文本内容了。m_delay、lenText和posText是用来让它跑起来的辅助变量。
要实现的方法也不多,如下:
AEEINTERFACE(IGMarquee)
...{
DECLARE_IBASE(IGMarquee)
DECLARE_ICONTROL(IGMarquee)
void(*SetText)(IGMarquee*po,AECHAR*szText);
void(*SetDelay)(IGMarquee*po,uint16delay);
void(*SetImageBk)(IGMarquee*po,IImage*img);
void(*SetColor)(IGMarquee*po,RGBVALi);
};
看看它的函数实现吧,首先HandleEvent不需要做任何事了,直接return FALSE即可,主要是那个Redraw了。需要作的事情就是调用我们的绘制函数DrawText,还有一个定时器也不断地回调这个函数:
staticvoidDrawText(IGMarquee*pMe)
...{
AECHARszText[128];
RGBVALoldColor;
if(pMe->m_pImageBk)
...{
IDISPLAY_EraseRect(pMe->m_pIDisplay,&pMe->m_Rect);
IIMAGE_SetDrawSize(pMe->m_pImageBk,pMe->m_Rect.dx,pMe->m_Rect.dy);
IIMAGE_Draw(pMe->m_pImageBk,pMe->m_Rect.x,pMe->m_Rect.y);
}
//if(pMe->m_pText&&WSTRLEN(pMe->m_pText)>pMe->lenText)
if(pMe->m_pText&&WSTRLEN(pMe->m_pText)>0)
...{
//显示滚动广告
MEMSET(szText,0,sizeof(szText));
WSTRLCPY(szText,pMe->m_pText+pMe->posText,sizeof(szText));
//if(WSTRLEN(szText)<pMe->lenText)
while(IDISPLAY_MeasureText(pMe->m_pIDisplay,AEE_FONT_NORMAL,szText)<pMe->m_Rect.dx)
...{
WSTRLCAT(szText,L"",sizeof(szText));
WSTRLCAT(szText,pMe->m_pText,sizeof(szText));
}
oldColor=IDISPLAY_SetColor(pMe->m_pIDisplay,CLR_USER_TEXT,pMe->m_color);
IDISPLAY_DrawText(pMe->m_pIDisplay,AEE_FONT_NORMAL,szText,-1,pMe->m_Rect.x,pMe->m_Rect.y+1,&pMe->m_Rect,IDF_TEXT_TRANSPARENT);
IDISPLAY_UpdateEx(pMe->m_pIDisplay,FALSE);
IDISPLAY_SetColor(pMe->m_pIDisplay,CLR_USER_TEXT,oldColor);
pMe->posText++;
if(pMe->posText>WSTRLEN(pMe->m_pText))
pMe->posText=0;
if(pMe->m_isActive)
ISHELL_SetTimer(pMe->m_pIShell,pMe->m_delay,(PFNNOTIFY)DrawText,pMe);
}
}
与菜单中让一个选中项文本左右滚动类似,我们也让这里的跑马灯文本左右滚动起来。靠得就是那两个变量lenText和posText。
分享到:
相关推荐
BREW是由QUALCOMM公司开发的一个强大的移动应用程序开发环境,主要应用于早期的CDMA网络智能手机和平板电脑,它提供了丰富的API和工具,使得开发者可以创建各种各样的无线应用,尤其是游戏。 BREW系统基于C++编程...
标题中的"PyPI 官网下载 | brew_tools-0.0.6-py2.py3-none-any.whl"指的是在Python的包索引服务(Python Package Index,简称PyPI)上下载的名为`brew_tools`的软件包。PyPI是Python开发者发布自己编写的开源软件的...
Homebrew,通常被称为“Mac上的套件管理器”,是一个开源项目,用于简化在Apple macOS操作系统上安装软件的过程。它的最新版本是4.1.14,这个版本包含了几个重要的组件和可能的更新。 首先,让我们深入理解Homebrew...
在调试过程中,使用BREW模拟器可以快速测试应用功能和性能,调整代码优化用户体验。 8. 进阶开发: 高级BREW开发者还可以利用扩展API(如Multimedia、Location等)实现更多功能,如多媒体播放、位置服务等。此外,...
Brew 3.1.5全套开发库安装文件,包括Brew SDK 3.1.5、SDK Tools、Tool Suite、Brew Addins
Homebrew是Mac OS X系统下的一个开源包管理器,它使得安装、管理和升级软件变得简单易行。在本文中,我们将深入探讨`brew 3.0`的中文API文档,帮助开发者更好地理解和利用这个强大的工具。 `Brew 3.0`是Homebrew的...
在这个项目中,“基于brew开发的小程序-电话本”是一个毕业生的设计作品,它利用Brew技术创建了一个简单的电话本应用。虽然这个应用的界面可能不够美观,但其核心功能——电话本的保存和排序——已经实现,对于初学...
docker-brew-ubuntu-core, 在 Docker 中,官方导入的Ubuntu核心tarball用于使用 ;dr: git clone --single-branch https://github.com/tianon/docker-brew-ubuntu-core.git不打开请求来更新图像用于准备Ubuntu官方 ...
在这个名为“brew的简单代码”的项目中,我们似乎有一个包含多个工程的压缩包,这可能是一个学习或实践`brew`使用的小型项目集合。 1. **什么是Homebrew(Brew)**: Homebrew是用于Mac OS X的开源包管理器,由Max...
1. Cask简介:Homebrew Cask提供了一个命令行接口,用于安装和管理Mac的图形化应用程序。 2. 安装Cask:在安装Brew后,Cask通常已被包含,但可以通过`brew install caskroom/cask`确保最新版本。 3. 使用Cask:安装...
这个标题和描述实际上是在提到了一个名为“吉普赛读心术”的小游戏,它可能是基于iOS或macOS平台,因为"brew"通常指的是Homebrew,这是一个在这些操作系统上广泛使用的包管理器。这个小游戏的特色是能够猜出玩家心里...
在这个场景中,你提到的是使用Brew来开发一个小程序,名为“秒表”。这个小程序可能是为了实践Brew的编程和包装技能而创建的,对于初学者来说,这样的项目是很好的学习资源。 首先,我们来了解一下Brew的基本概念。...
BREW系统包括一个运行时环境、开发工具、应用程序接口(API)以及分发和计费系统。 深入BREW开发系列主要涵盖了以下几个方面: 1. **BREW基础**:这部分可能讲解了BREW的基本架构,包括其组件、工作流程和生命周期...
标签“jar”进一步确认了这是一个Java相关的文件,特别是JAR格式的文件,这种文件在Java开发中非常常见,因为它们可以作为一个单独的单元来部署和执行。 在压缩包的子文件中,我们有两个文件:“antlr-2.7.6-brew....
标题中的“25个brew应用源码”指的是25个基于BREW(Binary Runtime Environment for Wireless)平台的应用程序源代码。BREW是由高通公司开发的一种面向无线设备的操作系统和应用开发环境,主要用于早期的智能手机和...
### Brew-API参考资料中文解析 #### 简介 Brew-API是Binary Runtime Environment for Wireless (BREW) 平台提供的一套应用程序接口(API),旨在帮助开发者构建高效、可靠的无线应用。该API文档由QUALCOMM ...