`

在BREW中实现自己的GUI(3)-做一个跑马灯的效果

    博客分类:
  • brew
阅读更多

有时如果我们在应用中需要提供一个滚动的信息提示条(类似于页面上的跑马灯marquee),其实也很容易做到,类似于我们前面做的菜单,下面我们也讨论一下吧。

跑马灯包括的数据结构如下:

struct _IGMarquee ...{
    
    
const AEEVTBL(IGMarquee) * pvt;

    uint32          m_nRefs;    
    IShell            
*m_pIShell;
    IDisplay        
*m_pIDisplay;
    IModule            
*m_pIModule;

    boolean            m_isActive;

    AEERect            m_Rect;

    uint16            lenText;
    uint16            posText;
    AECHAR            
*m_pText;

    uint16            m_delay;

    IImage            
*m_pImageBk;
    RGBVAL            m_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,uint16 delay);
    
void        (*SetImageBk)     (IGMarquee *po,IImage *img);
    
void        (*SetColor)         (IGMarquee *po,RGBVAL i);
    
}
;


看看它的函数实现吧,首先HandleEvent不需要做任何事了,直接return FALSE即可,主要是那个Redraw了。需要作的事情就是调用我们的绘制函数DrawText,还有一个定时器也不断地回调这个函数:

static void DrawText(IGMarquee * pMe)
...{
    AECHAR    szText[
128];
    RGBVAL  oldColor;

    
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手机游戏开发BREW开发-海信(王宏兵).RAR

    BREW是由QUALCOMM公司开发的一个强大的移动应用程序开发环境,主要应用于早期的CDMA网络智能手机和平板电脑,它提供了丰富的API和工具,使得开发者可以创建各种各样的无线应用,尤其是游戏。 BREW系统基于C++编程...

    《深度剖析BREW实现原理》

    BREW系统主要由运行时环境、中间件和设备驱动组成,为应用程序提供了一个统一的接口,使得开发者可以编写一次代码,然后在多种不同的手机设备上运行。BREW平台支持C++编程语言,提供了丰富的API,涵盖了网络、多媒体...

    深入BREW开发(1-8)+深度剖析BREW实现原理

    BREW系统包括一个运行时环境、开发工具、应用程序接口(API)以及分发和计费系统。 深入BREW开发系列主要涵盖了以下几个方面: 1. **BREW基础**:这部分可能讲解了BREW的基本架构,包括其组件、工作流程和生命周期...

    brew c语言实现面向对象

    而在C语言中,虽然可以使用结构体和函数指针来实现类似的效果,但封装性相对较弱。 - **继承**:C++的继承机制更加直接和强大,可以直接在类声明中指定父类,自动继承所有属性和方法。而在C语言中,需要通过结构体...

    PyPI 官网下载 | brew_tools-0.0.6-py2.py3-none-any.whl

    标题中的"PyPI 官网下载 | brew_tools-0.0.6-py2.py3-none-any.whl"指的是在Python的包索引服务(Python Package Index,简称PyPI)上下载的名为`brew_tools`的软件包。PyPI是Python开发者发布自己编写的开源软件的...

    高通brew初级培训 培训资料 Brew开发技术文档.doc 海信BREW开发.pdf

    在调试过程中,使用BREW模拟器可以快速测试应用功能和性能,调整代码优化用户体验。 8. 进阶开发: 高级BREW开发者还可以利用扩展API(如Multimedia、Location等)实现更多功能,如多媒体播放、位置服务等。此外,...

    深部剖析BREW的实现原理

    - 实现了一个类似于操作系统的运行环境,用于管理和控制应用程序的生命周期。 - 提供了必要的接口和函数库,使应用程序能够调用底层硬件资源。 #### 三、BREW的关键技术 ##### 3.1 平台的作用 BREW平台包括开发...

    brew-4.1.14

    Homebrew,通常被称为“Mac上的套件管理器”,是一个开源项目,用于简化在Apple macOS操作系统上安装软件的过程。它的最新版本是4.1.14,这个版本包含了几个重要的组件和可能的更新。 首先,让我们深入理解Homebrew...

    基于brew开发的小程序-电话本

    在这个项目中,“基于brew开发的小程序-电话本”是一个毕业生的设计作品,它利用Brew技术创建了一个简单的电话本应用。虽然这个应用的界面可能不够美观,但其核心功能——电话本的保存和排序——已经实现,对于初学...

    brew 3.0中文API文档

    Homebrew是Mac OS X系统下的一个开源包管理器,它使得安装、管理和升级软件变得简单易行。在本文中,我们将深入探讨`brew 3.0`的中文API文档,帮助开发者更好地理解和利用这个强大的工具。 `Brew 3.0`是Homebrew的...

    Brew SDK & Tools -- 2

    Brew 3.1.5全套开发库安装文件,包括Brew SDK 3.1.5、SDK Tools、Tool Suite、Brew Addins

    基于BREW平台的嵌入式Java虚拟机研究与实现.pdf

    - 在BREW平台上实现一个轻量级的Java虚拟机,以确保能够在资源受限的设备上有效运行。 - Java虚拟机的设计需要考虑内存管理和性能优化,以适应BREW平台的特点。 - 通过定制化的类加载器和字节码解释器,实现Java...

    brewMP Windowed实现

    【BrewMP Windowed实现】是关于在Brew MP平台上构建具有窗口化界面的应用程序的知识点。Brew MP,全称Binary Runtime Environment for Wireless Mobile Platform,是由高通公司开发的一个强大的移动操作系统,主要...

    吉普赛读心术--一个brew小游戏

    这个标题和描述实际上是在提到了一个名为“吉普赛读心术”的小游戏,它可能是基于iOS或macOS平台,因为"brew"通常指的是Homebrew,这是一个在这些操作系统上广泛使用的包管理器。这个小游戏的特色是能够猜出玩家心里...

    docker-brew-ubuntu-core, 在 Docker 中,官方导入的Ubuntu核心tarball用于使用.zip

    docker-brew-ubuntu-core, 在 Docker 中,官方导入的Ubuntu核心tarball用于使用 ;dr: git clone --single-branch https://github.com/tianon/docker-brew-ubuntu-core.git不打开请求来更新图像用于准备Ubuntu官方 ...

Global site tag (gtag.js) - Google Analytics