⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brw_comm.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
字号:
/**************************************************************************
                                                                          
              Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD                   
                                                                          
 FILE NAME:   brw_comm.C                                                      
 MODULE NAME: browser                                                        
 DESCRIPTION: 提供了浏览器一些基础的函数
 对外函数声明:
	BrowserCharMemLength		字符内存长度
	BrowserJudgeMarkAbility		字符可否mark
	BrowserJudgeLetter			是否为字符
	BrowserTabWidth				Tab的宽度
		
**************************************************************************
    DTAE       AUTHOR     VERSION                 REMARKS                 
 =========== ==========  =========  ======================================
 2006-3-5    gaolinhui    V1.0					create                               
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"




/********************************************************************\
 Function:  根据给定的宽度,获取此宽度之外的字串
 Input:     lpString, 将被指定宽度截取的字串
			wFontID,字库类型
			byFontStyle,字体类型,只受斜体影响
			uRange,截取宽度
 Output:    uRange,截取宽度被调整之后的取值
 Notes:     如果字串无效将返回NULL
			如果字符全部在指定范围内,将返回有效指针,但其内容为NULL
 Update:
          Date         Name         Description
      ============ ============ ===================================
      2003-08-07  谢永良      任何情况下的模块初始化都需要初始化全局变量
\********************************************************************/
UINT8* BrwWidthCutStr(UINT8 *lpString, UINT16 wFontID, UINT8 byFontStyle, UINT *uRange)
{
    UINT16      FontCode, wInvalid, width;
    UINT8       *bakAddr;
    FontInfo    sFontInfo;
    BOOL        bFirst;
	BOOL        CodeWidth;
	
    width = *uRange;
    bFirst = TRUE;
    bakAddr = lpString;
    
    if (IS_ID(lpString))
	{
        return NULL;        // cannot be ID
	}

    while (*lpString)
    {
		CodeWidth = FontGetCharCodeWidth(lpString);
		
		if(CodeWidth == 1)
		{
	        FontCode = *lpString;
			wInvalid = ' ';
		}
		else if(CodeWidth == 2)
        {
        	FontCode = (lpString[0]<<8) + lpString[1];
        	wInvalid = 0xa1a1;
        }
		else if(CodeWidth == 4)
		{
			FontCode = (lpString[0]<<24) + (lpString[1]<<16) + (lpString[2]<<8) + lpString[3];
        	wInvalid = 0xa1a1;
		}
		
        if (FontGetCharInfo(wFontID, FontCode, &sFontInfo, NULL)
            || FontGetCharInfo(wFontID, wInvalid, &sFontInfo, NULL))
        {
            if (bFirst)
            {
/*
                if (byFontStyle & FS_ITALIC) //    斜体字占用更多的宽度
                {
                    if (width > (sFontInfo.fontHeight >> 2))
                    {
                        width -= sFontInfo.fontHeight >> 2;
                    }
                    else
                    {
                        return bakAddr;
                    }
                }
*/            
                bFirst = FALSE;
            }

            if (width >= sFontInfo.wFontWidth)
            {
                width -= sFontInfo.wFontWidth;
				lpString += CodeWidth;
            }
            else
			{
                break;
			}
        }
		else
        {
            lpString += CodeWidth;
        }
    }

    *uRange = *uRange - width;

    return  lpString;
}




/************************************************************************/
/* 函数名称: BrowserCharMemLength                                         */
/* 函数描述: 字符内存长度	                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pChar			- 数据指针									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          内存长度                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT16 BrowserCharMemLength(UINT8 *pChar)
{
	return FontGetCharCodeWidth(pChar);
	
/*	if (*pChar & 0x80)
	{
		//全角字符
		return 2;
	}
	else if (BrowserJudgeUserFont(pChar))
	{
		return 2;
	}
	else
	{
		return 1;
	}
*/	
}


