///////////////////////////////////////////////////////////////////////////////
/// global MApp_ZUI_CTL_MarqueeTextWinProc
/// Window Proc for "marquee text" control,
/// which display a static text by clipped string with dynamic color
/// if the string content is more than boundary, it will set a timer for text rotation (once)
///
/// rule: if window data == 0, no marquee animation
/// if window is not focus state, no marquee animation
/// if dynamic string content is shorter than boundary, no marquee animation
/// if pData->u8ShowStartPosition==0xFF, animation disabled
/// if pData->u8ShowStartPosition>=strlen, animation disabled
///
///
/// @param [in] hWnd HWND window handle
/// @param [in] pMsg PMSG message type
///
/// @return S32 message execute result
///
/// @author MStarSemi @date 2007/1/25
/////////////////////////////////////////////////////////////////////////////// S32 MApp_ZUI_CTL_MarqueeTextWinProc(HWND hWnd, PMSG pMsg)
{
GUI_DATA_MARQUEE_VARDATA * pData =
(GUI_DATA_MARQUEE_VARDATA*)MApp_ZUI_API_GetWindowData(hWnd); switch(pMsg->message)
{
case MSG_TIMER:
if (pData)
{
if (pData->u8ShowStartPosition == 0)
MApp_ZUI_API_SetTimer(hWnd, pMsg->wParam, ZUI_MARQUEE_ANIMATION_INTERVAL_MS);
pData->u8ShowStartPosition++;
MApp_ZUI_API_InvalidateWindow(hWnd);
}
return 0; case MSG_PAINT:
{
//get buffer GC for offline drawing...
PAINT_PARAM * param = (PAINT_PARAM*)pMsg->wParam;
DRAWSTYLE_TYPE ds_type = DS_NORMAL; if (param->bIsDisable)
{
param->dc.u8ConstantAlpha = MApp_ZUI_API_GetDisableAlpha(hWnd);
ds_type = DS_DISABLE;
}
else if (param->bIsFocus) //the same focus group
{
param->dc.u8ConstantAlpha = MApp_ZUI_API_GetFocusAlpha(hWnd);
ds_type = DS_FOCUS;
}
else
{
param->dc.u8ConstantAlpha = MApp_ZUI_API_GetNormalAlpha(hWnd);
} _MApp_ZUI_API_DefaultOnPaint(hWnd, param, FALSE);
{
U16 u16TxtComponentIndex = _MApp_ZUI_API_FindFirstComponentIndex(hWnd, ds_type, CP_TEXT_OUT);
LPTSTR pStr = MApp_ZUI_ACT_GetDynamicText(hWnd);
if (u16TxtComponentIndex != 0xFFFF && pStr)
{
DRAW_TEXT_OUT_DYNAMIC dyna; _MApp_ZUI_API_ConvertTextComponentToDynamic(u16TxtComponentIndex, &dyna);
dyna.pString = pStr;
dyna.TextColor = MApp_ZUI_ACT_GetDynamicColor(hWnd, ds_type, dyna.TextColor); //marquee animation:
if (ds_type == DS_FOCUS && pData != NULL &&
pData->u8ShowStartPosition != 0xFF)
{
if (pData->u8ShowStartPosition >= MApp_ZUI_API_Strlen(pStr))
{
pData->u8ShowStartPosition = 0xFF;
MApp_ZUI_API_KillTimer(hWnd, 0);
}
else if (pData->u8ShowStartPosition == 0)
{
U16 width;
clrBtn1.Fontfmt.flag = dyna.flag;
clrBtn1.Fontfmt.ifont_gap = dyna.u8dis;
clrBtn1.bStringIndexWidth = CHAR_IDX_2BYTE;
width = msAPI_OSD_GetStrWidth(Font[dyna.eSystemFont].fHandle, (U8*)pStr, &clrBtn1);
//note: add border for a little truncate case..
if (width+BTN_TEXT_GAP*2 <= param->rect->width)
{
pData->u8ShowStartPosition = 0xFF;
MApp_ZUI_API_KillTimer(hWnd, 0);
}
}
else
{
dyna.pString += pData->u8ShowStartPosition;
dyna.u8dots = 0; //note: don't show dots for animation..
}
}
else
{
//note: pData may be shared with others, so don't clear them
// but we need to stop the timer if animation still going
MApp_ZUI_API_KillTimer(hWnd, 0);
} _MApp_ZUI_API_DrawDynamicComponent(CP_TEXT_OUT_DYNAMIC, &dyna, &param->dc, param->rect);
}
} }
return 0; default:
break;
} return DEFAULTWINPROC(hWnd, pMsg);
} ///////////////////////////////////////////////////////////////
// methods void MApp_ZUI_CTL_MarqueeTextEnableAnimation(HWND hwnd, BOOLEAN bEnable)
{
//note: if enable, try to check string length is long enough, and then start animation
// if disable, stop and clear to normal status if (hwnd != HWND_INVALID)
{
GUI_DATA_MARQUEE_VARDATA * pData =
(GUI_DATA_MARQUEE_VARDATA*)MApp_ZUI_API_GetWindowData(hwnd); if (pData == NULL)
return; if (bEnable)
{
pData->u8ShowStartPosition = 0;
MApp_ZUI_API_SetTimer(hwnd, 0, ZUI_MARQUEE_INITIAL_INTERVAL_MS);
}
else
{
pData->u8ShowStartPosition = 0xFF;
MApp_ZUI_API_KillTimer(hwnd, 0);
}
MApp_ZUI_API_InvalidateWindow(hwnd);
}
}

  

MApp_ZUI_CTL_MarqueeTextWinProc字串滚动的更多相关文章

  1. 【NOIP2015】 Day2 T2 字串 (多维动归)

    2018-09-12 原题传送门(洛谷)https://www.luogu.org/problemnew/show/P2679 模拟考试的时候完全没有想到 正确的DP方程呢 本来写了一个大致是对的转移 ...

  2. 最大公共字串LCS问题(阿里巴巴)

    给定两个串,均由最小字母组成.求这两个串的最大公共字串LCS(Longest Common Substring). 使用动态规划解决. #include <iostream> #inclu ...

  3. 编程:使用递归方式判断某个字串是否回文(Palindrome)

    Answer: import java.util.Scanner; public class Palindrome { private static int len;//全局变量整型数据 privat ...

  4. NOIP2002字串变换[BFS]

    题目描述 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$.A2 ...

  5. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  6. mormot 数据集转换为JSON字串

    mormot 数据集转换为JSON字串 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graph ...

  7. 字串变换(codevs 1099)

    题目描述 Description 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为:在 A$中的子串 A1$ ...

  8. @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不

    @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中 2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不加@那么需要用一些转义符\来显示一些特 ...

  9. PHP 中替换若干字符串字串为数组中的值,不用循环,非常高效

    替换某个字符串中的一个或若干个字串为数组中某些值 php本身有自带的函数,可以不用循环非常高效的实现其效果: 实例代码:   $phrase  = "You should eat fruit ...

随机推荐

  1. 复习题之Blah数集

    题目描述: 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于已a为基的集合Ba定义如下: (1)a是集合Ba的基,且a是Ba的第一个元素: (2)如果x在集合Ba中,则2x+1,3x+1 ...

  2. 洛谷P1650赛马与codevs 2181 田忌赛马

    洛谷P1650 赛马 题目描述 我国历史上有个著名的故事: 那是在2300年以前.齐国的大将军田忌喜欢赛马.他经常和齐王赛马.他和齐王都有三匹马:常规马,上级马,超级马.一共赛三局,每局的胜者可以从负 ...

  3. 洛谷P3178[HAOI]2015 树上操作

    题目 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想. 要注意在区间上连续的节点,一定是在一棵子树中. #include <bits/stdc++.h> #define ...

  4. linux 使用yum安装mysql详细步骤

    环境:Centos 6.5 Linux 使用yum命令安装mysql 1. 先检查系统是否装有mysql [root@localhost ~]#yum list installed mysql* [r ...

  5. PHP var_dump() 函数

    var_dump() 函数用于输出变量的相关信息 <?php $b = 3.1; $c = true; var_dump($b, $c); ?> 输出 float(3.1) bool(tr ...

  6. 第02组 Alpha冲刺(3/6)

    第02组 Alpha冲刺(3/6)   队名:無駄無駄组长博客作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的 ...

  7. Oracle通过一个字段的值将一条记录拆分为多条记录

    前言 之前遇到了一次这样的需求,当时没有记录,这一次又赶上了,简单的记录一下. 本文个人拙见,若有出入,请指出--来自菜的颤抖 场景 表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装 ...

  8. Unity设计模式+Java设计模式,讲解+案例+PPT,一次性学会设计模式,拥抱高薪!

    一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把锁的模式, ...

  9. Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型

    ylbtech-Docs-.NET-C#-指南-语言参考-关键字-内置类型-值类型:整型数值类型 1.返回顶部 1. 整型数值类型(C# 参考) 2019/10/22 “整型数值类型”是“简单类型”的 ...

  10. flutter drawer 自定义图标 icon 手动打开drawer

    方法1:GlobalKey import "package:flutter/material.dart"; class Test extends StatefulWidget { ...