/************************************************************************/
/* 函数名称: BrowserJudgeMarkAbility                                      */
/* 函数描述: 判断字符是否可MARK                                         */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pSur			- 数据指针									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          内存长度                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
/*可以MARK的汉字编码范围:
1、 GBK编码的双字节2区6768个:B0A1 -F7FE
2、 GBK编码的双字节3区6080个:8140-A0FE
3、 GBK编码的双字节4区8160个:AA40-FEA0
4、 自造字的双字节1区527个:AAA1 -AFD9
5、 自造字的双字节2区641个:F8A1 -FEED
 可以MARK的ASCII字符编码范围:
1、 英文大写字母A,…,Z(0x61,…, 0x7A)
2、 英文小写字母a,…,z(0x41,…, 0x5A)
3、 缩略符 ' (0x27)、连字符 - (0x2D)

数字上标不可以MARK:
	8229,8222,8223,A124-A129
*/
UINT BrowserJudgeMarkAbility(UINT8 *pChar)
{
    UINT    uChar, uChar2;

    uChar = *pChar;
	
	//四字节编码
	if(FontGetCharCodeWidth(pChar) == 4)
		return 0;
		
    if (uChar & 0x80)								
    {/*  全 角  */
        uChar2 = *(pChar + 1);
		if (uChar == 0x82)
		{
			if ((uChar2 == 0x29) || (uChar2 == 0x22) || (uChar2 == 0x23))
			{
				return 0;
			}
		}
		if (uChar == 0xA1)
		{
			if ((uChar2 >= 0x24) && (uChar2 <= 0x29))
			{
				return 0;
			}
		}
        if (((uChar >= 0xB0) && (uChar <= 0xF7)) 
                    && ((uChar2 >= 0xA1) && (uChar2 <= 0xFE)))
        {/*GBK编码的双字节2区6768个*/
            return 2;
        }
        if (((uChar >= 0x81) && (uChar <= 0xA0)) 
                    && ((uChar2 >= 0x40) && (uChar2 <= 0xFE)))
        {/*GBK编码的双字节3区6080个*/
            return 2;
        }
        if (((uChar >= 0xAA) && (uChar <= 0xFE)) 
                    && ((uChar2 >= 0x40) && (uChar2 <= 0xA0)))
        {/*GBK编码的双字节4区8160个*/
            return 2;
        }
        if (((uChar == 0xA5) || (uChar == 0xA8)) 
                    && ((uChar2 >= 0xA1) && (uChar2 <= 0xFE)))
        {/*GBK编码的非汉字符号*/
            return 2;
        }        
        if (BrowserJudgeUserFont(pChar)) 
        {
			/*自造字*/
			/*组合字不可以mark*/
			if(!__BViewIsCombinedFont(pChar)) {
				return 2;
			}
        }
    }
    else
    {
        if (BrowserJudgeLetter(pChar))
        {/*字母可MARK*/
            return 1;
        }
		else if (WORD_DIVIDE_CHAR(uChar) && BrowserJudgeLetter(pChar + 1))
        {
			/*当为缩略符或连字符时,只有其前
					后都为英文字符时,才是可MARK字符*/
            return 1;
        }
        else if (('0' <= uChar) && (uChar <= '9'))
        {/*数字可MARK*/
        	return 1;
      	}
    }
	return 0;
}

/************************************************************************/
/* 函数名称: BrowserJudgeLetter                                           */
/* 函数描述: 是否为字母		                                            */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			pChar			- 数据指针									*/
/* 输出参数:                                                            */
/*          NONE					                                    */
/* 返回值  :                                                            */
/*          内存长度                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT BrowserJudgeLetter(UINT8 *pChar)
{
    UINT    uChar;

    uChar = *pChar;
    if (((uChar >= 'A') && (uChar <= 'Z')) 
                || ((uChar >= 'a') && (uChar <= 'z')))
    {
        return 1;
    }
    return 0;
}



/************************************************************************/
/* 函数名称: BrowserTabWidth	                                            */
/* 函数描述: 计算TAB宽度                                                */
/* 当前版本: 1.0                                                        */
/* 作    者: gaolinhui                                                      */
/* 输入参数:                                                            */
/*			handle			- 对象句柄									*/
/* 输出参数:                                                            */
/*          NONE                                                        */
/* 返回值  :                                                            */
/*          宽度	                                                    */
/* 更改记录:                                                            */
/* =====================================================================*/
/*    日期       人员       版本   描述                                 */
/* =====================================================================*/
/* 2006-3-1    gaolinhui      1.0    创建	                                */
/************************************************************************/
UINT16 BrowserTabWidth(MBrowser *handle)
{
	UINT16 width,height;
	UINT16 font;

	font = GraphSetFontID(handle->pBrwInfo->wFontID);
	FontGetStringRect(&width,&height,"1 ");
	GraphSetFontID(font);
	return (UINT16)width;
}





UINT16 BrowserItemSpace(MBrowser *handle)
{
	UINT16 font0,font;
	FontInfo fontInfo;
	UINT16 height0,ret;
	
	font0 = handle->pBrwInfo->wFontID;
	FontGetCharInfo(font0,' ',&fontInfo,NULL);
	height0 = fontInfo.wFontHeight;
/*
	if (font0 == SYSFONT_DIFFGBK16)
	{
		font = SYSFONT_DIFFGBK24;
	}
	else if (font0 == SYSFONT_DIFFGBK12)
	{
		font = SYSFONT_DIFFGBK16;
	}
	else if (font0 == SYSFONT_DIFFGBK24)
	{
		font = SYSFONT_DIFFGBK24;
	}
*/
	font = font0;
	FontGetCharInfo(font,' ',&fontInfo,NULL);
	ret = height0 * 2 - fontInfo.wFontHeight;
	return ret;
}

UINT16 BrowserItemHeigh(MBrowser *handle)
{
	UINT16 font0;
	FontInfo fontInfo;
	
	font0 = FONT16_NORMAL_FONT; //handle->pBrwInfo->wFontID;
	FontGetCharInfo(font0, ' ', &fontInfo,NULL);
	return (UINT16)fontInfo.wFontHeight;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -